@pionex/pionex-ai-kit 0.2.47 → 0.2.49

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.
@@ -5,7 +5,7 @@ import {
5
5
  runSetup,
6
6
  version,
7
7
  writeFullConfig
8
- } from "./chunk-6GZTCD5R.js";
8
+ } from "./chunk-NGPWUQ2A.js";
9
9
 
10
10
  // src/kit.ts
11
11
  import { createInterface } from "readline";
@@ -98,4 +98,4 @@ function buildKitProgram() {
98
98
  export {
99
99
  buildKitProgram
100
100
  };
101
- //# sourceMappingURL=kit-EI2JKBUZ.js.map
101
+ //# sourceMappingURL=kit-LUI2MN26.js.map
@@ -7,7 +7,7 @@ import {
7
7
  print,
8
8
  toToolErrorPayload,
9
9
  version
10
- } from "./chunk-6GZTCD5R.js";
10
+ } from "./chunk-NGPWUQ2A.js";
11
11
 
12
12
  // src/trade.ts
13
13
  import { Command as Command7 } from "commander";
@@ -24,7 +24,7 @@ var COMPLETION_TREE = {
24
24
  futures_grid: ["get", "create", "adjust_params", "reduce", "cancel", "check_params"],
25
25
  spot_grid: ["get", "get_ai_strategy", "create", "adjust_params", "invest_in", "cancel", "profit", "check_params"],
26
26
  smart_copy: ["get", "create", "cancel", "check_params"],
27
- signal: ["add_listener"],
27
+ signal: ["listener"],
28
28
  earn: ["dual"],
29
29
  dual: [
30
30
  "symbols",
@@ -567,16 +567,17 @@ function buildSmartCopyCommand() {
567
567
  sc.command("create").description(
568
568
  `Create a Smart Copy bot
569
569
  Example: pionex-trade-cli bot smart_copy create --base BTC --quote USDT \\
570
- --bu-order-data-json '{"quoteInvestment":"100","leverageType":"follow"}' --copy-from <signalSourceId>`
571
- ).requiredOption("--base <base>", "Base asset (e.g. BTC)").requiredOption("--quote <quote>", "Quote asset (e.g. USDT)").requiredOption("--bu-order-data-json <json>", "JSON with quoteInvestment and leverageType").option("--copy-from <id>", "Signal source / trader ID to copy from").option("--copy-bot-order-id <id>", "Reference bot order ID for copying settings").action(async (opts, cmd) => {
570
+ --bu-order-data-json '{"quote_total_investment":"100","portfolio":[{"base":"BTC","signal_type":"<uuid>","leverage":2,"percent":"1"}]}'`
571
+ ).requiredOption("--base <base>", "Base asset (e.g. BTC)").requiredOption("--quote <quote>", "Quote asset (e.g. USDT)").requiredOption("--bu-order-data-json <json>", "JSON with quote_total_investment and portfolio array").option("--copy-from <id>", "Source bot order ID to copy settings from").option("--copy-type <type>", "Copy type").option("--note <note>", "Optional note").action(async (opts, cmd) => {
572
572
  try {
573
- const buOrderData = parseJsonFlag(opts.buOrderDataJson, "bu-order-data-json");
573
+ const bu_order_data = parseJsonFlag(opts.buOrderDataJson, "bu-order-data-json");
574
574
  const payload = {
575
575
  base: opts.base,
576
576
  quote: opts.quote,
577
- buOrderData,
578
- copyFrom: opts.copyFrom,
579
- copyBotOrderId: opts.copyBotOrderId
577
+ bu_order_data,
578
+ copy_from: opts.copyFrom,
579
+ copy_type: opts.copyType,
580
+ note: opts.note
580
581
  };
581
582
  if (isDryRun(cmd)) {
582
583
  const run2 = makeRunner(cmd);
@@ -593,25 +594,31 @@ function buildSmartCopyCommand() {
593
594
  }
594
595
  });
595
596
  sc.command("check_params").description(
596
- `Validate Smart Copy parameters before creating an order
597
- Example: pionex-trade-cli bot smart_copy check_params --base BTC --quote USDT \\
598
- --bu-order-data-json '{"quoteInvestment":"100","leverageType":"follow"}'`
599
- ).requiredOption("--base <base>", "Base asset (e.g. BTC)").requiredOption("--quote <quote>", "Quote asset (e.g. USDT)").requiredOption("--bu-order-data-json <json>", "JSON with quoteInvestment and leverageType").action(async (opts, cmd) => {
597
+ "Validate Smart Copy parameters before creating an order\n Example: pionex-trade-cli bot smart_copy check_params --base BTC --quote USDT \\\n --leverage 2 --quote-investment 0 --signal-type <uuid>"
598
+ ).requiredOption("--base <base>", "Base asset (e.g. BTC)").requiredOption("--quote <quote>", "Quote asset (e.g. USDT)").requiredOption("--leverage <n>", "Leverage multiplier", parseInt).requiredOption("--quote-investment <amount>", "Investment amount; use '0' to get range only").option("--signal-type <uuid>", "Optional signal provider UUID").option("--signal-param <json>", "Optional signal parameters as a JSON string").action(async (opts, cmd) => {
600
599
  try {
601
- const buOrderData = parseJsonFlag(opts.buOrderDataJson, "bu-order-data-json");
600
+ const payload = {
601
+ base: opts.base,
602
+ quote: opts.quote,
603
+ leverage: opts.leverage,
604
+ quote_investment: opts.quoteInvestment,
605
+ signal_type: opts.signalType,
606
+ signal_param: opts.signalParam
607
+ };
602
608
  const run = makeRunner(cmd);
603
- const out = await run("pionex_bot_smart_copy_check_params", { base: opts.base, quote: opts.quote, buOrderData });
609
+ const out = await run("pionex_bot_smart_copy_check_params", payload);
604
610
  print(out.data);
605
611
  } catch (e) {
606
612
  process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + "\n");
607
613
  process.exit(1);
608
614
  }
609
615
  });
610
- sc.command("cancel").description("Cancel a Smart Copy bot").requiredOption("--bu-order-id <id>", "Bot order ID").option("--close-sell-model <model>", "Sell model on close: NOT_SELL | TO_QUOTE | TO_USDT").action(async (opts, cmd) => {
616
+ sc.command("cancel").description("Cancel a Smart Copy bot").requiredOption("--bu-order-id <id>", "Bot order ID").option("--close-note <note>", "Optional close note").option("--convert-into-earn-coin", "Convert remaining funds into earn coin").action(async (opts, cmd) => {
611
617
  try {
612
618
  const payload = {
613
- buOrderId: opts.buOrderId,
614
- closeSellModel: opts.closeSellModel
619
+ bu_order_id: opts.buOrderId,
620
+ close_note: opts.closeNote,
621
+ convert_into_earn_coin: opts.convertIntoEarnCoin
615
622
  };
616
623
  if (isDryRun(cmd)) {
617
624
  print({ tool: "pionex_bot_smart_copy_cancel", args: payload });
@@ -629,18 +636,30 @@ function buildSmartCopyCommand() {
629
636
  }
630
637
  function buildSignalCommand() {
631
638
  const sig = new Command4("signal").description("Signal provider sub-commands (requires auth)");
632
- sig.command("add_listener").description("Subscribe to a signal provider").requiredOption("--signal-source-id <id>", "Signal provider ID").option("--listen-mode <mode>", "Subscription mode").action(async (opts, cmd) => {
639
+ sig.command("listener").description(
640
+ "Push a trading signal to the Pionex signal platform (signal provider use)\n Example: pionex-trade-cli bot signal listener --signal-type <uuid> --signal-param '{}' \\\n --base BTC --quote USDT --time 2024-01-01T12:00:00Z --price 85000 \\\n --action buy --position-size 1 --contracts 1"
641
+ ).requiredOption("--signal-type <uuid>", "Signal provider UUID").requiredOption("--signal-param <json>", "Signal parameters as a JSON string (e.g. '{}')").requiredOption("--base <base>", "Base currency (e.g. BTC)").requiredOption("--quote <quote>", "Quote currency (e.g. USDT)").requiredOption("--time <iso>", "Signal timestamp in RFC 3339 format (e.g. 2024-01-01T12:00:00Z)").requiredOption("--price <price>", "Current price at time of signal (e.g. 85000)").requiredOption("--action <action>", "'buy' to open a position, 'sell' to close").requiredOption("--position-size <size>", "Target position size as a fraction (e.g. '1' for 100%)").requiredOption("--contracts <n>", "Number of contracts").option("--direction <dir>", "Optional trade direction").action(async (opts, cmd) => {
633
642
  try {
634
643
  const payload = {
635
- signalSourceId: opts.signalSourceId,
636
- listenMode: opts.listenMode
644
+ signalType: opts.signalType,
645
+ signalParam: opts.signalParam,
646
+ base: opts.base,
647
+ quote: opts.quote,
648
+ time: opts.time,
649
+ price: opts.price,
650
+ data: {
651
+ action: opts.action,
652
+ position_size: opts.positionSize,
653
+ contracts: opts.contracts,
654
+ direction: opts.direction
655
+ }
637
656
  };
638
657
  if (isDryRun(cmd)) {
639
- print({ tool: "pionex_bot_signal_add_listener", args: payload });
658
+ print({ tool: "pionex_bot_signal_listener", args: payload });
640
659
  return;
641
660
  }
642
661
  const run = makeRunner(cmd);
643
- const out = await run("pionex_bot_signal_add_listener", payload);
662
+ const out = await run("pionex_bot_signal_listener", payload);
644
663
  print(out.data);
645
664
  } catch (e) {
646
665
  process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + "\n");
@@ -892,4 +911,4 @@ function buildTradeProgram() {
892
911
  export {
893
912
  buildTradeProgram
894
913
  };
895
- //# sourceMappingURL=trade-O3M6NF5Z.js.map
914
+ //# sourceMappingURL=trade-PNURMFCZ.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\", \"smart_copy\", \"signal\"],\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 smart_copy: [\"get\", \"create\", \"cancel\", \"check_params\"],\n signal: [\"listener\"],\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(\"smart_copy\", ({ reply }) => reply(T.smart_copy));\n completion.on(\"signal\", ({ reply }) => reply(T.signal));\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, spot_grid, smart_copy, or signal)\",\n ...T.bot.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from bot; and not __fish_seen_subcommand_from futures_grid spot_grid smart_copy signal' -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 \"# bot smart_copy commands\",\n ...T.smart_copy.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from smart_copy' -a '${s}'`),\n \"\",\n \"# bot signal commands\",\n ...T.signal.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from signal' -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\nfunction buildSmartCopyCommand(): Command {\n const sc = new Command(\"smart_copy\").description(\"Smart Copy bot sub-commands (requires auth)\");\n\n sc.command(\"get\")\n .description(\"Get a Smart Copy 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_smart_copy_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 sc.command(\"create\")\n .description(\n \"Create a Smart Copy bot\\n\" +\n \" Example: pionex-trade-cli bot smart_copy create --base BTC --quote USDT \\\\\\n\" +\n \" --bu-order-data-json '{\\\"quote_total_investment\\\":\\\"100\\\",\\\"portfolio\\\":[{\\\"base\\\":\\\"BTC\\\",\\\"signal_type\\\":\\\"<uuid>\\\",\\\"leverage\\\":2,\\\"percent\\\":\\\"1\\\"}]}'\"\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 with quote_total_investment and portfolio array\")\n .option(\"--copy-from <id>\", \"Source bot order ID to copy settings from\")\n .option(\"--copy-type <type>\", \"Copy type\")\n .option(\"--note <note>\", \"Optional note\")\n .action(async (opts: { base: string; quote: string; buOrderDataJson: string; copyFrom?: string; copyType?: string; note?: string }, cmd: Command) => {\n try {\n const bu_order_data = parseJsonFlag(opts.buOrderDataJson, \"bu-order-data-json\");\n const payload: Record<string, unknown> = {\n base: opts.base,\n quote: opts.quote,\n bu_order_data,\n copy_from: opts.copyFrom,\n copy_type: opts.copyType,\n note: opts.note,\n };\n if (isDryRun(cmd)) {\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_smart_copy_create\", { ...payload, __dryRun: true });\n print(out.data);\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_smart_copy_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 sc.command(\"check_params\")\n .description(\n \"Validate Smart Copy parameters before creating an order\\n\" +\n \" Example: pionex-trade-cli bot smart_copy check_params --base BTC --quote USDT \\\\\\n\" +\n \" --leverage 2 --quote-investment 0 --signal-type <uuid>\"\n )\n .requiredOption(\"--base <base>\", \"Base asset (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote asset (e.g. USDT)\")\n .requiredOption(\"--leverage <n>\", \"Leverage multiplier\", parseInt)\n .requiredOption(\"--quote-investment <amount>\", \"Investment amount; use '0' to get range only\")\n .option(\"--signal-type <uuid>\", \"Optional signal provider UUID\")\n .option(\"--signal-param <json>\", \"Optional signal parameters as a JSON string\")\n .action(async (opts: { base: string; quote: string; leverage: number; quoteInvestment: string; signalType?: string; signalParam?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n base: opts.base,\n quote: opts.quote,\n leverage: opts.leverage,\n quote_investment: opts.quoteInvestment,\n signal_type: opts.signalType,\n signal_param: opts.signalParam,\n };\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_smart_copy_check_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 sc.command(\"cancel\")\n .description(\"Cancel a Smart Copy bot\")\n .requiredOption(\"--bu-order-id <id>\", \"Bot order ID\")\n .option(\"--close-note <note>\", \"Optional close note\")\n .option(\"--convert-into-earn-coin\", \"Convert remaining funds into earn coin\")\n .action(async (opts: { buOrderId: string; closeNote?: string; convertIntoEarnCoin?: boolean }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n bu_order_id: opts.buOrderId,\n close_note: opts.closeNote,\n convert_into_earn_coin: opts.convertIntoEarnCoin,\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_smart_copy_cancel\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_smart_copy_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 sc;\n}\n\nfunction buildSignalCommand(): Command {\n const sig = new Command(\"signal\").description(\"Signal provider sub-commands (requires auth)\");\n\n sig.command(\"listener\")\n .description(\n \"Push a trading signal to the Pionex signal platform (signal provider use)\\n\" +\n \" Example: pionex-trade-cli bot signal listener --signal-type <uuid> --signal-param '{}' \\\\\\n\" +\n \" --base BTC --quote USDT --time 2024-01-01T12:00:00Z --price 85000 \\\\\\n\" +\n \" --action buy --position-size 1 --contracts 1\"\n )\n .requiredOption(\"--signal-type <uuid>\", \"Signal provider UUID\")\n .requiredOption(\"--signal-param <json>\", \"Signal parameters as a JSON string (e.g. '{}')\")\n .requiredOption(\"--base <base>\", \"Base currency (e.g. BTC)\")\n .requiredOption(\"--quote <quote>\", \"Quote currency (e.g. USDT)\")\n .requiredOption(\"--time <iso>\", \"Signal timestamp in RFC 3339 format (e.g. 2024-01-01T12:00:00Z)\")\n .requiredOption(\"--price <price>\", \"Current price at time of signal (e.g. 85000)\")\n .requiredOption(\"--action <action>\", \"'buy' to open a position, 'sell' to close\")\n .requiredOption(\"--position-size <size>\", \"Target position size as a fraction (e.g. '1' for 100%)\")\n .requiredOption(\"--contracts <n>\", \"Number of contracts\")\n .option(\"--direction <dir>\", \"Optional trade direction\")\n .action(async (opts: { signalType: string; signalParam: string; base: string; quote: string; time: string; price: string; action: string; positionSize: string; contracts: string; direction?: string }, cmd: Command) => {\n try {\n const payload: Record<string, unknown> = {\n signalType: opts.signalType,\n signalParam: opts.signalParam,\n base: opts.base,\n quote: opts.quote,\n time: opts.time,\n price: opts.price,\n data: {\n action: opts.action,\n position_size: opts.positionSize,\n contracts: opts.contracts,\n direction: opts.direction,\n },\n };\n if (isDryRun(cmd)) {\n print({ tool: \"pionex_bot_signal_listener\", args: payload });\n return;\n }\n const run = makeRunner(cmd);\n const out = await run(\"pionex_bot_signal_listener\", 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 sig;\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 bot.addCommand(buildSmartCopyCommand());\n bot.addCommand(buildSignalCommand());\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,6 +1,6 @@
1
1
  {
2
2
  "name": "@pionex/pionex-ai-kit",
3
- "version": "0.2.47",
3
+ "version": "0.2.49",
4
4
  "description": "CLI for Pionex MCP: config init and credentials (writes ~/.pionex/config.toml)",
5
5
  "type": "module",
6
6
  "license": "MIT",