desic-okx-agent 0.1.8 → 0.2.0
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 +48 -5
- package/dist/account/private-websocket.d.ts +1 -0
- package/dist/account/private-websocket.js +27 -2
- package/dist/account/private-websocket.js.map +1 -1
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +133 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.js +190 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/prompts.d.ts +1 -0
- package/dist/cli/prompts.js +6 -0
- package/dist/cli/prompts.js.map +1 -1
- package/dist/cli/render.d.ts +8 -0
- package/dist/cli/render.js +73 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/market/store.d.ts +1 -0
- package/dist/market/store.js +24 -0
- package/dist/market/store.js.map +1 -1
- package/dist/market/websocket.d.ts +1 -0
- package/dist/market/websocket.js +13 -0
- package/dist/market/websocket.js.map +1 -1
- package/dist/network/connectivity.d.ts +3 -0
- package/dist/network/connectivity.js +34 -14
- package/dist/network/connectivity.js.map +1 -1
- package/dist/network/proxy.js +3 -0
- package/dist/network/proxy.js.map +1 -1
- package/dist/runtime/client.d.ts +1 -0
- package/dist/runtime/client.js +46 -2
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/server.js +21 -2
- package/dist/runtime/server.js.map +1 -1
- package/dist/setup/installer.d.ts +21 -0
- package/dist/setup/installer.js +113 -27
- package/dist/setup/installer.js.map +1 -1
- package/dist/setup/wizard.js +10 -4
- package/dist/setup/wizard.js.map +1 -1
- package/dist/storage/database.d.ts +2 -0
- package/dist/storage/database.js +23 -0
- package/dist/storage/database.js.map +1 -1
- package/dist/tools/catalog.js +1 -1
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/help.d.ts +10 -0
- package/dist/tools/help.js +79 -0
- package/dist/tools/help.js.map +1 -0
- package/dist/update/service.d.ts +10 -0
- package/dist/update/service.js +104 -0
- package/dist/update/service.js.map +1 -0
- package/package.json +1 -1
- package/skills/okx-news-intelligence/SKILL.md +2 -0
- package/skills/okx-smart-money-analysis/SKILL.md +2 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolByName } from "./catalog.js";
|
|
3
|
+
export function getToolHelp(name) {
|
|
4
|
+
const definition = toolByName(name);
|
|
5
|
+
if (!definition)
|
|
6
|
+
return undefined;
|
|
7
|
+
return {
|
|
8
|
+
name: definition.name,
|
|
9
|
+
description: definition.description,
|
|
10
|
+
accountRequirement: accountRequirement(name),
|
|
11
|
+
inputSchema: z.toJSONSchema(definition.schema),
|
|
12
|
+
example: toolExample(name)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function toolExample(name) {
|
|
16
|
+
const exact = EXAMPLES[name];
|
|
17
|
+
if (exact)
|
|
18
|
+
return structuredClone(exact);
|
|
19
|
+
if (name.startsWith("market_"))
|
|
20
|
+
return { instId: "BTC-USDT-SWAP" };
|
|
21
|
+
if (name.startsWith("derivatives_"))
|
|
22
|
+
return { instId: "BTC-USDT-SWAP", period: "5m", limit: 50 };
|
|
23
|
+
if (name.startsWith("news_"))
|
|
24
|
+
return { account: "default", limit: 20 };
|
|
25
|
+
if (name.startsWith("smart_money_"))
|
|
26
|
+
return { account: "default", period: "7", limit: 20 };
|
|
27
|
+
if (name.startsWith("account_"))
|
|
28
|
+
return { account: "default" };
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
function accountRequirement(name) {
|
|
32
|
+
if (name.startsWith("news_") || name.startsWith("smart_money_"))
|
|
33
|
+
return "live-read-only";
|
|
34
|
+
if (name.startsWith("account_") || name.startsWith("trade_precheck_"))
|
|
35
|
+
return "account-read";
|
|
36
|
+
if (name.startsWith("trade_") && name !== "trade_evaluate_plan")
|
|
37
|
+
return "account-trade";
|
|
38
|
+
return "none";
|
|
39
|
+
}
|
|
40
|
+
const EXAMPLES = {
|
|
41
|
+
market_get_candles: { instId: "BTC-USDT-SWAP", bar: "5m", limit: 100 },
|
|
42
|
+
market_get_indicators: { instId: "BTC-USDT-SWAP", bar: "5m", limit: 200 },
|
|
43
|
+
market_get_decision_snapshot: { instId: "BTC-USDT-SWAP", bar: "1m", limit: 100 },
|
|
44
|
+
market_scan_watchlist: { instIds: ["BTC-USDT-SWAP", "ETH-USDT-SWAP"], bar: "5m" },
|
|
45
|
+
news_search: { account: "default", keyword: "Bitcoin ETF", coins: ["BTC"], limit: 20 },
|
|
46
|
+
news_read_detail: { account: "default", id: "NEWS_ITEM_ID" },
|
|
47
|
+
news_read_coin_sentiment: { account: "default", coins: ["BTC", "ETH"], period: "24h" },
|
|
48
|
+
news_read_coin_sentiment_trend: { account: "default", coins: ["BTC"], period: "1h", limit: 24 },
|
|
49
|
+
news_read_market_reaction: { id: "LOCAL_EVENT_ID", instId: "BTC-USDT-SWAP", bar: "5m", limit: 100 },
|
|
50
|
+
smart_money_search_trader: { account: "default", keyword: "TRADER_NAME" },
|
|
51
|
+
smart_money_read_positions: { account: "default", authorId: "TRADER_ID" },
|
|
52
|
+
account_get_positions: { account: "default", instId: "BTC-USDT-SWAP" },
|
|
53
|
+
account_get_order: { account: "default", instId: "BTC-USDT-SWAP", ordId: "ORDER_ID" },
|
|
54
|
+
account_get_order_history: { account: "default", instType: "SWAP", limit: 50 },
|
|
55
|
+
trade_evaluate_plan: { instId: "BTC-USDT-SWAP", side: "buy", size: "1", leverage: "3", stopLossPrice: "90000" },
|
|
56
|
+
trade_precheck_order: ordinaryOrder("precheck-btc-001"),
|
|
57
|
+
trade_place_order: ordinaryOrder("place-btc-001"),
|
|
58
|
+
trade_place_batch_orders: {
|
|
59
|
+
account: "default", executionKey: "batch-btc-001",
|
|
60
|
+
orders: [{ instId: "BTC-USDT-SWAP", tdMode: "cross", side: "buy", ordType: "limit", size: "1", price: "90000" }]
|
|
61
|
+
},
|
|
62
|
+
trade_set_leverage: { account: "default", executionKey: "leverage-btc-001", instId: "BTC-USDT-SWAP", lever: "3", mgnMode: "cross" },
|
|
63
|
+
trade_amend_order: { account: "default", executionKey: "amend-btc-001", instId: "BTC-USDT-SWAP", ordId: "ORDER_ID", newPrice: "90500" },
|
|
64
|
+
trade_cancel_order: { account: "default", executionKey: "cancel-btc-001", instId: "BTC-USDT-SWAP", ordId: "ORDER_ID" },
|
|
65
|
+
trade_precheck_algo_order: algoOrder("precheck-algo-btc-001"),
|
|
66
|
+
trade_place_algo_order: algoOrder("place-algo-btc-001"),
|
|
67
|
+
trade_amend_algo_order: { account: "default", executionKey: "amend-algo-btc-001", instId: "BTC-USDT-SWAP", algoId: "ALGO_ID", newTriggerPrice: "88000" },
|
|
68
|
+
trade_cancel_algo_order: { account: "default", executionKey: "cancel-algo-btc-001", instId: "BTC-USDT-SWAP", algoId: "ALGO_ID" },
|
|
69
|
+
trade_close_position: { account: "default", executionKey: "close-btc-001", instId: "BTC-USDT-SWAP", mgnMode: "cross", posSide: "net" },
|
|
70
|
+
trade_cancel_instrument_orders: { account: "default", executionKey: "cancel-all-btc-001", instId: "BTC-USDT-SWAP" },
|
|
71
|
+
trade_close_instrument_positions: { account: "default", executionKey: "close-all-btc-001", instId: "BTC-USDT-SWAP" }
|
|
72
|
+
};
|
|
73
|
+
function ordinaryOrder(executionKey) {
|
|
74
|
+
return { account: "default", executionKey, instId: "BTC-USDT-SWAP", tdMode: "cross", side: "buy", ordType: "limit", size: "1", price: "90000" };
|
|
75
|
+
}
|
|
76
|
+
function algoOrder(executionKey) {
|
|
77
|
+
return { account: "default", executionKey, instId: "BTC-USDT-SWAP", tdMode: "cross", side: "sell", ordType: "trigger", size: "1", triggerPrice: "88000", orderPrice: "-1", reduceOnly: true };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/tools/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const OFFICIAL_NPM_REGISTRY = "https://registry.npmjs.org";
|
|
2
|
+
export interface UpdateInfo {
|
|
3
|
+
current: string;
|
|
4
|
+
latest: string;
|
|
5
|
+
updateAvailable: boolean;
|
|
6
|
+
registry: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function checkForUpdate(registry?: string, configuredProxy?: string): Promise<UpdateInfo>;
|
|
9
|
+
export declare function installLatestVersion(info: UpdateInfo): Promise<number>;
|
|
10
|
+
export declare function runInstalledCommand(args: string[]): Promise<number>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { ProxyAgent } from "undici";
|
|
3
|
+
import { PACKAGE_VERSION } from "../core/version.js";
|
|
4
|
+
import { resolveProxy } from "../network/proxy.js";
|
|
5
|
+
import { RuntimeClient } from "../runtime/client.js";
|
|
6
|
+
import { isProcessRunning, readRuntimeState } from "../runtime/state.js";
|
|
7
|
+
export const OFFICIAL_NPM_REGISTRY = "https://registry.npmjs.org";
|
|
8
|
+
export async function checkForUpdate(registry = OFFICIAL_NPM_REGISTRY, configuredProxy) {
|
|
9
|
+
const proxy = resolveProxy(configuredProxy);
|
|
10
|
+
const dispatcher = proxy.url ? new ProxyAgent(proxy.url) : undefined;
|
|
11
|
+
try {
|
|
12
|
+
const base = registry.replace(/\/$/, "");
|
|
13
|
+
const response = await fetch(`${base}/desic-okx-agent/latest`, {
|
|
14
|
+
signal: AbortSignal.timeout(10_000),
|
|
15
|
+
...(dispatcher ? { dispatcher } : {})
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok)
|
|
18
|
+
throw new Error(`npm registry returned HTTP ${response.status}`);
|
|
19
|
+
const data = await response.json();
|
|
20
|
+
if (!data.version)
|
|
21
|
+
throw new Error("npm registry did not return a package version");
|
|
22
|
+
return {
|
|
23
|
+
current: PACKAGE_VERSION,
|
|
24
|
+
latest: data.version,
|
|
25
|
+
updateAvailable: compareVersions(data.version, PACKAGE_VERSION) > 0,
|
|
26
|
+
registry: base
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await dispatcher?.close();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function installLatestVersion(info) {
|
|
34
|
+
await stopRuntimeForUpdate();
|
|
35
|
+
const command = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
36
|
+
const args = ["install", "--global", `desic-okx-agent@${info.latest}`, `--registry=${info.registry}`];
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
const child = spawn(command, args, {
|
|
39
|
+
stdio: "inherit",
|
|
40
|
+
windowsHide: false,
|
|
41
|
+
shell: process.platform === "win32"
|
|
42
|
+
});
|
|
43
|
+
child.once("error", reject);
|
|
44
|
+
child.once("exit", (code) => resolve(code ?? 1));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export async function runInstalledCommand(args) {
|
|
48
|
+
const command = process.platform === "win32" ? "desic-okx.cmd" : "desic-okx";
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const child = spawn(command, args, {
|
|
51
|
+
stdio: "inherit",
|
|
52
|
+
windowsHide: false,
|
|
53
|
+
shell: process.platform === "win32"
|
|
54
|
+
});
|
|
55
|
+
child.once("error", reject);
|
|
56
|
+
child.once("exit", (code) => resolve(code ?? 1));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function stopRuntimeForUpdate() {
|
|
60
|
+
const state = readRuntimeState();
|
|
61
|
+
if (!state)
|
|
62
|
+
return;
|
|
63
|
+
let pid = state.pid;
|
|
64
|
+
let stopRequested = false;
|
|
65
|
+
try {
|
|
66
|
+
const client = await RuntimeClient.connect({ start: false });
|
|
67
|
+
const health = await client.health();
|
|
68
|
+
pid = Number(health.pid);
|
|
69
|
+
await client.stop();
|
|
70
|
+
stopRequested = true;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (isProcessRunning(pid))
|
|
74
|
+
throw new Error(`Runtime PID ${pid} is running but could not be contacted safely: ${error instanceof Error ? error.message : "unknown error"}`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
await waitForProcess(pid, 5_000);
|
|
78
|
+
if (stopRequested && isProcessRunning(pid)) {
|
|
79
|
+
try {
|
|
80
|
+
process.kill(pid, "SIGTERM");
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
await waitForProcess(pid, 2_000);
|
|
84
|
+
}
|
|
85
|
+
if (isProcessRunning(pid))
|
|
86
|
+
throw new Error(`Runtime PID ${pid} did not stop`);
|
|
87
|
+
}
|
|
88
|
+
async function waitForProcess(pid, timeoutMs) {
|
|
89
|
+
const deadline = Date.now() + timeoutMs;
|
|
90
|
+
while (Number.isInteger(pid) && isProcessRunning(pid) && Date.now() < deadline) {
|
|
91
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function compareVersions(left, right) {
|
|
95
|
+
const parse = (value) => value.split(".").map((part) => Number.parseInt(part, 10) || 0);
|
|
96
|
+
const a = parse(left);
|
|
97
|
+
const b = parse(right);
|
|
98
|
+
for (let index = 0; index < Math.max(a.length, b.length); index += 1) {
|
|
99
|
+
if ((a[index] ?? 0) !== (b[index] ?? 0))
|
|
100
|
+
return (a[index] ?? 0) > (b[index] ?? 0) ? 1 : -1;
|
|
101
|
+
}
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/update/service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,6 +5,8 @@ description: Research OKX news, sources, coin sentiment, economic events, cluste
|
|
|
5
5
|
|
|
6
6
|
# OKX News Intelligence
|
|
7
7
|
|
|
8
|
+
Remote News, source, sentiment, calendar, and briefing tools require a configured live OKX account. Read-only API permission is sufficient. Local event and history tools can use previously persisted data when available.
|
|
9
|
+
|
|
8
10
|
1. Use `news_search` for a targeted question and `news_list` for current coverage.
|
|
9
11
|
2. Read details when a headline is material; record source, publication time, language, and freshness.
|
|
10
12
|
3. Use sentiment trends and rankings as aggregated observations, not as factual confirmation of an event.
|
|
@@ -5,6 +5,8 @@ description: Analyze OKX public trader rankings, performance, positions, histori
|
|
|
5
5
|
|
|
6
6
|
# OKX Smart Money Analysis
|
|
7
7
|
|
|
8
|
+
Remote Smart Money tools require a configured live OKX account. Read-only API permission is sufficient. Local history is available only after data has previously been persisted.
|
|
9
|
+
|
|
8
10
|
1. Define the period, sort field, filters, and sample size before comparing traders.
|
|
9
11
|
2. Use performance to shortlist; inspect current positions and history before interpreting behavior.
|
|
10
12
|
3. Separate current positions, closed-position history, public order history, signal overview, and signal trend.
|