@pionex/pionex-ai-kit 0.2.51 → 0.2.53

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-O45XCZNU.js";
8
+ } from "./chunk-I6Z3QX5T.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-TC3MJAIO.js.map
101
+ //# sourceMappingURL=kit-DBQGQY64.js.map
@@ -7,18 +7,19 @@ import {
7
7
  print,
8
8
  toToolErrorPayload,
9
9
  version
10
- } from "./chunk-O45XCZNU.js";
10
+ } from "./chunk-I6Z3QX5T.js";
11
11
 
12
12
  // src/trade.ts
13
- import { Command as Command7 } from "commander";
13
+ import { Command as Command8 } from "commander";
14
14
 
15
15
  // src/completion.ts
16
16
  import { createRequire } from "module";
17
17
  var _require = createRequire(import.meta.url);
18
18
  var COMPLETION_TREE = {
19
- groups: ["market", "account", "orders", "bot", "earn", "capabilities"],
19
+ groups: ["market", "account", "wallet", "orders", "bot", "earn", "capabilities"],
20
20
  market: ["depth", "trades", "symbols", "tickers", "book_tickers", "klines"],
21
- account: ["balance", "balance_full"],
21
+ account: ["balance"],
22
+ wallet: ["balance_full"],
22
23
  orders: ["new", "get", "open", "all", "fills", "fills_by_order_id", "cancel", "cancel_all"],
23
24
  bot: ["order_list", "futures_grid", "spot_grid", "smart_copy", "signal"],
24
25
  futures_grid: ["get", "create", "adjust_params", "reduce", "cancel", "check_params"],
@@ -47,6 +48,7 @@ function initCompletion() {
47
48
  completion2.on("group", ({ reply }) => reply(T.groups));
48
49
  completion2.on("market", ({ reply }) => reply(T.market));
49
50
  completion2.on("account", ({ reply }) => reply(T.account));
51
+ completion2.on("wallet", ({ reply }) => reply(T.wallet));
50
52
  completion2.on("orders", ({ reply }) => reply(T.orders));
51
53
  completion2.on("bot", ({ reply }) => reply(T.bot));
52
54
  completion2.on("futures_grid", ({ reply }) => reply(T.futures_grid));
@@ -80,6 +82,9 @@ function generateFishCompletion() {
80
82
  "# account subcommands",
81
83
  ...T.account.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from account' -a '${s}'`),
82
84
  "",
85
+ "# wallet subcommands",
86
+ ...T.wallet.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from wallet' -a '${s}'`),
87
+ "",
83
88
  "# orders subcommands",
84
89
  ...T.orders.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from orders' -a '${s}'`),
85
90
  "",
@@ -194,26 +199,33 @@ function buildAccountCommand() {
194
199
  process.exit(1);
195
200
  }
196
201
  });
197
- account.command("balance_full").description("Get full account balance overview (spot + futures, with coin prices and USDT/BTC totals)").option("--app-lang <lang>", "App language, e.g. en or zh (overrides sys-lang)").option("--sys-lang <lang>", "System language fallback").action(async (opts, cmd) => {
202
+ return account;
203
+ }
204
+
205
+ // src/commands/wallet.ts
206
+ import { Command as Command3 } from "commander";
207
+ function buildWalletCommand() {
208
+ const wallet = new Command3("wallet").description("Wallet data (requires auth)");
209
+ wallet.command("balance_full").description("Get full account balance overview (spot + futures, with coin prices and USDT/BTC totals)").option("--app-lang <lang>", "App language, e.g. en or zh (overrides sys-lang)").option("--sys-lang <lang>", "System language fallback").action(async (opts, cmd) => {
198
210
  try {
199
211
  const run = makeRunner(cmd);
200
212
  const args = {};
201
213
  if (opts.appLang) args["appLang"] = opts.appLang;
202
214
  if (opts.sysLang) args["sysLang"] = opts.sysLang;
203
- const out = await run("pionex_account_get_balance_full", args);
215
+ const out = await run("pionex_wallet_get_balance_full", args);
204
216
  print(out.data);
205
217
  } catch (e) {
206
218
  process.stderr.write(JSON.stringify(toToolErrorPayload(e), null, 2) + "\n");
207
219
  process.exit(1);
208
220
  }
209
221
  });
210
- return account;
222
+ return wallet;
211
223
  }
212
224
 
213
225
  // src/commands/orders.ts
214
- import { Command as Command3 } from "commander";
226
+ import { Command as Command4 } from "commander";
215
227
  function buildOrdersCommand() {
216
- const orders = new Command3("orders").description("Spot orders (requires auth)");
228
+ const orders = new Command4("orders").description("Spot orders (requires auth)");
217
229
  orders.command("new").description("Place a new spot order").requiredOption("--symbol <symbol>", "Trading pair (e.g. BTC_USDT)").requiredOption("--side <side>", "BUY or SELL").requiredOption("--type <type>", "Order type (MARKET, LIMIT, etc.)").option("--client-order-id <id>", "Client-assigned order ID").option("--size <size>", "Base asset quantity").option("--price <price>", "Limit price").option("--amount <amount>", "Quote asset amount (for market buy)").option("--IOC", "Immediate-or-cancel flag").action(async (opts, cmd) => {
218
230
  try {
219
231
  const payload = {
@@ -322,9 +334,9 @@ function buildOrdersCommand() {
322
334
  }
323
335
 
324
336
  // src/commands/bot.ts
325
- import { Command as Command4 } from "commander";
337
+ import { Command as Command5 } from "commander";
326
338
  function buildFuturesGridCommand() {
327
- const fg = new Command4("futures_grid").description("Futures Grid bot sub-commands (requires auth)");
339
+ const fg = new Command5("futures_grid").description("Futures Grid bot sub-commands (requires auth)");
328
340
  fg.command("get").description("Get a Futures Grid bot order by ID").requiredOption("--bu-order-id <id>", "Bot order ID").option("--lang <lang>", "Response language (e.g. en, zh)").action(async (opts, cmd) => {
329
341
  try {
330
342
  const run = makeRunner(cmd);
@@ -435,7 +447,7 @@ function buildFuturesGridCommand() {
435
447
  return fg;
436
448
  }
437
449
  function buildSpotGridCommand() {
438
- const sg = new Command4("spot_grid").description("Spot Grid bot sub-commands (requires auth)");
450
+ const sg = new Command5("spot_grid").description("Spot Grid bot sub-commands (requires auth)");
439
451
  sg.command("get").description("Get a Spot Grid bot order by ID").requiredOption("--bu-order-id <id>", "Bot order ID").action(async (opts, cmd) => {
440
452
  try {
441
453
  const run = makeRunner(cmd);
@@ -566,7 +578,7 @@ function buildSpotGridCommand() {
566
578
  return sg;
567
579
  }
568
580
  function buildSmartCopyCommand() {
569
- const sc = new Command4("smart_copy").description("Smart Copy bot sub-commands (requires auth)");
581
+ const sc = new Command5("smart_copy").description("Smart Copy bot sub-commands (requires auth)");
570
582
  sc.command("get").description("Get a Smart Copy bot order by ID").requiredOption("--bu-order-id <id>", "Bot order ID").action(async (opts, cmd) => {
571
583
  try {
572
584
  const run = makeRunner(cmd);
@@ -648,7 +660,7 @@ function buildSmartCopyCommand() {
648
660
  return sc;
649
661
  }
650
662
  function buildSignalCommand() {
651
- const sig = new Command4("signal").description("Signal provider sub-commands (requires auth)");
663
+ const sig = new Command5("signal").description("Signal provider sub-commands (requires auth)");
652
664
  sig.command("listener").description(
653
665
  "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"
654
666
  ).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) => {
@@ -682,7 +694,7 @@ function buildSignalCommand() {
682
694
  return sig;
683
695
  }
684
696
  function buildBotCommand() {
685
- const bot = new Command4("bot").description("Bot management (requires auth)");
697
+ const bot = new Command5("bot").description("Bot management (requires auth)");
686
698
  bot.command("order_list").description("List bot orders across all bot types").option("--status <status>", "Filter by status: running | finished").option("--base <base>", "Filter by base asset (e.g. BTC)").option("--quote <quote>", "Filter by quote asset (e.g. USDT)").option("--page-token <token>", "Pagination token from previous response").option("--bu-order-types <list>", "Comma-separated types: futures_grid,spot_grid,smart_copy").action(async (opts, cmd) => {
687
699
  try {
688
700
  const buOrderTypes = opts.buOrderTypes ? opts.buOrderTypes.split(",").map((s) => s.trim()) : void 0;
@@ -708,9 +720,9 @@ function buildBotCommand() {
708
720
  }
709
721
 
710
722
  // src/commands/earn.ts
711
- import { Command as Command5 } from "commander";
723
+ import { Command as Command6 } from "commander";
712
724
  function buildDualCommand() {
713
- const dual = new Command5("dual").description("Dual Investment commands");
725
+ const dual = new Command6("dual").description("Dual Investment commands");
714
726
  dual.command("symbols").description("List supported Dual Investment trading pairs").option("--base <base>", "Filter by base asset (e.g. BTC)").action(async (opts, cmd) => {
715
727
  try {
716
728
  const run = makeRunner(cmd);
@@ -859,15 +871,15 @@ function buildDualCommand() {
859
871
  return dual;
860
872
  }
861
873
  function buildEarnCommand() {
862
- const earn = new Command5("earn").description("Earn products (requires auth)");
874
+ const earn = new Command6("earn").description("Earn products (requires auth)");
863
875
  earn.addCommand(buildDualCommand());
864
876
  return earn;
865
877
  }
866
878
 
867
879
  // src/commands/capabilities.ts
868
- import { Command as Command6 } from "commander";
880
+ import { Command as Command7 } from "commander";
869
881
  function buildCapabilitiesCommand() {
870
- return new Command6("capabilities").description("Print all available commands as JSON (for AI agent self-discovery)").action(() => {
882
+ return new Command7("capabilities").description("Print all available commands as JSON (for AI agent self-discovery)").action(() => {
871
883
  const caps = {
872
884
  market: ["depth", "trades", "symbols", "tickers", "book_tickers", "klines"],
873
885
  account: ["balance"],
@@ -900,10 +912,11 @@ function buildCapabilitiesCommand() {
900
912
  // src/trade.ts
901
913
  var completion = initCompletion();
902
914
  function buildTradeProgram() {
903
- const program = new Command7("pionex-trade-cli").version(version, "-v, --version", "Print version number").description("Pionex trading CLI \u2014 direct access to market data, orders, bots, and earn products").addHelpCommand(true);
904
- program.option("--profile <name>", "Profile name in ~/.pionex/config.toml").option("--modules <list>", "Comma-separated modules to enable (market,account,orders,bot,earn or all)").option("--base-url <url>", "Override API base URL").option("--read-only", "Disable write operations (orders new/cancel, etc.)").option("--dry-run", "Print resolved request body without executing (write commands only)");
915
+ const program = new Command8("pionex-trade-cli").version(version, "-v, --version", "Print version number").description("Pionex trading CLI \u2014 direct access to market data, orders, bots, and earn products").addHelpCommand(true);
916
+ program.option("--profile <name>", "Profile name in ~/.pionex/config.toml").option("--modules <list>", "Comma-separated modules to enable (market,account,wallet,orders,bot,earn or all)").option("--base-url <url>", "Override API base URL").option("--read-only", "Disable write operations (orders new/cancel, etc.)").option("--dry-run", "Print resolved request body without executing (write commands only)");
905
917
  program.addCommand(buildMarketCommand());
906
918
  program.addCommand(buildAccountCommand());
919
+ program.addCommand(buildWalletCommand());
907
920
  program.addCommand(buildOrdersCommand());
908
921
  program.addCommand(buildBotCommand());
909
922
  program.addCommand(buildEarnCommand());
@@ -924,4 +937,4 @@ function buildTradeProgram() {
924
937
  export {
925
938
  buildTradeProgram
926
939
  };
927
- //# sourceMappingURL=trade-ARTTYJHM.js.map
940
+ //# sourceMappingURL=trade-4DUOU56K.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/wallet.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 { buildWalletCommand } from \"./commands/wallet.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,wallet,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(buildWalletCommand());\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\", \"wallet\", \"orders\", \"bot\", \"earn\", \"capabilities\"],\n market: [\"depth\", \"trades\", \"symbols\", \"tickers\", \"book_tickers\", \"klines\"],\n account: [\"balance\"],\n wallet: [\"balance_full\"],\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(\"wallet\", ({ reply }) => reply(T.wallet));\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 \"# wallet subcommands\",\n ...T.wallet.map((s) => `complete -c ${cmd} -n '__fish_seen_subcommand_from wallet' -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 } from \"../helpers.js\";\n\nexport function buildWalletCommand(): Command {\n const wallet = new Command(\"wallet\").description(\"Wallet data (requires auth)\");\n\n wallet\n .command(\"balance_full\")\n .description(\"Get full account balance overview (spot + futures, with coin prices and USDT/BTC totals)\")\n .option(\"--app-lang <lang>\", \"App language, e.g. en or zh (overrides sys-lang)\")\n .option(\"--sys-lang <lang>\", \"System language fallback\")\n .action(async (opts: { appLang?: string; sysLang?: string }, cmd: Command) => {\n try {\n const run = makeRunner(cmd);\n const args: Record<string, string> = {};\n if (opts.appLang) args[\"appLang\"] = opts.appLang;\n if (opts.sysLang) args[\"sysLang\"] = opts.sysLang;\n const out = await run(\"pionex_wallet_get_balance_full\", args);\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 wallet;\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","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.51",
3
+ "version": "0.2.53",
4
4
  "description": "CLI for Pionex MCP: config init and credentials (writes ~/.pionex/config.toml)",
5
5
  "type": "module",
6
6
  "license": "MIT",