desic-okx-agent 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -25,24 +25,58 @@ The project does not expose withdrawal, deposit, transfer, asset-movement, or AP
25
25
  - npm
26
26
  - Network access to OKX, or an HTTP/HTTPS proxy that can reach OKX
27
27
 
28
- ## Install from GitHub
28
+ ## Install
29
29
 
30
- The npm package is not published yet. Install the current source version with:
30
+ Install the published package:
31
31
 
32
32
  ```bash
33
- git clone https://github.com/xiazhi88/desic-okx-agent.git
34
- cd desic-okx-agent
35
- npm ci
36
- npm run build
37
- npm link
33
+ npm install --global desic-okx-agent
38
34
  ```
39
35
 
40
36
  This registers the `desic-okx` command on the local machine.
41
37
 
42
- After the package is published to npm, installation will be:
38
+ ## Set up an AI client
39
+
40
+ Run the guided setup after installation:
43
41
 
44
42
  ```bash
43
+ desic-okx setup
44
+ ```
45
+
46
+ The terminal UI lets you select Codex, Claude Code, Cursor, VS Code / GitHub Copilot, Cline, or all supported clients. It safely adds the `desic-okx` MCP entry without replacing other MCP servers.
47
+
48
+ For Codex and Claude Code, setup also installs all bundled Skills automatically. Cursor, VS Code / GitHub Copilot, and Cline receive MCP configuration only because they do not share a portable `SKILL.md` installation format.
49
+
50
+ For automation, choose explicit targets without opening the UI:
51
+
52
+ ```bash
53
+ desic-okx setup --targets codex --yes
54
+ desic-okx setup --targets codex,claude-code --yes
55
+ desic-okx setup --all --yes
56
+ ```
57
+
58
+ Restart the selected client after setup. The MCP server starts the local Runtime automatically when it is first used.
59
+
60
+ ## Ask an AI to install it
61
+
62
+ Paste this into Codex, Claude Code, Cursor, VS Code / GitHub Copilot, or Cline. Replace `codex` with `claude-code`, `cursor`, `vscode`, `cline`, or `all` when appropriate.
63
+
64
+ ```text
65
+ Install Desic OKX Agent for me. Check that Node.js is at least 22.12, then run:
45
66
  npm install --global desic-okx-agent
67
+ desic-okx setup --targets codex --yes
68
+
69
+ Verify the installation with `desic-okx status` and `desic-okx tools`. Do not ask for or configure any OKX API credentials. Confirm that public market tools are ready to use.
70
+ ```
71
+
72
+ For development from source:
73
+
74
+ ```bash
75
+ git clone https://github.com/xiazhi88/desic-okx-agent.git
76
+ cd desic-okx-agent
77
+ npm ci
78
+ npm run build
79
+ npm link
46
80
  ```
47
81
 
48
82
  ## Quick start
@@ -67,7 +101,7 @@ desic-okx stop
67
101
 
68
102
  ## Connect Codex
69
103
 
70
- Register the local stdio MCP server:
104
+ The recommended option is `desic-okx setup`, which also installs all Skills. To register only the local stdio MCP server manually:
71
105
 
72
106
  ```bash
73
107
  codex mcp add desic-okx -- desic-okx mcp
@@ -83,7 +117,7 @@ args = ["mcp"]
83
117
 
84
118
  ## Connect Claude Code
85
119
 
86
- Register it for the current user:
120
+ The recommended option is `desic-okx setup`, which also installs all Skills. To register only the MCP server manually:
87
121
 
88
122
  ```bash
89
123
  claude mcp add --transport stdio --scope user desic-okx -- desic-okx mcp
@@ -97,14 +131,16 @@ claude mcp get desic-okx
97
131
 
98
132
  A JSON example is available in `examples/claude-code/mcp.json`.
99
133
 
100
- ## Install the skills
134
+ ## Skills
135
+
136
+ `desic-okx setup` automatically installs all seven Skills for Codex and Claude Code. The MCP server exposes the tools; Skills add reusable analysis and trading workflows.
101
137
 
102
- The MCP server exposes the tools. Skills add reusable analysis and trading workflows. Install only the skills you want by copying their directories from `skills/`.
138
+ To install selected Skills manually, copy their directories from the installed package:
103
139
 
104
140
  Codex personal skills:
105
141
 
106
142
  ```text
107
- ~/.agents/skills/<skill-name>/SKILL.md
143
+ ${CODEX_HOME:-~/.codex}/skills/<skill-name>/SKILL.md
108
144
  ```
109
145
 
110
146
  Claude Code personal skills:
@@ -233,7 +269,7 @@ Normal tests never submit orders.
233
269
 
234
270
  ## Status
235
271
 
236
- This repository is currently pre-release software at version `0.1.0`. Unit, packaging, Skill, and MCP transport checks are automated. Real OKX Demo trading should be validated in the target network environment before a `1.0.0` release.
272
+ This repository is currently pre-release software at version `0.1.2`. Unit, packaging, Skill, and MCP transport checks are automated. Real OKX Demo trading should be validated in the target network environment before a `1.0.0` release.
237
273
 
238
274
  ## License
239
275
 
package/dist/cli/index.js CHANGED
@@ -9,6 +9,7 @@ import { runMcpServer } from "../mcp/server.js";
9
9
  import { RuntimeClient } from "../runtime/client.js";
10
10
  import { runRuntimeServer } from "../runtime/server.js";
11
11
  import { ask, askSecret } from "./prompts.js";
12
+ import { SetupCancelledError, chooseSetupTargets, parseSetupTargets, SETUP_TARGETS, showSetupResult, setupSucceeded, setupSummary, setupTargets } from "../setup/installer.js";
12
13
  const program = new Command()
13
14
  .name("desic-okx")
14
15
  .description("Independent Desic runtime, MCP server, CLI, and skills for OKX")
@@ -37,6 +38,25 @@ program.command("status")
37
38
  program.command("mcp")
38
39
  .description("Run the stdio MCP adapter")
39
40
  .action(async () => runMcpServer());
41
+ program.command("setup")
42
+ .description("Interactively configure supported AI clients and install compatible skills")
43
+ .option("--targets <targets>", `Comma-separated targets: ${SETUP_TARGETS.join(", ")}, all`)
44
+ .option("--all", "Configure every supported target")
45
+ .option("--yes", "Run without interactive prompts; defaults to all targets when none are specified")
46
+ .action(async (options) => {
47
+ const interactive = !options.all && !options.targets && !options.yes;
48
+ const targets = options.all ? [...SETUP_TARGETS]
49
+ : options.targets ? parseSetupTargets(options.targets)
50
+ : options.yes ? [...SETUP_TARGETS]
51
+ : await chooseSetupTargets();
52
+ const results = setupTargets(targets);
53
+ if (interactive)
54
+ showSetupResult(results);
55
+ else
56
+ print({ targets, results, summary: setupSummary(results) });
57
+ if (!setupSucceeded(results))
58
+ process.exitCode = 1;
59
+ });
40
60
  program.command("call")
41
61
  .description("Call one runtime tool")
42
62
  .argument("<tool>", "tool name")
@@ -105,10 +125,15 @@ account.command("remove")
105
125
  await stopForReload();
106
126
  print({ removed: true, name });
107
127
  });
108
- program.parseAsync(process.argv).catch((error) => {
109
- process.stderr.write(`${JSON.stringify({ error: publicError(error) })}\n`);
110
- process.exitCode = 1;
111
- });
128
+ try {
129
+ await program.parseAsync(process.argv);
130
+ }
131
+ catch (error) {
132
+ if (!(error instanceof SetupCancelledError)) {
133
+ process.stderr.write(`${JSON.stringify({ error: publicError(error) })}\n`);
134
+ process.exitCode = 1;
135
+ }
136
+ }
112
137
  async function stopForReload() {
113
138
  try {
114
139
  const client = await RuntimeClient.connect({ start: false });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export declare const SETUP_TARGETS: readonly ["codex", "claude-code", "cursor", "vscode", "cline"];
2
+ export type SetupTarget = typeof SETUP_TARGETS[number];
3
+ type SetupStatus = "configured" | "existing" | "failed" | "not-supported";
4
+ export interface SetupResult {
5
+ target: SetupTarget;
6
+ mcp: SetupStatus;
7
+ skills: SetupStatus;
8
+ details: string[];
9
+ }
10
+ interface CommandResult {
11
+ ok: boolean;
12
+ message?: string;
13
+ }
14
+ interface SetupOptions {
15
+ homeDir?: string;
16
+ skillSourceDir?: string;
17
+ runCommand?: (command: string, args: string[]) => CommandResult;
18
+ }
19
+ export declare function parseSetupTargets(value: string): SetupTarget[];
20
+ export declare function chooseSetupTargets(): Promise<SetupTarget[]>;
21
+ export declare class SetupCancelledError extends Error {
22
+ constructor();
23
+ }
24
+ export declare function setupTargets(targets: SetupTarget[], options?: SetupOptions): SetupResult[];
25
+ export declare function mergeMcpConfig(configPath: string, details: string[]): SetupStatus;
26
+ export declare function setupSucceeded(results: SetupResult[]): boolean;
27
+ export declare function setupSummary(results: SetupResult[]): string;
28
+ export declare function showSetupResult(results: SetupResult[]): void;
29
+ export {};
@@ -0,0 +1,208 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import * as prompts from "@clack/prompts";
7
+ export const SETUP_TARGETS = ["codex", "claude-code", "cursor", "vscode", "cline"];
8
+ const SERVER_NAME = "desic-okx";
9
+ const SERVER_CONFIG = { command: "desic-okx", args: ["mcp"] };
10
+ const TARGET_LABELS = {
11
+ codex: "Codex",
12
+ "claude-code": "Claude Code",
13
+ cursor: "Cursor",
14
+ vscode: "VS Code / GitHub Copilot",
15
+ cline: "Cline"
16
+ };
17
+ export function parseSetupTargets(value) {
18
+ const requested = value.split(",").map((item) => item.trim()).filter(Boolean);
19
+ if (requested.includes("all"))
20
+ return [...SETUP_TARGETS];
21
+ const invalid = requested.filter((item) => !SETUP_TARGETS.includes(item));
22
+ if (invalid.length > 0)
23
+ throw new Error(`Unsupported setup target: ${invalid.join(", ")}`);
24
+ if (requested.length === 0)
25
+ throw new Error("At least one setup target is required");
26
+ return [...new Set(requested)];
27
+ }
28
+ export async function chooseSetupTargets() {
29
+ prompts.intro("Desic OKX Agent setup");
30
+ const selection = await prompts.multiselect({
31
+ message: "Choose AI clients to configure",
32
+ options: [
33
+ { value: "all", label: "All supported clients", hint: "Codex, Claude Code, Cursor, VS Code/Copilot, Cline" },
34
+ { value: "codex", label: "Codex", hint: "MCP + all Desic skills" },
35
+ { value: "claude-code", label: "Claude Code", hint: "MCP + all Desic skills" },
36
+ { value: "cursor", label: "Cursor", hint: "MCP" },
37
+ { value: "vscode", label: "VS Code / GitHub Copilot", hint: "MCP" },
38
+ { value: "cline", label: "Cline", hint: "MCP" }
39
+ ],
40
+ required: true
41
+ });
42
+ if (prompts.isCancel(selection)) {
43
+ prompts.cancel("Setup cancelled");
44
+ throw new SetupCancelledError();
45
+ }
46
+ return parseSetupTargets(selection.join(","));
47
+ }
48
+ export class SetupCancelledError extends Error {
49
+ constructor() {
50
+ super("Setup cancelled");
51
+ }
52
+ }
53
+ export function setupTargets(targets, options = {}) {
54
+ const homeDir = options.homeDir ?? os.homedir();
55
+ const skillSourceDir = options.skillSourceDir ?? defaultSkillSourceDir();
56
+ const runCommand = options.runCommand ?? runExternalCommand;
57
+ return targets.map((target) => setupTarget(target, homeDir, skillSourceDir, runCommand));
58
+ }
59
+ function setupTarget(target, homeDir, skillSourceDir, runCommand) {
60
+ const details = [];
61
+ let mcp;
62
+ let skills = "not-supported";
63
+ try {
64
+ switch (target) {
65
+ case "codex":
66
+ mcp = configureCommandTarget("codex", ["mcp", "add", SERVER_NAME, "--", SERVER_CONFIG.command, ...SERVER_CONFIG.args], runCommand, details);
67
+ skills = configureSkills(skillSourceDir, skillDirectory("codex", homeDir), details);
68
+ break;
69
+ case "claude-code":
70
+ mcp = configureCommandTarget("claude", ["mcp", "add", "--transport", "stdio", "--scope", "user", SERVER_NAME, "--", SERVER_CONFIG.command, ...SERVER_CONFIG.args], runCommand, details);
71
+ skills = configureSkills(skillSourceDir, skillDirectory("claude-code", homeDir), details);
72
+ break;
73
+ case "cursor":
74
+ mcp = mergeMcpConfig(path.join(homeDir, ".cursor", "mcp.json"), details);
75
+ break;
76
+ case "vscode":
77
+ mcp = configureCommandTarget("code", ["--add-mcp", JSON.stringify({ name: SERVER_NAME, type: "stdio", ...SERVER_CONFIG })], runCommand, details);
78
+ break;
79
+ case "cline":
80
+ mcp = mergeMcpConfig(path.join(homeDir, ".cline", "data", "settings", "mcp.json"), details);
81
+ break;
82
+ }
83
+ }
84
+ catch (error) {
85
+ mcp = "failed";
86
+ details.push(error instanceof Error ? error.message : "Setup failed");
87
+ }
88
+ return { target, mcp, skills, details };
89
+ }
90
+ function configureCommandTarget(command, args, runCommand, details) {
91
+ const result = runCommand(command, args);
92
+ if (result.ok) {
93
+ details.push(`MCP configured with ${command}`);
94
+ return "configured";
95
+ }
96
+ details.push(result.message ?? `Could not configure MCP with ${command}`);
97
+ return "failed";
98
+ }
99
+ export function mergeMcpConfig(configPath, details) {
100
+ const config = readMcpConfig(configPath);
101
+ const servers = config.mcpServers ?? {};
102
+ if (SERVER_NAME in servers) {
103
+ details.push(`MCP already exists in ${configPath}`);
104
+ return "existing";
105
+ }
106
+ config.mcpServers = { ...servers, [SERVER_NAME]: SERVER_CONFIG };
107
+ writeJson(configPath, config);
108
+ details.push(`MCP configured in ${configPath}`);
109
+ return "configured";
110
+ }
111
+ function readMcpConfig(configPath) {
112
+ if (!fs.existsSync(configPath))
113
+ return {};
114
+ let value;
115
+ try {
116
+ value = JSON.parse(fs.readFileSync(configPath, "utf8"));
117
+ }
118
+ catch {
119
+ throw new Error(`Cannot safely update ${configPath}: it is not valid JSON`);
120
+ }
121
+ if (!isRecord(value))
122
+ throw new Error(`Cannot safely update ${configPath}: expected a JSON object`);
123
+ if (value.mcpServers !== undefined && !isRecord(value.mcpServers)) {
124
+ throw new Error(`Cannot safely update ${configPath}: mcpServers must be an object`);
125
+ }
126
+ return value;
127
+ }
128
+ function writeJson(targetPath, value) {
129
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true, mode: 0o700 });
130
+ const temporary = `${targetPath}.${process.pid}.${Date.now()}.tmp`;
131
+ fs.writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
132
+ fs.renameSync(temporary, targetPath);
133
+ }
134
+ function installSkills(sourceDir, destinationDir, details) {
135
+ if (!fs.existsSync(sourceDir)) {
136
+ details.push(`Skills are unavailable at ${sourceDir}`);
137
+ return "failed";
138
+ }
139
+ fs.mkdirSync(destinationDir, { recursive: true, mode: 0o700 });
140
+ const skills = fs.readdirSync(sourceDir, { withFileTypes: true })
141
+ .filter((entry) => entry.isDirectory() && fs.existsSync(path.join(sourceDir, entry.name, "SKILL.md")))
142
+ .map((entry) => entry.name)
143
+ .sort();
144
+ let installed = 0;
145
+ let existing = 0;
146
+ for (const skill of skills) {
147
+ const destination = path.join(destinationDir, skill);
148
+ if (fs.existsSync(destination)) {
149
+ existing += 1;
150
+ continue;
151
+ }
152
+ fs.cpSync(path.join(sourceDir, skill), destination, { recursive: true, force: false });
153
+ installed += 1;
154
+ }
155
+ details.push(`Skills: ${installed} installed, ${existing} kept in ${destinationDir}`);
156
+ return installed === 0 ? "existing" : "configured";
157
+ }
158
+ function configureSkills(sourceDir, destinationDir, details) {
159
+ try {
160
+ return installSkills(sourceDir, destinationDir, details);
161
+ }
162
+ catch (error) {
163
+ details.push(error instanceof Error ? error.message : "Could not install skills");
164
+ return "failed";
165
+ }
166
+ }
167
+ function skillDirectory(target, homeDir) {
168
+ if (target === "codex")
169
+ return path.join(process.env.CODEX_HOME?.trim() || path.join(homeDir, ".codex"), "skills");
170
+ return path.join(homeDir, ".claude", "skills");
171
+ }
172
+ function defaultSkillSourceDir() {
173
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../skills");
174
+ }
175
+ function runExternalCommand(command, args) {
176
+ const executable = resolveExecutable(command);
177
+ const result = spawnSync(executable, args, { encoding: "utf8", windowsHide: true });
178
+ if (result.error)
179
+ return { ok: false, message: `${command} is unavailable: ${result.error.message}` };
180
+ if (result.status !== 0)
181
+ return { ok: false, message: `${command} did not accept the MCP configuration` };
182
+ return { ok: true };
183
+ }
184
+ function resolveExecutable(command) {
185
+ if (process.platform !== "win32")
186
+ return command;
187
+ const lookup = spawnSync("where.exe", [command], { encoding: "utf8", windowsHide: true });
188
+ if (lookup.status !== 0 || !lookup.stdout)
189
+ return command;
190
+ return lookup.stdout.split(/\r?\n/).map((item) => item.trim()).find(Boolean) ?? command;
191
+ }
192
+ function isRecord(value) {
193
+ return typeof value === "object" && value !== null && !Array.isArray(value);
194
+ }
195
+ export function setupSucceeded(results) {
196
+ return results.every((result) => result.mcp !== "failed" && result.skills !== "failed");
197
+ }
198
+ export function setupSummary(results) {
199
+ return results.map((result) => `${TARGET_LABELS[result.target]}: MCP ${result.mcp}, skills ${result.skills}`).join("\n");
200
+ }
201
+ export function showSetupResult(results) {
202
+ prompts.note(setupSummary(results), "Setup result");
203
+ if (setupSucceeded(results))
204
+ prompts.outro("Setup complete. Restart the selected AI clients.");
205
+ else
206
+ prompts.outro("Setup finished with errors. Review the failed targets above.");
207
+ }
208
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/setup/installer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "desic-okx-agent",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Independent Desic runtime, MCP server, CLI, and agent skills for OKX",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -50,6 +50,7 @@
50
50
  "prepack": "npm run check"
51
51
  },
52
52
  "dependencies": {
53
+ "@clack/prompts": "^1.7.0",
53
54
  "@modelcontextprotocol/sdk": "^1.30.0",
54
55
  "better-sqlite3": "^13.0.2",
55
56
  "commander": "^15.0.0",