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 +50 -14
- package/dist/cli/index.js +29 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/setup/installer.d.ts +29 -0
- package/dist/setup/installer.js +208 -0
- package/dist/setup/installer.js.map +1 -0
- package/package.json +2 -1
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
|
|
28
|
+
## Install
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Install the published package:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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 });
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
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.
|
|
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",
|