@pionex/pionex-ai-kit 0.2.44 → 0.2.45
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/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ async function main() {
|
|
|
8
8
|
const { buildKitProgram } = await import("./kit-7X7UVP4Q.js");
|
|
9
9
|
await buildKitProgram().parseAsync(process.argv);
|
|
10
10
|
} else {
|
|
11
|
-
const { buildTradeProgram } = await import("./trade-
|
|
11
|
+
const { buildTradeProgram } = await import("./trade-EKHXN3M7.js");
|
|
12
12
|
await buildTradeProgram().parseAsync(process.argv);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -79,8 +79,8 @@ function generateFishCompletion() {
|
|
|
79
79
|
"# orders subcommands",
|
|
80
80
|
...T.orders.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from orders' -a '${s}'`),
|
|
81
81
|
"",
|
|
82
|
-
"# bot subcommands",
|
|
83
|
-
...T.bot.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from bot' -a '${s}'`),
|
|
82
|
+
"# bot subcommands (only before entering futures_grid or spot_grid)",
|
|
83
|
+
...T.bot.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from bot; and not __fish_seen_subcommand_from futures_grid spot_grid' -a '${s}'`),
|
|
84
84
|
"",
|
|
85
85
|
"# bot futures_grid commands",
|
|
86
86
|
...T.futures_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from futures_grid' -a '${s}'`),
|
|
@@ -88,8 +88,8 @@ function generateFishCompletion() {
|
|
|
88
88
|
"# bot spot_grid commands",
|
|
89
89
|
...T.spot_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from spot_grid' -a '${s}'`),
|
|
90
90
|
"",
|
|
91
|
-
"# earn subcommands",
|
|
92
|
-
...T.earn.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from earn' -a '${s}'`),
|
|
91
|
+
"# earn subcommands (only before entering dual)",
|
|
92
|
+
...T.earn.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from earn; and not __fish_seen_subcommand_from dual' -a '${s}'`),
|
|
93
93
|
"",
|
|
94
94
|
"# earn dual commands",
|
|
95
95
|
...T.dual.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from dual' -a '${s}'`),
|
|
@@ -783,4 +783,4 @@ function buildTradeProgram() {
|
|
|
783
783
|
export {
|
|
784
784
|
buildTradeProgram
|
|
785
785
|
};
|
|
786
|
-
//# sourceMappingURL=trade-
|
|
786
|
+
//# sourceMappingURL=trade-EKHXN3M7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/trade.ts","../src/completion.ts","../src/commands/market.ts","../src/commands/account.ts","../src/commands/orders.ts","../src/commands/bot.ts","../src/commands/earn.ts","../src/commands/capabilities.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { version } from \"./helpers.js\";\nimport { initCompletion, generateFishCompletion } from \"./completion.js\";\nimport { buildMarketCommand } from \"./commands/market.js\";\nimport { buildAccountCommand } from \"./commands/account.js\";\nimport { buildOrdersCommand } from \"./commands/orders.js\";\nimport { buildBotCommand } from \"./commands/bot.js\";\nimport { buildEarnCommand } from \"./commands/earn.js\";\nimport { buildCapabilitiesCommand } from \"./commands/capabilities.js\";\n\n// omelette must be initialized before commander parses argv\n// (it intercepts COMP_LINE / COMP_POINT env vars set by the shell)\nconst completion = initCompletion();\n\nexport function buildTradeProgram(): Command {\n const program = new Command(\"pionex-trade-cli\")\n .version(version, \"-v, --version\", \"Print version number\")\n .description(\"Pionex trading CLI — direct access to market data, orders, bots, and earn products\")\n .addHelpCommand(true);\n\n // Global options inherited by all sub-commands via cmd.optsWithGlobals()\n program\n .option(\"--profile <name>\", \"Profile name in ~/.pionex/config.toml\")\n .option(\"--modules <list>\", \"Comma-separated modules to enable (market,account,orders,bot,earn or all)\")\n .option(\"--base-url <url>\", \"Override API base URL\")\n .option(\"--read-only\", \"Disable write operations (orders new/cancel, etc.)\")\n .option(\"--dry-run\", \"Print resolved request body without executing (write commands only)\");\n\n program.addCommand(buildMarketCommand());\n program.addCommand(buildAccountCommand());\n program.addCommand(buildOrdersCommand());\n program.addCommand(buildBotCommand());\n program.addCommand(buildEarnCommand());\n program.addCommand(buildCapabilitiesCommand());\n\n // Shell completion setup commands\n program\n .command(\"setup-completion\")\n .description(\"Install tab completion for bash/zsh (run once, then source your shell config)\")\n .action(() => {\n completion.setupShellInitFile();\n process.stdout.write(\n \"✓ Completion installed.\\n\" +\n \" bash: source ~/.bashrc\\n\" +\n \" zsh: source ~/.zshrc\\n\"\n );\n });\n\n program\n .command(\"setup-completion-fish\")\n .description(\n \"Print fish shell completion script\\n\" +\n \" Usage: pionex-trade-cli setup-completion-fish > ~/.config/fish/completions/pionex-trade-cli.fish\"\n )\n .action(() => {\n process.stdout.write(generateFishCompletion());\n });\n\n return program;\n}\n","import { createRequire } from \"node:module\";\n\nconst _require = createRequire(import.meta.url);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// COMPLETION TREE\n//\n// ⚠️ 每次新增、删除、重命名命令时,必须同步更新此处。\n// 同时检查 src/commands/ 下对应文件中的 .command() 声明保持一致。\n// ─────────────────────────────────────────────────────────────────────────────\nexport const COMPLETION_TREE = {\n groups: [\"market\", \"account\", \"orders\", \"bot\", \"earn\", \"capabilities\"],\n market: [\"depth\", \"trades\", \"symbols\", \"tickers\", \"book_tickers\", \"klines\"],\n account: [\"balance\"],\n orders: [\"new\", \"get\", \"open\", \"all\", \"fills\", \"fills_by_order_id\", \"cancel\", \"cancel_all\"],\n bot: [\"order_list\", \"futures_grid\", \"spot_grid\"],\n futures_grid: [\"get\", \"create\", \"adjust_params\", \"reduce\", \"cancel\", \"check_params\"],\n spot_grid: [\"get\", \"get_ai_strategy\", \"create\", \"adjust_params\", \"invest_in\", \"cancel\", \"profit\", \"check_params\"],\n earn: [\"dual\"],\n dual: [\"symbols\", \"open_products\", \"prices\", \"index\", \"delivery_prices\",\n \"balances\", \"get_invests\", \"records\", \"invest\", \"revoke_invest\", \"collect\"],\n} as const;\n\ntype OmeletteReply = { reply: (words: readonly string[]) => void };\ntype OmeletteInstance = {\n on(event: string, handler: (opts: OmeletteReply) => void): void;\n init(): void;\n setupShellInitFile(filepath?: string): void;\n cleanupShellInitFile(filepath?: string): void;\n};\n\n/**\n * 初始化 omelette 补全(bash/zsh)。\n * 必须在 commander 解析参数之前调用(模块加载时执行)。\n */\nexport function initCompletion(): OmeletteInstance {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const omelette = _require(\"omelette\") as (template: string) => OmeletteInstance;\n const completion = omelette(\"pionex-trade-cli <group> <sub> <cmd>\");\n\n const T = COMPLETION_TREE;\n completion.on(\"group\", ({ reply }) => reply(T.groups));\n completion.on(\"market\", ({ reply }) => reply(T.market));\n completion.on(\"account\", ({ reply }) => reply(T.account));\n completion.on(\"orders\", ({ reply }) => reply(T.orders));\n completion.on(\"bot\", ({ reply }) => reply(T.bot));\n completion.on(\"futures_grid\", ({ reply }) => reply(T.futures_grid));\n completion.on(\"spot_grid\", ({ reply }) => reply(T.spot_grid));\n completion.on(\"earn\", ({ reply }) => reply(T.earn));\n completion.on(\"dual\", ({ reply }) => reply(T.dual));\n\n completion.init();\n return completion;\n}\n\n/**\n * 生成 fish shell 补全脚本。\n * 输出到 stdout,用户重定向到:\n * ~/.config/fish/completions/pionex-trade-cli.fish\n */\nexport function generateFishCompletion(): string {\n const cmd = \"pionex-trade-cli\";\n const T = COMPLETION_TREE;\n const lines: string[] = [\n `# ${cmd} fish shell completion`,\n `# Generated by: ${cmd} setup-completion-fish`,\n `# To install: ${cmd} setup-completion-fish > ~/.config/fish/completions/${cmd}.fish`,\n \"\",\n \"# Disable file completion globally for this command\",\n `complete -c ${cmd} -f`,\n \"\",\n \"# Top-level groups\",\n ...T.groups.map((g) =>\n `complete -c ${cmd} -n 'not __fish_seen_subcommand_from ${T.groups.join(\" \")}' -a '${g}'`\n ),\n \"\",\n \"# market subcommands\",\n ...T.market.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from market' -a '${s}'`),\n \"\",\n \"# account subcommands\",\n ...T.account.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from account' -a '${s}'`),\n \"\",\n \"# orders subcommands\",\n ...T.orders.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from orders' -a '${s}'`),\n \"\",\n \"# bot subcommands (only before entering futures_grid or spot_grid)\",\n ...T.bot.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from bot; and not __fish_seen_subcommand_from futures_grid spot_grid' -a '${s}'`),\n \"\",\n \"# bot futures_grid commands\",\n ...T.futures_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from futures_grid' -a '${s}'`),\n \"\",\n \"# bot spot_grid commands\",\n ...T.spot_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from spot_grid' -a '${s}'`),\n \"\",\n \"# earn subcommands (only before entering dual)\",\n ...T.earn.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from earn; and not __fish_seen_subcommand_from dual' -a '${s}'`),\n \"\",\n \"# earn dual commands\",\n ...T.dual.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from dual' -a '${s}'`),\n \"\",\n ];\n return lines.join(\"\\n\");\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner } from \"../helpers.js\";\n\nexport function buildMarketCommand(): Command {\n const market = new Command(\"market\").description(\"Market data (public, no auth required)\");\n\n market\n .command(\"depth <symbol>\")\n .description(\"Get order book depth for a symbol\")\n .option(\"--limit <n>\", \"Number of price levels to return\", parseInt)\n .action(async (symbol: string, opts: { limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_depth\", { symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"trades <symbol>\")\n .description(\"Get recent trades for a symbol\")\n .option(\"--limit <n>\", \"Number of trades to return\", parseInt)\n .action(async (symbol: string, opts: { limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_trades\", { symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"symbols\")\n .description(\"Get symbol/trading pair information\")\n .option(\"--symbols <list>\", \"Comma-separated symbol list (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbols?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_symbol_info\", { symbols: opts.symbols, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"tickers\")\n .description(\"Get 24h ticker statistics\")\n .option(\"--symbol <symbol>\", \"Filter by symbol (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbol?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_tickers\", { symbol: opts.symbol, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"book_tickers\")\n .description(\"Get best bid/ask prices for symbols\")\n .option(\"--symbol <symbol>\", \"Filter by symbol (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbol?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_book_tickers\", { symbol: opts.symbol, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"klines [symbol] [interval]\")\n .description(\"Get candlestick/kline data\\n Valid intervals: 1M 5M 15M 30M 60M 4H 8H 12H 1D\\n Example: pionex-trade-cli market klines BTC_USDT 60M\")\n .option(\"--symbol <symbol>\", \"Trading pair (e.g. BTC_USDT)\")\n .option(\"--interval <interval>\", \"Kline interval: 1M 5M 15M 30M 60M 4H 8H 12H 1D\")\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .option(\"--limit <n>\", \"Number of klines to return\", parseInt)\n .action(async (posSymbol: string | undefined, posInterval: string | undefined, opts: { symbol?: string; interval?: string; endTime?: number; limit?: number }, cmd: Command) => {\n try {\n const symbol = opts.symbol ?? posSymbol;\n const interval = opts.interval ?? posInterval;\n if (!symbol || !interval) {\n throw new Error(\"Missing symbol/interval. Example: pionex-trade-cli market klines BTC_USDT 60M\");\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_klines\", { symbol, interval, endTime: opts.endTime, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return market;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner } from \"../helpers.js\";\n\nexport function buildAccountCommand(): Command {\n const account = new Command(\"account\").description(\"Account data (requires auth)\");\n\n account\n .command(\"balance\")\n .description(\"Get account balance for all assets\")\n .action(async (_opts: Record<string, unknown>, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_account_get_balance\", {});\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return account;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun } from \"../helpers.js\";\n\nexport function buildOrdersCommand(): Command {\n const orders = new Command(\"orders\").description(\"Spot orders (requires auth)\");\n\n orders\n .command(\"new\")\n .description(\"Place a new spot order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair (e.g. BTC_USDT)\")\n .requiredOption(\"--side <side>\", \"BUY or SELL\")\n .requiredOption(\"--type <type>\", \"Order type (MARKET, LIMIT, etc.)\")\n .option(\"--client-order-id <id>\", \"Client-assigned order ID\")\n .option(\"--size <size>\", \"Base asset quantity\")\n .option(\"--price <price>\", \"Limit price\")\n .option(\"--amount <amount>\", \"Quote asset amount (for market buy)\")\n .option(\"--IOC\", \"Immediate-or-cancel flag\")\n .action(async (opts: { symbol: string; side: string; type: string; clientOrderId?: string; size?: string; price?: string; amount?: string; IOC?: boolean }, cmd: Command) => {\n try {\n const payload = {\n symbol: opts.symbol,\n side: opts.side,\n type: opts.type,\n clientOrderId: opts.clientOrderId,\n size: opts.size,\n price: opts.price,\n amount: opts.amount,\n IOC: opts.IOC,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_new_order\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_new_order\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"get\")\n .description(\"Get an order by ID\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_order\", { symbol: opts.symbol, orderId: opts.orderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"open\")\n .description(\"Get open orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .action(async (opts: { symbol: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_open_orders\", { symbol: opts.symbol });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"all\")\n .description(\"Get all orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .option(\"--limit <n>\", \"Maximum number of orders to return\", parseInt)\n .action(async (opts: { symbol: string; limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_all_orders\", { symbol: opts.symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"fills\")\n .description(\"Get fill records for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .action(async (opts: { symbol: string; startTime?: number; endTime?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_fills\", { symbol: opts.symbol, startTime: opts.startTime, endTime: opts.endTime });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"fills_by_order_id\")\n .description(\"Get fill records for a specific order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_fills_by_order_id\", { symbol: opts.symbol, orderId: opts.orderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"cancel\")\n .description(\"Cancel an order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const payload = { symbol: opts.symbol, orderId: opts.orderId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_cancel_order\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_cancel_order\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"cancel_all\")\n .description(\"Cancel all open orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .action(async (opts: { symbol: string }, cmd: Command) => {\n try {\n const payload = { symbol: opts.symbol };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_cancel_all_orders\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_cancel_all_orders\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return orders;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload, parseAndValidateCreateFuturesGridBuOrderData, parseAndValidateCreateSpotGridBuOrderData } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun, parseJsonFlag } from \"../helpers.js\";\n\nfunction buildFuturesGridCommand(): Command {\n const fg = new Command(\"futures_grid\").description(\"Futures Grid bot sub-commands (requires auth)\");\n\n fg.command(\"get\")\n .description(\"Get a Futures Grid bot order by ID\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--lang <lang>\", \"Response language (e.g. en, zh)\")\n .action(async (opts: { buOrderId: string; lang?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_get_order\", { buOrderId: opts.buOrderId, lang: opts.lang });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"create\")\n .description(\n \"Create a Futures Grid bot\\n\" +\n \" Example: pionex-trade-cli bot futures_grid create --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":100,\\\"grid_type\\\":\\\"arithmetic\\\",\\\"trend\\\":\\\"long\\\",\\\"leverage\\\":5,\\\"quoteInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC, normalized to BTC.PERP if needed)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .option(\"--copy-from <source>\", \"Copy source type\")\n .option(\"--copy-type <type>\", \"Copy type\")\n .option(\"--copy-bot-order-id <id>\", \"Bot order ID to copy from\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string; copyFrom?: string; copyType?: string; copyBotOrderId?: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateFuturesGridBuOrderData(buOrderDataRaw);\n const payload: Record<string, unknown> = {\n base: opts.base,\n quote: opts.quote,\n buOrderData,\n copyFrom: opts.copyFrom,\n copyType: opts.copyType,\n copyBotOrderId: opts.copyBotOrderId,\n };\n if (isDryRun(cmd)) {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_create\", { ...payload, __dryRun: true });\n print(out.data);\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_create\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"adjust_params\")\n .description(\"Adjust parameters of an existing Futures Grid bot\")\n .requiredOption(\"--body-json <json>\", \"JSON object with parameters to adjust\")\n .action(async (opts: { bodyJson: string }, cmd: Command) => {\n try {\n const payload = parseJsonFlag(opts.bodyJson, \"body-json\");\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_adjust_params\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_adjust_params\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"reduce\")\n .description(\"Reduce position of a Futures Grid bot\")\n .requiredOption(\"--body-json <json>\", \"JSON object with reduce parameters\")\n .action(async (opts: { bodyJson: string }, cmd: Command) => {\n try {\n const payload = parseJsonFlag(opts.bodyJson, \"body-json\");\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_reduce\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_reduce\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"check_params\")\n .description(\n \"Validate Futures Grid bot parameters before creating an order\\n\" +\n \" Example: pionex-trade-cli bot futures_grid check_params --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":100,\\\"grid_type\\\":\\\"arithmetic\\\",\\\"trend\\\":\\\"long\\\",\\\"leverage\\\":5,\\\"quoteInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateFuturesGridBuOrderData(buOrderDataRaw);\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_check_params\", { base: opts.base, quote: opts.quote, buOrderData });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"cancel\")\n .description(\"Cancel a Futures Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--close-note <note>\", \"Close note\")\n .option(\"--close-sell-model <model>\", \"Sell model on close\")\n .option(\"--immediate\", \"Close immediately\")\n .option(\"--close-slippage <slippage>\", \"Slippage tolerance on close\")\n .action(async (opts: { buOrderId: string; closeNote?: string; closeSellModel?: string; immediate?: boolean; closeSlippage?: string }, cmd: Command) => {\n try {\n const payload = {\n buOrderId: opts.buOrderId,\n closeNote: opts.closeNote,\n closeSellModel: opts.closeSellModel,\n immediate: opts.immediate,\n closeSlippage: opts.closeSlippage,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_cancel\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_cancel\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return fg;\n}\n\nfunction buildSpotGridCommand(): Command {\n const sg = new Command(\"spot_grid\").description(\"Spot Grid bot sub-commands (requires auth)\");\n\n sg.command(\"get\")\n .description(\"Get a Spot Grid bot order by ID\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .action(async (opts: { buOrderId: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_get_order\", { buOrderId: opts.buOrderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"get_ai_strategy\")\n .description(\"Get AI-recommended Spot Grid strategy parameters\")\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .action(async (opts: { base: string; quote: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_get_ai_strategy\", { base: opts.base, quote: opts.quote });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"create\")\n .description(\n \"Create a Spot Grid bot\\n\" +\n \" Example: pionex-trade-cli bot spot_grid create --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":50,\\\"gridType\\\":\\\"arithmetic\\\",\\\"quoteTotalInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .option(\"--note <note>\", \"Optional note for this bot\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string; note?: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateSpotGridBuOrderData(buOrderDataRaw);\n const payload: Record<string, unknown> = { base: opts.base, quote: opts.quote, note: opts.note, buOrderData };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_create\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_create\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"adjust_params\")\n .description(\"Adjust parameters of an existing Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--top <price>\", \"New upper price boundary\")\n .option(\"--bottom <price>\", \"New lower price boundary\")\n .option(\"--row <n>\", \"New number of grid rows\", parseInt)\n .option(\"--quote-invest <amount>\", \"Additional quote investment amount\")\n .action(async (opts: { buOrderId: string; top?: string; bottom?: string; row?: number; quoteInvest?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n buOrderId: opts.buOrderId,\n top: opts.top,\n bottom: opts.bottom,\n row: opts.row,\n quoteInvest: opts.quoteInvest,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_adjust_params\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_adjust_params\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"invest_in\")\n .description(\"Add investment to an existing Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .requiredOption(\"--quote-invest <amount>\", \"Quote asset amount to invest\")\n .action(async (opts: { buOrderId: string; quoteInvest: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = { buOrderId: opts.buOrderId, quoteInvest: opts.quoteInvest };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_invest_in\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_invest_in\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"check_params\")\n .description(\n \"Validate Spot Grid bot parameters before creating an order\\n\" +\n \" Example: pionex-trade-cli bot spot_grid check_params --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":50,\\\"gridType\\\":\\\"arithmetic\\\",\\\"quoteTotalInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateSpotGridBuOrderData(buOrderDataRaw);\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_check_params\", { base: opts.base, quote: opts.quote, buOrderData });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"cancel\")\n .description(\"Cancel a Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--close-sell-model <model>\", \"Sell model on close: NOT_SELL | TO_QUOTE | TO_USDT\")\n .option(\"--slippage <slippage>\", \"Slippage tolerance\")\n .action(async (opts: { buOrderId: string; closeSellModel?: string; slippage?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n buOrderId: opts.buOrderId,\n closeSellModel: opts.closeSellModel,\n slippage: opts.slippage,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_cancel\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_cancel\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"profit\")\n .description(\"Withdraw profit from a Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .requiredOption(\"--amount <amount>\", \"Amount to withdraw\")\n .action(async (opts: { buOrderId: string; amount: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = { buOrderId: opts.buOrderId, amount: opts.amount };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_profit\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_profit\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return sg;\n}\n\nexport function buildBotCommand(): Command {\n const bot = new Command(\"bot\").description(\"Bot management (requires auth)\");\n\n bot.command(\"order_list\")\n .description(\"List bot orders across all bot types\")\n .option(\"--status <status>\", \"Filter by status: running | finished\")\n .option(\"--base <base>\", \"Filter by base asset (e.g. BTC)\")\n .option(\"--quote <quote>\", \"Filter by quote asset (e.g. USDT)\")\n .option(\"--page-token <token>\", \"Pagination token from previous response\")\n .option(\"--bu-order-types <list>\", \"Comma-separated types: futures_grid,spot_grid,smart_copy\")\n .action(async (opts: { status?: string; base?: string; quote?: string; pageToken?: string; buOrderTypes?: string }, cmd: Command) => {\n try {\n const buOrderTypes = opts.buOrderTypes ? opts.buOrderTypes.split(\",\").map((s) => s.trim()) : undefined;\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_order_list\", {\n status: opts.status,\n base: opts.base,\n quote: opts.quote,\n pageToken: opts.pageToken,\n buOrderTypes,\n });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n bot.addCommand(buildFuturesGridCommand());\n bot.addCommand(buildSpotGridCommand());\n\n return bot;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun } from \"../helpers.js\";\n\nfunction buildDualCommand(): Command {\n const dual = new Command(\"dual\").description(\"Dual Investment commands\");\n\n dual\n .command(\"symbols\")\n .description(\"List supported Dual Investment trading pairs\")\n .option(\"--base <base>\", \"Filter by base asset (e.g. BTC)\")\n .action(async (opts: { base?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_symbols\", { base: opts.base });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"open_products\")\n .description(\n \"List open Dual Investment products\\n\" +\n \" BTC/ETH: --quote USDXO; others: --quote USDT\\n\" +\n \" Product ID format: {BASE}-{QUOTE}-{YYMMDD}-{STRIKE}-{C|P}-{CURRENCY}\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (USDXO for BTC/ETH, USDT for others)\")\n .requiredOption(\"--type <type>\", \"Product type: DUAL_BASE | DUAL_CURRENCY\")\n .option(\"--currency <currency>\", \"Settlement currency (e.g. USDT, USDC)\")\n .action(async (opts: { base: string; quote: string; type: string; currency?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_open_products\", { base: opts.base, quote: opts.quote, type: opts.type, currency: opts.currency });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"prices\")\n .description(\"Get yield rates for products (call before invest — pass profit value unchanged)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--quote <quote>\", \"Quote asset\")\n .requiredOption(\"--product-ids <ids>\", \"Comma-separated product IDs\")\n .action(async (opts: { base: string; quote: string; productIds: string }, cmd: Command) => {\n try {\n const productIds = opts.productIds.split(\",\").map((s) => s.trim());\n if (productIds.length === 0) throw new Error(\"--product-ids must not be empty\");\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_prices\", { base: opts.base, quote: opts.quote, productIds });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"index\")\n .description(\"Get index price for a trading pair\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--quote <quote>\", \"Quote asset\")\n .action(async (opts: { base: string; quote: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_index\", { base: opts.base, quote: opts.quote });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"delivery_prices\")\n .description(\"Get historical delivery prices\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .option(\"--quote <quote>\", \"Quote asset\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .action(async (opts: { base: string; quote?: string; startTime?: number; endTime?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_delivery_prices\", { base: opts.base, quote: opts.quote, startTime: opts.startTime, endTime: opts.endTime });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"balances\")\n .description(\"Get Dual Investment balances (requires read auth)\")\n .option(\"--merge\", \"Merge balances across currencies\")\n .action(async (opts: { merge?: boolean }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_balances\", { merge: opts.merge });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"get_invests\")\n .description(\"Batch query Dual Investment orders (requires read auth)\")\n .option(\"--base <base>\", \"Filter by base asset\")\n .requiredOption(\"--client-dual-ids <ids>\", \"Comma-separated client dual IDs\")\n .action(async (opts: { base?: string; clientDualIds: string }, cmd: Command) => {\n try {\n const clientDualIds = opts.clientDualIds.split(\",\").map((s) => s.trim());\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_get_invests\", { base: opts.base, clientDualIds });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"records\")\n .description(\"Get Dual Investment history (requires read auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .option(\"--quote <quote>\", \"Quote asset\")\n .option(\"--currency <currency>\", \"Settlement currency\")\n .option(\"--filter <filter>\", \"Status filter\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--limit <n>\", \"Maximum records to return\", parseInt)\n .action(async (opts: { base: string; endTime: number; quote?: string; currency?: string; filter?: string; startTime?: number; limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_records\", {\n base: opts.base,\n quote: opts.quote,\n currency: opts.currency,\n filter: opts.filter,\n startTime: opts.startTime,\n endTime: opts.endTime,\n limit: opts.limit,\n });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"invest\")\n .description(\"Create a Dual Investment order (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .option(\"--client-dual-id <id>\", \"Client-assigned order ID\")\n .option(\"--base-amount <amount>\", \"Base asset amount to invest\")\n .option(\"--currency-amount <amount>\", \"Currency amount to invest\")\n .requiredOption(\"--profit <rate>\", \"Yield rate from prices command (pass unchanged)\")\n .action(async (opts: { base: string; productId: string; clientDualId?: string; baseAmount?: string; currencyAmount?: string; profit: string }, cmd: Command) => {\n try {\n const payload = {\n base: opts.base,\n productId: opts.productId,\n clientDualId: opts.clientDualId,\n baseAmount: opts.baseAmount,\n currencyAmount: opts.currencyAmount,\n profit: opts.profit,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_invest\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_invest\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"revoke_invest\")\n .description(\"Revoke a pending Dual Investment order (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--client-dual-id <id>\", \"Client dual order ID\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .action(async (opts: { base: string; clientDualId: string; productId: string }, cmd: Command) => {\n try {\n const payload = { base: opts.base, clientDualId: opts.clientDualId, productId: opts.productId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_revoke_invest\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_revoke_invest\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"collect\")\n .description(\"Collect settled Dual Investment earnings (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--client-dual-id <id>\", \"Client dual order ID\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .action(async (opts: { base: string; clientDualId: string; productId: string }, cmd: Command) => {\n try {\n const payload = { base: opts.base, clientDualId: opts.clientDualId, productId: opts.productId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_collect\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_collect\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return dual;\n}\n\nexport function buildEarnCommand(): Command {\n const earn = new Command(\"earn\").description(\"Earn products (requires auth)\");\n earn.addCommand(buildDualCommand());\n return earn;\n}\n","import { Command } from \"commander\";\n\nexport function buildCapabilitiesCommand(): Command {\n return new Command(\"capabilities\")\n .description(\"Print all available commands as JSON (for AI agent self-discovery)\")\n .action(() => {\n const caps = {\n market: [\"depth\", \"trades\", \"symbols\", \"tickers\", \"book_tickers\", \"klines\"],\n account: [\"balance\"],\n orders: [\"new\", \"get\", \"open\", \"all\", \"fills\", \"fills_by_order_id\", \"cancel\", \"cancel_all\"],\n bot: {\n order_list: true,\n futures_grid: [\"get\", \"create\", \"adjust_params\", \"reduce\", \"cancel\"],\n spot_grid: [\"get\", \"get_ai_strategy\", \"create\", \"adjust_params\", \"invest_in\", \"cancel\", \"profit\"],\n },\n earn: {\n dual: [\n \"symbols\",\n \"open_products\",\n \"prices\",\n \"index\",\n \"delivery_prices\",\n \"balances\",\n \"get_invests\",\n \"records\",\n \"invest\",\n \"revoke_invest\",\n \"collect\",\n ],\n },\n };\n process.stdout.write(JSON.stringify(caps, null, 2) + \"\\n\");\n });\n}\n"],"mappings":"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","names":["Command","completion","Command","Command","Command","Command","Command","Command","run","out","Command","Command","Command","Command"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/trade.ts","../src/completion.ts","../src/commands/market.ts","../src/commands/account.ts","../src/commands/orders.ts","../src/commands/bot.ts","../src/commands/earn.ts","../src/commands/capabilities.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { version } from \"./helpers.js\";\nimport { initCompletion, generateFishCompletion } from \"./completion.js\";\nimport { buildMarketCommand } from \"./commands/market.js\";\nimport { buildAccountCommand } from \"./commands/account.js\";\nimport { buildOrdersCommand } from \"./commands/orders.js\";\nimport { buildBotCommand } from \"./commands/bot.js\";\nimport { buildEarnCommand } from \"./commands/earn.js\";\nimport { buildCapabilitiesCommand } from \"./commands/capabilities.js\";\n\n// omelette must be initialized before commander parses argv\n// (it intercepts COMP_LINE / COMP_POINT env vars set by the shell)\nconst completion = initCompletion();\n\nexport function buildTradeProgram(): Command {\n const program = new Command(\"pionex-trade-cli\")\n .version(version, \"-v, --version\", \"Print version number\")\n .description(\"Pionex trading CLI — direct access to market data, orders, bots, and earn products\")\n .addHelpCommand(true);\n\n // Global options inherited by all sub-commands via cmd.optsWithGlobals()\n program\n .option(\"--profile <name>\", \"Profile name in ~/.pionex/config.toml\")\n .option(\"--modules <list>\", \"Comma-separated modules to enable (market,account,orders,bot,earn or all)\")\n .option(\"--base-url <url>\", \"Override API base URL\")\n .option(\"--read-only\", \"Disable write operations (orders new/cancel, etc.)\")\n .option(\"--dry-run\", \"Print resolved request body without executing (write commands only)\");\n\n program.addCommand(buildMarketCommand());\n program.addCommand(buildAccountCommand());\n program.addCommand(buildOrdersCommand());\n program.addCommand(buildBotCommand());\n program.addCommand(buildEarnCommand());\n program.addCommand(buildCapabilitiesCommand());\n\n // Shell completion setup commands\n program\n .command(\"setup-completion\")\n .description(\"Install tab completion for bash/zsh (run once, then source your shell config)\")\n .action(() => {\n completion.setupShellInitFile();\n process.stdout.write(\n \"✓ Completion installed.\\n\" +\n \" bash: source ~/.bashrc\\n\" +\n \" zsh: source ~/.zshrc\\n\"\n );\n });\n\n program\n .command(\"setup-completion-fish\")\n .description(\n \"Print fish shell completion script\\n\" +\n \" Usage: pionex-trade-cli setup-completion-fish > ~/.config/fish/completions/pionex-trade-cli.fish\"\n )\n .action(() => {\n process.stdout.write(generateFishCompletion());\n });\n\n return program;\n}\n","import { createRequire } from \"node:module\";\n\nconst _require = createRequire(import.meta.url);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// COMPLETION TREE\n//\n// ⚠️ 每次新增、删除、重命名命令时,必须同步更新此处。\n// 同时检查 src/commands/ 下对应文件中的 .command() 声明保持一致。\n// ─────────────────────────────────────────────────────────────────────────────\nexport const COMPLETION_TREE = {\n groups: [\"market\", \"account\", \"orders\", \"bot\", \"earn\", \"capabilities\"],\n market: [\"depth\", \"trades\", \"symbols\", \"tickers\", \"book_tickers\", \"klines\"],\n account: [\"balance\"],\n orders: [\"new\", \"get\", \"open\", \"all\", \"fills\", \"fills_by_order_id\", \"cancel\", \"cancel_all\"],\n bot: [\"order_list\", \"futures_grid\", \"spot_grid\"],\n futures_grid: [\"get\", \"create\", \"adjust_params\", \"reduce\", \"cancel\", \"check_params\"],\n spot_grid: [\"get\", \"get_ai_strategy\", \"create\", \"adjust_params\", \"invest_in\", \"cancel\", \"profit\", \"check_params\"],\n earn: [\"dual\"],\n dual: [\"symbols\", \"open_products\", \"prices\", \"index\", \"delivery_prices\",\n \"balances\", \"get_invests\", \"records\", \"invest\", \"revoke_invest\", \"collect\"],\n} as const;\n\ntype OmeletteReply = { reply: (words: readonly string[]) => void };\ntype OmeletteInstance = {\n on(event: string, handler: (opts: OmeletteReply) => void): void;\n init(): void;\n setupShellInitFile(filepath?: string): void;\n cleanupShellInitFile(filepath?: string): void;\n};\n\n/**\n * 初始化 omelette 补全(bash/zsh)。\n * 必须在 commander 解析参数之前调用(模块加载时执行)。\n */\nexport function initCompletion(): OmeletteInstance {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const omelette = _require(\"omelette\") as (template: string) => OmeletteInstance;\n const completion = omelette(\"pionex-trade-cli <group> <sub> <cmd>\");\n\n const T = COMPLETION_TREE;\n completion.on(\"group\", ({ reply }) => reply(T.groups));\n completion.on(\"market\", ({ reply }) => reply(T.market));\n completion.on(\"account\", ({ reply }) => reply(T.account));\n completion.on(\"orders\", ({ reply }) => reply(T.orders));\n completion.on(\"bot\", ({ reply }) => reply(T.bot));\n completion.on(\"futures_grid\", ({ reply }) => reply(T.futures_grid));\n completion.on(\"spot_grid\", ({ reply }) => reply(T.spot_grid));\n completion.on(\"earn\", ({ reply }) => reply(T.earn));\n completion.on(\"dual\", ({ reply }) => reply(T.dual));\n\n completion.init();\n return completion;\n}\n\n/**\n * 生成 fish shell 补全脚本。\n * 输出到 stdout,用户重定向到:\n * ~/.config/fish/completions/pionex-trade-cli.fish\n */\nexport function generateFishCompletion(): string {\n const cmd = \"pionex-trade-cli\";\n const T = COMPLETION_TREE;\n const lines: string[] = [\n `# ${cmd} fish shell completion`,\n `# Generated by: ${cmd} setup-completion-fish`,\n `# To install: ${cmd} setup-completion-fish > ~/.config/fish/completions/${cmd}.fish`,\n \"\",\n \"# Disable file completion globally for this command\",\n `complete -c ${cmd} -f`,\n \"\",\n \"# Top-level groups\",\n ...T.groups.map((g) =>\n `complete -c ${cmd} -n 'not __fish_seen_subcommand_from ${T.groups.join(\" \")}' -a '${g}'`\n ),\n \"\",\n \"# market subcommands\",\n ...T.market.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from market' -a '${s}'`),\n \"\",\n \"# account subcommands\",\n ...T.account.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from account' -a '${s}'`),\n \"\",\n \"# orders subcommands\",\n ...T.orders.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from orders' -a '${s}'`),\n \"\",\n \"# bot subcommands\",\n ...T.bot.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from bot' -a '${s}'`),\n \"\",\n \"# bot futures_grid commands\",\n ...T.futures_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from futures_grid' -a '${s}'`),\n \"\",\n \"# bot spot_grid commands\",\n ...T.spot_grid.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from spot_grid' -a '${s}'`),\n \"\",\n \"# earn subcommands\",\n ...T.earn.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from earn' -a '${s}'`),\n \"\",\n \"# earn dual commands\",\n ...T.dual.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from dual' -a '${s}'`),\n \"\",\n ];\n return lines.join(\"\\n\");\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner } from \"../helpers.js\";\n\nexport function buildMarketCommand(): Command {\n const market = new Command(\"market\").description(\"Market data (public, no auth required)\");\n\n market\n .command(\"depth <symbol>\")\n .description(\"Get order book depth for a symbol\")\n .option(\"--limit <n>\", \"Number of price levels to return\", parseInt)\n .action(async (symbol: string, opts: { limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_depth\", { symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"trades <symbol>\")\n .description(\"Get recent trades for a symbol\")\n .option(\"--limit <n>\", \"Number of trades to return\", parseInt)\n .action(async (symbol: string, opts: { limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_trades\", { symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"symbols\")\n .description(\"Get symbol/trading pair information\")\n .option(\"--symbols <list>\", \"Comma-separated symbol list (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbols?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_symbol_info\", { symbols: opts.symbols, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"tickers\")\n .description(\"Get 24h ticker statistics\")\n .option(\"--symbol <symbol>\", \"Filter by symbol (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbol?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_tickers\", { symbol: opts.symbol, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"book_tickers\")\n .description(\"Get best bid/ask prices for symbols\")\n .option(\"--symbol <symbol>\", \"Filter by symbol (e.g. BTC_USDT)\")\n .option(\"--type <type>\", \"Symbol type filter\")\n .action(async (opts: { symbol?: string; type?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_book_tickers\", { symbol: opts.symbol, type: opts.type });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n market\n .command(\"klines [symbol] [interval]\")\n .description(\"Get candlestick/kline data\\n Valid intervals: 1M 5M 15M 30M 60M 4H 8H 12H 1D\\n Example: pionex-trade-cli market klines BTC_USDT 60M\")\n .option(\"--symbol <symbol>\", \"Trading pair (e.g. BTC_USDT)\")\n .option(\"--interval <interval>\", \"Kline interval: 1M 5M 15M 30M 60M 4H 8H 12H 1D\")\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .option(\"--limit <n>\", \"Number of klines to return\", parseInt)\n .action(async (posSymbol: string | undefined, posInterval: string | undefined, opts: { symbol?: string; interval?: string; endTime?: number; limit?: number }, cmd: Command) => {\n try {\n const symbol = opts.symbol ?? posSymbol;\n const interval = opts.interval ?? posInterval;\n if (!symbol || !interval) {\n throw new Error(\"Missing symbol/interval. Example: pionex-trade-cli market klines BTC_USDT 60M\");\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_market_get_klines\", { symbol, interval, endTime: opts.endTime, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return market;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner } from \"../helpers.js\";\n\nexport function buildAccountCommand(): Command {\n const account = new Command(\"account\").description(\"Account data (requires auth)\");\n\n account\n .command(\"balance\")\n .description(\"Get account balance for all assets\")\n .action(async (_opts: Record<string, unknown>, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_account_get_balance\", {});\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return account;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun } from \"../helpers.js\";\n\nexport function buildOrdersCommand(): Command {\n const orders = new Command(\"orders\").description(\"Spot orders (requires auth)\");\n\n orders\n .command(\"new\")\n .description(\"Place a new spot order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair (e.g. BTC_USDT)\")\n .requiredOption(\"--side <side>\", \"BUY or SELL\")\n .requiredOption(\"--type <type>\", \"Order type (MARKET, LIMIT, etc.)\")\n .option(\"--client-order-id <id>\", \"Client-assigned order ID\")\n .option(\"--size <size>\", \"Base asset quantity\")\n .option(\"--price <price>\", \"Limit price\")\n .option(\"--amount <amount>\", \"Quote asset amount (for market buy)\")\n .option(\"--IOC\", \"Immediate-or-cancel flag\")\n .action(async (opts: { symbol: string; side: string; type: string; clientOrderId?: string; size?: string; price?: string; amount?: string; IOC?: boolean }, cmd: Command) => {\n try {\n const payload = {\n symbol: opts.symbol,\n side: opts.side,\n type: opts.type,\n clientOrderId: opts.clientOrderId,\n size: opts.size,\n price: opts.price,\n amount: opts.amount,\n IOC: opts.IOC,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_new_order\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_new_order\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"get\")\n .description(\"Get an order by ID\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_order\", { symbol: opts.symbol, orderId: opts.orderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"open\")\n .description(\"Get open orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .action(async (opts: { symbol: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_open_orders\", { symbol: opts.symbol });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"all\")\n .description(\"Get all orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .option(\"--limit <n>\", \"Maximum number of orders to return\", parseInt)\n .action(async (opts: { symbol: string; limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_all_orders\", { symbol: opts.symbol, limit: opts.limit });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"fills\")\n .description(\"Get fill records for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .action(async (opts: { symbol: string; startTime?: number; endTime?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_fills\", { symbol: opts.symbol, startTime: opts.startTime, endTime: opts.endTime });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"fills_by_order_id\")\n .description(\"Get fill records for a specific order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_get_fills_by_order_id\", { symbol: opts.symbol, orderId: opts.orderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"cancel\")\n .description(\"Cancel an order\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .requiredOption(\"--order-id <id>\", \"Order ID\", parseInt)\n .action(async (opts: { symbol: string; orderId: number }, cmd: Command) => {\n try {\n const payload = { symbol: opts.symbol, orderId: opts.orderId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_cancel_order\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_cancel_order\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n orders\n .command(\"cancel_all\")\n .description(\"Cancel all open orders for a symbol\")\n .requiredOption(\"--symbol <symbol>\", \"Trading pair\")\n .action(async (opts: { symbol: string }, cmd: Command) => {\n try {\n const payload = { symbol: opts.symbol };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_orders_cancel_all_orders\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_orders_cancel_all_orders\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return orders;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload, parseAndValidateCreateFuturesGridBuOrderData, parseAndValidateCreateSpotGridBuOrderData } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun, parseJsonFlag } from \"../helpers.js\";\n\nfunction buildFuturesGridCommand(): Command {\n const fg = new Command(\"futures_grid\").description(\"Futures Grid bot sub-commands (requires auth)\");\n\n fg.command(\"get\")\n .description(\"Get a Futures Grid bot order by ID\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--lang <lang>\", \"Response language (e.g. en, zh)\")\n .action(async (opts: { buOrderId: string; lang?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_get_order\", { buOrderId: opts.buOrderId, lang: opts.lang });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"create\")\n .description(\n \"Create a Futures Grid bot\\n\" +\n \" Example: pionex-trade-cli bot futures_grid create --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":100,\\\"grid_type\\\":\\\"arithmetic\\\",\\\"trend\\\":\\\"long\\\",\\\"leverage\\\":5,\\\"quoteInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC, normalized to BTC.PERP if needed)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .option(\"--copy-from <source>\", \"Copy source type\")\n .option(\"--copy-type <type>\", \"Copy type\")\n .option(\"--copy-bot-order-id <id>\", \"Bot order ID to copy from\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string; copyFrom?: string; copyType?: string; copyBotOrderId?: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateFuturesGridBuOrderData(buOrderDataRaw);\n const payload: Record<string, unknown> = {\n base: opts.base,\n quote: opts.quote,\n buOrderData,\n copyFrom: opts.copyFrom,\n copyType: opts.copyType,\n copyBotOrderId: opts.copyBotOrderId,\n };\n if (isDryRun(cmd)) {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_create\", { ...payload, __dryRun: true });\n print(out.data);\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_create\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"adjust_params\")\n .description(\"Adjust parameters of an existing Futures Grid bot\")\n .requiredOption(\"--body-json <json>\", \"JSON object with parameters to adjust\")\n .action(async (opts: { bodyJson: string }, cmd: Command) => {\n try {\n const payload = parseJsonFlag(opts.bodyJson, \"body-json\");\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_adjust_params\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_adjust_params\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"reduce\")\n .description(\"Reduce position of a Futures Grid bot\")\n .requiredOption(\"--body-json <json>\", \"JSON object with reduce parameters\")\n .action(async (opts: { bodyJson: string }, cmd: Command) => {\n try {\n const payload = parseJsonFlag(opts.bodyJson, \"body-json\");\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_reduce\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_reduce\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"check_params\")\n .description(\n \"Validate Futures Grid bot parameters before creating an order\\n\" +\n \" Example: pionex-trade-cli bot futures_grid check_params --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":100,\\\"grid_type\\\":\\\"arithmetic\\\",\\\"trend\\\":\\\"long\\\",\\\"leverage\\\":5,\\\"quoteInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateFuturesGridBuOrderData(buOrderDataRaw);\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_check_params\", { base: opts.base, quote: opts.quote, buOrderData });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n fg.command(\"cancel\")\n .description(\"Cancel a Futures Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--close-note <note>\", \"Close note\")\n .option(\"--close-sell-model <model>\", \"Sell model on close\")\n .option(\"--immediate\", \"Close immediately\")\n .option(\"--close-slippage <slippage>\", \"Slippage tolerance on close\")\n .action(async (opts: { buOrderId: string; closeNote?: string; closeSellModel?: string; immediate?: boolean; closeSlippage?: string }, cmd: Command) => {\n try {\n const payload = {\n buOrderId: opts.buOrderId,\n closeNote: opts.closeNote,\n closeSellModel: opts.closeSellModel,\n immediate: opts.immediate,\n closeSlippage: opts.closeSlippage,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_futures_grid_cancel\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_futures_grid_cancel\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return fg;\n}\n\nfunction buildSpotGridCommand(): Command {\n const sg = new Command(\"spot_grid\").description(\"Spot Grid bot sub-commands (requires auth)\");\n\n sg.command(\"get\")\n .description(\"Get a Spot Grid bot order by ID\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .action(async (opts: { buOrderId: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_get_order\", { buOrderId: opts.buOrderId });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"get_ai_strategy\")\n .description(\"Get AI-recommended Spot Grid strategy parameters\")\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .action(async (opts: { base: string; quote: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_get_ai_strategy\", { base: opts.base, quote: opts.quote });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"create\")\n .description(\n \"Create a Spot Grid bot\\n\" +\n \" Example: pionex-trade-cli bot spot_grid create --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":50,\\\"gridType\\\":\\\"arithmetic\\\",\\\"quoteTotalInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .option(\"--note <note>\", \"Optional note for this bot\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string; note?: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateSpotGridBuOrderData(buOrderDataRaw);\n const payload: Record<string, unknown> = { base: opts.base, quote: opts.quote, note: opts.note, buOrderData };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_create\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_create\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"adjust_params\")\n .description(\"Adjust parameters of an existing Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--top <price>\", \"New upper price boundary\")\n .option(\"--bottom <price>\", \"New lower price boundary\")\n .option(\"--row <n>\", \"New number of grid rows\", parseInt)\n .option(\"--quote-invest <amount>\", \"Additional quote investment amount\")\n .action(async (opts: { buOrderId: string; top?: string; bottom?: string; row?: number; quoteInvest?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n buOrderId: opts.buOrderId,\n top: opts.top,\n bottom: opts.bottom,\n row: opts.row,\n quoteInvest: opts.quoteInvest,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_adjust_params\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_adjust_params\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"invest_in\")\n .description(\"Add investment to an existing Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .requiredOption(\"--quote-invest <amount>\", \"Quote asset amount to invest\")\n .action(async (opts: { buOrderId: string; quoteInvest: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = { buOrderId: opts.buOrderId, quoteInvest: opts.quoteInvest };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_invest_in\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_invest_in\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"check_params\")\n .description(\n \"Validate Spot Grid bot parameters before creating an order\\n\" +\n \" Example: pionex-trade-cli bot spot_grid check_params --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"top\\\":\\\"110000\\\",\\\"bottom\\\":\\\"90000\\\",\\\"row\\\":50,\\\"gridType\\\":\\\"arithmetic\\\",\\\"quoteTotalInvestment\\\":\\\"100\\\"}'\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--bu-order-data-json <json>\", \"JSON object with grid parameters\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string }, cmd: Command) => {\n try {\n const buOrderDataRaw = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const buOrderData = parseAndValidateCreateSpotGridBuOrderData(buOrderDataRaw);\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_check_params\", { base: opts.base, quote: opts.quote, buOrderData });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"cancel\")\n .description(\"Cancel a Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--close-sell-model <model>\", \"Sell model on close: NOT_SELL | TO_QUOTE | TO_USDT\")\n .option(\"--slippage <slippage>\", \"Slippage tolerance\")\n .action(async (opts: { buOrderId: string; closeSellModel?: string; slippage?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n buOrderId: opts.buOrderId,\n closeSellModel: opts.closeSellModel,\n slippage: opts.slippage,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_cancel\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_cancel\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n sg.command(\"profit\")\n .description(\"Withdraw profit from a Spot Grid bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .requiredOption(\"--amount <amount>\", \"Amount to withdraw\")\n .action(async (opts: { buOrderId: string; amount: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = { buOrderId: opts.buOrderId, amount: opts.amount };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_spot_grid_profit\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_spot_grid_profit\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return sg;\n}\n\nexport function buildBotCommand(): Command {\n const bot = new Command(\"bot\").description(\"Bot management (requires auth)\");\n\n bot.command(\"order_list\")\n .description(\"List bot orders across all bot types\")\n .option(\"--status <status>\", \"Filter by status: running | finished\")\n .option(\"--base <base>\", \"Filter by base asset (e.g. BTC)\")\n .option(\"--quote <quote>\", \"Filter by quote asset (e.g. USDT)\")\n .option(\"--page-token <token>\", \"Pagination token from previous response\")\n .option(\"--bu-order-types <list>\", \"Comma-separated types: futures_grid,spot_grid,smart_copy\")\n .action(async (opts: { status?: string; base?: string; quote?: string; pageToken?: string; buOrderTypes?: string }, cmd: Command) => {\n try {\n const buOrderTypes = opts.buOrderTypes ? opts.buOrderTypes.split(\",\").map((s) => s.trim()) : undefined;\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_order_list\", {\n status: opts.status,\n base: opts.base,\n quote: opts.quote,\n pageToken: opts.pageToken,\n buOrderTypes,\n });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n bot.addCommand(buildFuturesGridCommand());\n bot.addCommand(buildSpotGridCommand());\n\n return bot;\n}\n","import { Command } from \"commander\";\nimport { toToolErrorPayload } from \"@pionex-ai/core\";\nimport { print, makeRunner, isDryRun } from \"../helpers.js\";\n\nfunction buildDualCommand(): Command {\n const dual = new Command(\"dual\").description(\"Dual Investment commands\");\n\n dual\n .command(\"symbols\")\n .description(\"List supported Dual Investment trading pairs\")\n .option(\"--base <base>\", \"Filter by base asset (e.g. BTC)\")\n .action(async (opts: { base?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_symbols\", { base: opts.base });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"open_products\")\n .description(\n \"List open Dual Investment products\\n\" +\n \" BTC/ETH: --quote USDXO; others: --quote USDT\\n\" +\n \" Product ID format: {BASE}-{QUOTE}-{YYMMDD}-{STRIKE}-{C|P}-{CURRENCY}\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (USDXO for BTC/ETH, USDT for others)\")\n .requiredOption(\"--type <type>\", \"Product type: DUAL_BASE | DUAL_CURRENCY\")\n .option(\"--currency <currency>\", \"Settlement currency (e.g. USDT, USDC)\")\n .action(async (opts: { base: string; quote: string; type: string; currency?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_open_products\", { base: opts.base, quote: opts.quote, type: opts.type, currency: opts.currency });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"prices\")\n .description(\"Get yield rates for products (call before invest — pass profit value unchanged)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--quote <quote>\", \"Quote asset\")\n .requiredOption(\"--product-ids <ids>\", \"Comma-separated product IDs\")\n .action(async (opts: { base: string; quote: string; productIds: string }, cmd: Command) => {\n try {\n const productIds = opts.productIds.split(\",\").map((s) => s.trim());\n if (productIds.length === 0) throw new Error(\"--product-ids must not be empty\");\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_prices\", { base: opts.base, quote: opts.quote, productIds });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"index\")\n .description(\"Get index price for a trading pair\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--quote <quote>\", \"Quote asset\")\n .action(async (opts: { base: string; quote: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_index\", { base: opts.base, quote: opts.quote });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"delivery_prices\")\n .description(\"Get historical delivery prices\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .option(\"--quote <quote>\", \"Quote asset\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .action(async (opts: { base: string; quote?: string; startTime?: number; endTime?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_delivery_prices\", { base: opts.base, quote: opts.quote, startTime: opts.startTime, endTime: opts.endTime });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"balances\")\n .description(\"Get Dual Investment balances (requires read auth)\")\n .option(\"--merge\", \"Merge balances across currencies\")\n .action(async (opts: { merge?: boolean }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_balances\", { merge: opts.merge });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"get_invests\")\n .description(\"Batch query Dual Investment orders (requires read auth)\")\n .option(\"--base <base>\", \"Filter by base asset\")\n .requiredOption(\"--client-dual-ids <ids>\", \"Comma-separated client dual IDs\")\n .action(async (opts: { base?: string; clientDualIds: string }, cmd: Command) => {\n try {\n const clientDualIds = opts.clientDualIds.split(\",\").map((s) => s.trim());\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_get_invests\", { base: opts.base, clientDualIds });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"records\")\n .description(\"Get Dual Investment history (requires read auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--end-time <ms>\", \"End time in milliseconds\", parseInt)\n .option(\"--quote <quote>\", \"Quote asset\")\n .option(\"--currency <currency>\", \"Settlement currency\")\n .option(\"--filter <filter>\", \"Status filter\")\n .option(\"--start-time <ms>\", \"Start time in milliseconds\", parseInt)\n .option(\"--limit <n>\", \"Maximum records to return\", parseInt)\n .action(async (opts: { base: string; endTime: number; quote?: string; currency?: string; filter?: string; startTime?: number; limit?: number }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_records\", {\n base: opts.base,\n quote: opts.quote,\n currency: opts.currency,\n filter: opts.filter,\n startTime: opts.startTime,\n endTime: opts.endTime,\n limit: opts.limit,\n });\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"invest\")\n .description(\"Create a Dual Investment order (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .option(\"--client-dual-id <id>\", \"Client-assigned order ID\")\n .option(\"--base-amount <amount>\", \"Base asset amount to invest\")\n .option(\"--currency-amount <amount>\", \"Currency amount to invest\")\n .requiredOption(\"--profit <rate>\", \"Yield rate from prices command (pass unchanged)\")\n .action(async (opts: { base: string; productId: string; clientDualId?: string; baseAmount?: string; currencyAmount?: string; profit: string }, cmd: Command) => {\n try {\n const payload = {\n base: opts.base,\n productId: opts.productId,\n clientDualId: opts.clientDualId,\n baseAmount: opts.baseAmount,\n currencyAmount: opts.currencyAmount,\n profit: opts.profit,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_invest\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_invest\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"revoke_invest\")\n .description(\"Revoke a pending Dual Investment order (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--client-dual-id <id>\", \"Client dual order ID\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .action(async (opts: { base: string; clientDualId: string; productId: string }, cmd: Command) => {\n try {\n const payload = { base: opts.base, clientDualId: opts.clientDualId, productId: opts.productId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_revoke_invest\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_revoke_invest\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n dual\n .command(\"collect\")\n .description(\"Collect settled Dual Investment earnings (requires earn auth)\")\n .requiredOption(\"--base <base>\", \"Base asset\")\n .requiredOption(\"--client-dual-id <id>\", \"Client dual order ID\")\n .requiredOption(\"--product-id <id>\", \"Product ID\")\n .action(async (opts: { base: string; clientDualId: string; productId: string }, cmd: Command) => {\n try {\n const payload = { base: opts.base, clientDualId: opts.clientDualId, productId: opts.productId };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_earn_dual_collect\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_earn_dual_collect\", payload);\n print(out.data);\n } catch (e) {\n process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + \"\\n\");\n process.exit(1);\n }\n });\n\n return dual;\n}\n\nexport function buildEarnCommand(): Command {\n const earn = new Command(\"earn\").description(\"Earn products (requires auth)\");\n earn.addCommand(buildDualCommand());\n return earn;\n}\n","import { Command } from \"commander\";\n\nexport function buildCapabilitiesCommand(): Command {\n return new Command(\"capabilities\")\n .description(\"Print all available commands as JSON (for AI agent self-discovery)\")\n .action(() => {\n const caps = {\n market: [\"depth\", \"trades\", \"symbols\", \"tickers\", \"book_tickers\", \"klines\"],\n account: [\"balance\"],\n orders: [\"new\", \"get\", \"open\", \"all\", \"fills\", \"fills_by_order_id\", \"cancel\", \"cancel_all\"],\n bot: {\n order_list: true,\n futures_grid: [\"get\", \"create\", \"adjust_params\", \"reduce\", \"cancel\"],\n spot_grid: [\"get\", \"get_ai_strategy\", \"create\", \"adjust_params\", \"invest_in\", \"cancel\", \"profit\"],\n },\n earn: {\n dual: [\n \"symbols\",\n \"open_products\",\n \"prices\",\n \"index\",\n \"delivery_prices\",\n \"balances\",\n \"get_invests\",\n \"records\",\n \"invest\",\n \"revoke_invest\",\n \"collect\",\n ],\n },\n };\n process.stdout.write(JSON.stringify(caps, null, 2) + \"\\n\");\n });\n}\n"],"mappings":"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","names":["Command","completion","Command","Command","Command","Command","Command","Command","run","out","Command","Command","Command","Command"]}
|