@pionex/pionex-ai-kit 0.2.42 → 0.2.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-NDTSX4HU.js +2900 -0
- package/dist/chunk-NDTSX4HU.js.map +1 -0
- package/dist/index.js +10 -3561
- package/dist/index.js.map +1 -1
- package/dist/kit-7X7UVP4Q.js +101 -0
- package/dist/kit-7X7UVP4Q.js.map +1 -0
- package/dist/trade-A4O6JDLZ.js +786 -0
- package/dist/trade-A4O6JDLZ.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SUPPORTED_CLIENTS,
|
|
3
|
+
configFilePath,
|
|
4
|
+
readFullConfig,
|
|
5
|
+
runSetup,
|
|
6
|
+
version,
|
|
7
|
+
writeFullConfig
|
|
8
|
+
} from "./chunk-NDTSX4HU.js";
|
|
9
|
+
|
|
10
|
+
// src/kit.ts
|
|
11
|
+
import { createInterface } from "readline";
|
|
12
|
+
import { Command } from "commander";
|
|
13
|
+
var DEFAULT_PROFILE_NAME = "pionx-prod";
|
|
14
|
+
var DEFAULT_BASE_URL = "https://api.pionex.com";
|
|
15
|
+
function ask(rl, question, defaultValue = "") {
|
|
16
|
+
const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
|
|
17
|
+
return new Promise((resolve) => rl.question(prompt, (answer) => resolve((answer ?? "").trim() || defaultValue)));
|
|
18
|
+
}
|
|
19
|
+
async function cmdOnboard() {
|
|
20
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
21
|
+
process.stdout.write(`
|
|
22
|
+
pionex-ai-kit v${version}
|
|
23
|
+
`);
|
|
24
|
+
process.stdout.write(" \u26A0\uFE0F Security Tips: NEVER send API keys in agent chat. Create a dedicated API Key for your agent. Please test thoroughly before connecting to large real-money accounts.\n");
|
|
25
|
+
process.stdout.write(" \u26A0\uFE0F \u5B89\u5168\u63D0\u793A\uFF1A\u5207\u52FF\u5728 Agent \u5BF9\u8BDD\u4E2D\u53D1\u9001 API Key\u3002\u8BF7\u4E3A Agent \u521B\u5EFA\u4E13\u7528API Key\u63A5\u5165\uFF0C\u5148\u7528\u5C0F\u91D1\u989D\u5145\u5206\u9A8C\u8BC1\u540E\u518D\u63A5\u5165\u5B9E\u76D8\u3002\n\n");
|
|
26
|
+
process.stdout.write("Pionex CLI \u2014 Configuration Wizard\n\n");
|
|
27
|
+
process.stdout.write("Go to https://www.pionex.com/zh-CN/my-account/api to create an API Key (trade permission required)\n\n");
|
|
28
|
+
process.stdout.write("Credentials will be saved to " + configFilePath() + "\n\n");
|
|
29
|
+
const apiKey = await ask(rl, "Pionex API Key");
|
|
30
|
+
if (!apiKey) {
|
|
31
|
+
process.stderr.write(" Error: API Key cannot be empty.\n");
|
|
32
|
+
rl.close();
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const secretKey = await ask(rl, "Pionex API Secret");
|
|
36
|
+
if (!secretKey) {
|
|
37
|
+
process.stderr.write(" Error: API Secret cannot be empty.\n");
|
|
38
|
+
rl.close();
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
rl.close();
|
|
42
|
+
let config = { profiles: {} };
|
|
43
|
+
try {
|
|
44
|
+
config = readFullConfig();
|
|
45
|
+
} catch {
|
|
46
|
+
config = { profiles: {} };
|
|
47
|
+
}
|
|
48
|
+
if (!config.profiles) config.profiles = {};
|
|
49
|
+
const profile = {
|
|
50
|
+
api_key: apiKey,
|
|
51
|
+
secret_key: secretKey,
|
|
52
|
+
base_url: DEFAULT_BASE_URL
|
|
53
|
+
};
|
|
54
|
+
const profileName = DEFAULT_PROFILE_NAME;
|
|
55
|
+
config.profiles[profileName] = profile;
|
|
56
|
+
config.default_profile = profileName;
|
|
57
|
+
try {
|
|
58
|
+
writeFullConfig(config);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
process.stderr.write(" Failed to write config: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
process.stdout.write("\n Config saved to " + configFilePath() + "\n");
|
|
64
|
+
process.stdout.write(" Default profile: " + profileName + "\n");
|
|
65
|
+
process.stdout.write(" Usage: pionex-ai-kit onboard\n");
|
|
66
|
+
process.stdout.write(
|
|
67
|
+
" Next: run 'pionex-ai-kit setup --mcp=pionex-trade-mcp --client cursor' or 'pionex-trade-mcp setup --client cursor' to register the MCP server.\n You can replace 'cursor' with 'claude-desktop', 'windsurf', 'vscode', 'claude-code', 'claude' or 'openclaw' depending on which agent you want to configure.\n\n"
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
function buildKitProgram() {
|
|
71
|
+
const program = new Command("pionex-ai-kit").version(version, "-v, --version", "Print version number").description("Pionex CLI: configure credentials and set up MCP client integration");
|
|
72
|
+
program.command("onboard").description("Interactive wizard to create ~/.pionex/config.toml (API key + secret)").action(() => {
|
|
73
|
+
cmdOnboard().catch((e) => {
|
|
74
|
+
process.stderr.write(String(e) + "\n");
|
|
75
|
+
process.exit(1);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
program.command("setup").description(`Write MCP client config to register the Pionex MCP server
|
|
79
|
+
Supported clients: ${[...SUPPORTED_CLIENTS, "claude (alias for claude-code)"].join(", ")}`).option("--mcp <server>", "MCP server to register (default: pionex-trade-mcp)").requiredOption("--client <client>", `AI client to configure (${SUPPORTED_CLIENTS.join("|")})`).action((opts) => {
|
|
80
|
+
const targetMcp = opts.mcp ?? "pionex-trade-mcp";
|
|
81
|
+
if (targetMcp !== "pionex-trade-mcp") {
|
|
82
|
+
process.stderr.write(`Unsupported MCP server: ${targetMcp}. Currently only 'pionex-trade-mcp' is supported.
|
|
83
|
+
`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const normalizedClient = opts.client === "claude" ? "claude-code" : opts.client;
|
|
87
|
+
if (!SUPPORTED_CLIENTS.includes(normalizedClient)) {
|
|
88
|
+
process.stderr.write(
|
|
89
|
+
`Unsupported client: ${opts.client}. Supported: ${[...SUPPORTED_CLIENTS, "claude (alias for claude-code)"].join(", ")}
|
|
90
|
+
`
|
|
91
|
+
);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
runSetup({ client: normalizedClient });
|
|
95
|
+
});
|
|
96
|
+
return program;
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
buildKitProgram
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=kit-7X7UVP4Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kit.ts"],"sourcesContent":["import { createInterface } from \"node:readline\";\nimport { Command } from \"commander\";\nimport {\n readFullConfig,\n writeFullConfig,\n configFilePath,\n runSetup,\n SUPPORTED_CLIENTS,\n type PionexTomlConfig,\n type PionexProfile,\n type ClientId,\n} from \"@pionex-ai/core\";\nimport { version } from \"./helpers.js\";\n\nconst DEFAULT_PROFILE_NAME = \"pionx-prod\";\nconst DEFAULT_BASE_URL = \"https://api.pionex.com\";\n\nfunction ask(rl: ReturnType<typeof createInterface>, question: string, defaultValue = \"\"): Promise<string> {\n const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;\n return new Promise((resolve) => rl.question(prompt, (answer) => resolve((answer ?? \"\").trim() || defaultValue)));\n}\n\nasync function cmdOnboard(): Promise<void> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n\n process.stdout.write(`\\n pionex-ai-kit v${version}\\n`);\n process.stdout.write(\" ⚠️ Security Tips: NEVER send API keys in agent chat. Create a dedicated API Key for your agent. Please test thoroughly before connecting to large real-money accounts.\\n\");\n process.stdout.write(\" ⚠️ 安全提示:切勿在 Agent 对话中发送 API Key。请为 Agent 创建专用API Key接入,先用小金额充分验证后再接入实盘。\\n\\n\");\n\n process.stdout.write(\"Pionex CLI — Configuration Wizard\\n\\n\");\n process.stdout.write(\"Go to https://www.pionex.com/zh-CN/my-account/api to create an API Key (trade permission required)\\n\\n\");\n process.stdout.write(\"Credentials will be saved to \" + configFilePath() + \"\\n\\n\");\n\n const apiKey = await ask(rl, \"Pionex API Key\");\n if (!apiKey) {\n process.stderr.write(\" Error: API Key cannot be empty.\\n\");\n rl.close();\n process.exit(1);\n }\n\n const secretKey = await ask(rl, \"Pionex API Secret\");\n if (!secretKey) {\n process.stderr.write(\" Error: API Secret cannot be empty.\\n\");\n rl.close();\n process.exit(1);\n }\n\n rl.close();\n\n let config: PionexTomlConfig = { profiles: {} };\n try {\n config = readFullConfig();\n } catch {\n config = { profiles: {} };\n }\n if (!config.profiles) config.profiles = {};\n\n const profile: PionexProfile = {\n api_key: apiKey,\n secret_key: secretKey,\n base_url: DEFAULT_BASE_URL,\n };\n const profileName = DEFAULT_PROFILE_NAME;\n config.profiles[profileName] = profile;\n config.default_profile = profileName;\n\n try {\n writeFullConfig(config);\n } catch (e) {\n process.stderr.write(\" Failed to write config: \" + (e instanceof Error ? e.message : String(e)) + \"\\n\");\n process.exit(1);\n }\n\n process.stdout.write(\"\\n Config saved to \" + configFilePath() + \"\\n\");\n process.stdout.write(\" Default profile: \" + profileName + \"\\n\");\n process.stdout.write(\" Usage: pionex-ai-kit onboard\\n\");\n process.stdout.write(\n \" Next: run 'pionex-ai-kit setup --mcp=pionex-trade-mcp --client cursor' or \" +\n \"'pionex-trade-mcp setup --client cursor' to register the MCP server.\\n\" +\n \" You can replace 'cursor' with 'claude-desktop', 'windsurf', 'vscode', 'claude-code', 'claude' or 'openclaw' depending on which agent you want to configure.\\n\\n\",\n );\n}\n\nexport function buildKitProgram(): Command {\n const program = new Command(\"pionex-ai-kit\")\n .version(version, \"-v, --version\", \"Print version number\")\n .description(\"Pionex CLI: configure credentials and set up MCP client integration\");\n\n program\n .command(\"onboard\")\n .description(\"Interactive wizard to create ~/.pionex/config.toml (API key + secret)\")\n .action(() => {\n cmdOnboard().catch((e) => {\n process.stderr.write(String(e) + \"\\n\");\n process.exit(1);\n });\n });\n\n program\n .command(\"setup\")\n .description(`Write MCP client config to register the Pionex MCP server\\n Supported clients: ${[...SUPPORTED_CLIENTS, \"claude (alias for claude-code)\"].join(\", \")}`)\n .option(\"--mcp <server>\", \"MCP server to register (default: pionex-trade-mcp)\")\n .requiredOption(\"--client <client>\", `AI client to configure (${SUPPORTED_CLIENTS.join(\"|\")})`)\n .action((opts: { mcp?: string; client: string }) => {\n const targetMcp = opts.mcp ?? \"pionex-trade-mcp\";\n if (targetMcp !== \"pionex-trade-mcp\") {\n process.stderr.write(`Unsupported MCP server: ${targetMcp}. Currently only 'pionex-trade-mcp' is supported.\\n`);\n process.exit(1);\n }\n const normalizedClient = opts.client === \"claude\" ? \"claude-code\" : opts.client;\n if (!SUPPORTED_CLIENTS.includes(normalizedClient as ClientId)) {\n process.stderr.write(\n `Unsupported client: ${opts.client}. Supported: ${[...SUPPORTED_CLIENTS, \"claude (alias for claude-code)\"].join(\", \")}\\n`,\n );\n process.exit(1);\n }\n runSetup({ client: normalizedClient as ClientId });\n });\n\n return program;\n}\n"],"mappings":"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","names":[]}
|