desic-okx-agent 0.1.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/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/account/private-websocket.d.ts +13 -0
- package/dist/account/private-websocket.js +102 -0
- package/dist/account/private-websocket.js.map +1 -0
- package/dist/account/service.d.ts +22 -0
- package/dist/account/service.js +118 -0
- package/dist/account/service.js.map +1 -0
- package/dist/account/store.d.ts +12 -0
- package/dist/account/store.js +48 -0
- package/dist/account/store.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +122 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +2 -0
- package/dist/cli/prompts.js +52 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.js +87 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +7 -0
- package/dist/config/paths.js +11 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +42 -0
- package/dist/config/schema.js +30 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/attribution.d.ts +2 -0
- package/dist/core/attribution.js +29 -0
- package/dist/core/attribution.js.map +1 -0
- package/dist/core/errors.d.ts +9 -0
- package/dist/core/errors.js +33 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/okx-client.d.ts +13 -0
- package/dist/core/okx-client.js +102 -0
- package/dist/core/okx-client.js.map +1 -0
- package/dist/core/sanitize.d.ts +2 -0
- package/dist/core/sanitize.js +19 -0
- package/dist/core/sanitize.js.map +1 -0
- package/dist/core/types.d.ts +38 -0
- package/dist/core/types.js +18 -0
- package/dist/core/types.js.map +1 -0
- package/dist/derivatives/service.d.ts +28 -0
- package/dist/derivatives/service.js +144 -0
- package/dist/derivatives/service.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/service.d.ts +38 -0
- package/dist/intelligence/service.js +324 -0
- package/dist/intelligence/service.js.map +1 -0
- package/dist/market/indicators.d.ts +2 -0
- package/dist/market/indicators.js +74 -0
- package/dist/market/indicators.js.map +1 -0
- package/dist/market/service.d.ts +28 -0
- package/dist/market/service.js +232 -0
- package/dist/market/service.js.map +1 -0
- package/dist/market/store.d.ts +46 -0
- package/dist/market/store.js +158 -0
- package/dist/market/store.js.map +1 -0
- package/dist/market/websocket.d.ts +33 -0
- package/dist/market/websocket.js +213 -0
- package/dist/market/websocket.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +28 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/runtime/client.d.ts +15 -0
- package/dist/runtime/client.js +106 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/server.d.ts +28 -0
- package/dist/runtime/server.js +140 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/runtime/state.d.ts +14 -0
- package/dist/runtime/state.js +98 -0
- package/dist/runtime/state.js.map +1 -0
- package/dist/storage/database.d.ts +23 -0
- package/dist/storage/database.js +106 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/tools/catalog.d.ts +21 -0
- package/dist/tools/catalog.js +236 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/trade/service.d.ts +128 -0
- package/dist/trade/service.js +470 -0
- package/dist/trade/service.js.map +1 -0
- package/examples/claude-code/mcp.json +8 -0
- package/examples/codex/config.toml +3 -0
- package/examples/config.example.json +18 -0
- package/package.json +71 -0
- package/skills/okx-account-analysis/SKILL.md +14 -0
- package/skills/okx-account-analysis/agents/openai.yaml +9 -0
- package/skills/okx-derivatives-analysis/SKILL.md +14 -0
- package/skills/okx-derivatives-analysis/agents/openai.yaml +9 -0
- package/skills/okx-market-analysis/SKILL.md +14 -0
- package/skills/okx-market-analysis/agents/openai.yaml +9 -0
- package/skills/okx-news-intelligence/SKILL.md +14 -0
- package/skills/okx-news-intelligence/agents/openai.yaml +9 -0
- package/skills/okx-smart-money-analysis/SKILL.md +15 -0
- package/skills/okx-smart-money-analysis/agents/openai.yaml +9 -0
- package/skills/okx-trading/SKILL.md +16 -0
- package/skills/okx-trading/agents/openai.yaml +9 -0
- package/skills/trading-philosophy/SKILL.md +14 -0
- package/skills/trading-philosophy/agents/openai.yaml +4 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { RUNTIME_DIR, RUNTIME_LOCK_PATH, RUNTIME_STATE_PATH } from "../config/paths.js";
|
|
4
|
+
const LIFECYCLE_LOG_PATH = path.join(RUNTIME_DIR, "lifecycle.log");
|
|
5
|
+
export function readRuntimeState() {
|
|
6
|
+
try {
|
|
7
|
+
const value = JSON.parse(fs.readFileSync(RUNTIME_STATE_PATH, "utf8"));
|
|
8
|
+
if (!value.pid || !value.port || !value.token || !value.instanceId)
|
|
9
|
+
return undefined;
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function writeRuntimeState(state) {
|
|
17
|
+
fs.mkdirSync(RUNTIME_DIR, { recursive: true, mode: 0o700 });
|
|
18
|
+
const temporary = `${RUNTIME_STATE_PATH}.${process.pid}.tmp`;
|
|
19
|
+
fs.writeFileSync(temporary, `${JSON.stringify(state)}\n`, { mode: 0o600 });
|
|
20
|
+
fs.chmodSync(temporary, 0o600);
|
|
21
|
+
fs.renameSync(temporary, RUNTIME_STATE_PATH);
|
|
22
|
+
fs.chmodSync(RUNTIME_STATE_PATH, 0o600);
|
|
23
|
+
appendRuntimeLifecycle("state-written", { instanceId: state.instanceId, port: state.port });
|
|
24
|
+
}
|
|
25
|
+
export function acquireRuntimeLock() {
|
|
26
|
+
fs.mkdirSync(path.dirname(RUNTIME_LOCK_PATH), { recursive: true, mode: 0o700 });
|
|
27
|
+
fs.chmodSync(path.dirname(RUNTIME_LOCK_PATH), 0o700);
|
|
28
|
+
try {
|
|
29
|
+
const descriptor = fs.openSync(RUNTIME_LOCK_PATH, "wx", 0o600);
|
|
30
|
+
fs.writeFileSync(descriptor, String(process.pid));
|
|
31
|
+
appendRuntimeLifecycle("lock-acquired");
|
|
32
|
+
return descriptor;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const state = readRuntimeState();
|
|
36
|
+
if (state && isProcessRunning(state.pid))
|
|
37
|
+
throw new Error(`Runtime is already running with PID ${state.pid}`);
|
|
38
|
+
const lockPid = Number(readText(RUNTIME_LOCK_PATH));
|
|
39
|
+
if (Number.isInteger(lockPid) && isProcessRunning(lockPid))
|
|
40
|
+
throw new Error(`Runtime is starting with PID ${lockPid}`);
|
|
41
|
+
try {
|
|
42
|
+
const stat = fs.statSync(RUNTIME_LOCK_PATH);
|
|
43
|
+
if (Date.now() - stat.mtimeMs < 10_000)
|
|
44
|
+
throw error;
|
|
45
|
+
fs.unlinkSync(RUNTIME_LOCK_PATH);
|
|
46
|
+
return acquireRuntimeLock();
|
|
47
|
+
}
|
|
48
|
+
catch (nested) {
|
|
49
|
+
if (nested === error)
|
|
50
|
+
throw error;
|
|
51
|
+
throw nested;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function releaseRuntimeFiles(lockDescriptor, instanceId) {
|
|
56
|
+
appendRuntimeLifecycle("state-release", { instanceId });
|
|
57
|
+
try {
|
|
58
|
+
const current = readRuntimeState();
|
|
59
|
+
if (current?.instanceId === instanceId)
|
|
60
|
+
fs.unlinkSync(RUNTIME_STATE_PATH);
|
|
61
|
+
}
|
|
62
|
+
catch { }
|
|
63
|
+
try {
|
|
64
|
+
fs.closeSync(lockDescriptor);
|
|
65
|
+
}
|
|
66
|
+
catch { }
|
|
67
|
+
try {
|
|
68
|
+
if (Number(readText(RUNTIME_LOCK_PATH)) === process.pid)
|
|
69
|
+
fs.unlinkSync(RUNTIME_LOCK_PATH);
|
|
70
|
+
}
|
|
71
|
+
catch { }
|
|
72
|
+
}
|
|
73
|
+
export function appendRuntimeLifecycle(event, details = {}) {
|
|
74
|
+
try {
|
|
75
|
+
fs.mkdirSync(RUNTIME_DIR, { recursive: true, mode: 0o700 });
|
|
76
|
+
fs.appendFileSync(LIFECYCLE_LOG_PATH, `${JSON.stringify({ ts: Date.now(), pid: process.pid, event, ...details })}\n`, { mode: 0o600 });
|
|
77
|
+
fs.chmodSync(LIFECYCLE_LOG_PATH, 0o600);
|
|
78
|
+
}
|
|
79
|
+
catch { }
|
|
80
|
+
}
|
|
81
|
+
export function isProcessRunning(pid) {
|
|
82
|
+
try {
|
|
83
|
+
process.kill(pid, 0);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function readText(file) {
|
|
91
|
+
try {
|
|
92
|
+
return fs.readFileSync(file, "utf8").trim();
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return "";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/runtime/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
export interface ExecutionRecord {
|
|
3
|
+
executionKey: string;
|
|
4
|
+
operation: string;
|
|
5
|
+
requestHash: string;
|
|
6
|
+
status: string;
|
|
7
|
+
response: unknown;
|
|
8
|
+
updatedAt: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class RuntimeDatabase {
|
|
11
|
+
readonly db: Database.Database;
|
|
12
|
+
constructor(databasePath?: string);
|
|
13
|
+
close(): void;
|
|
14
|
+
saveCandles(instId: string, bar: string, candles: unknown[]): void;
|
|
15
|
+
loadCandles(instId: string, bar: string, limit?: number): unknown[];
|
|
16
|
+
upsertIntelligence(kind: string, id: string, ts: number, data: unknown): void;
|
|
17
|
+
queryIntelligence(kind: string, limit?: number, since?: number): unknown[];
|
|
18
|
+
getExecution(executionKey: string): ExecutionRecord | undefined;
|
|
19
|
+
beginExecution(executionKey: string, operation: string, requestHash: string): ExecutionRecord | undefined;
|
|
20
|
+
finishExecution(executionKey: string, status: string, response: unknown): void;
|
|
21
|
+
retainIntelligence(days: number): void;
|
|
22
|
+
private migrate;
|
|
23
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import Database from "better-sqlite3";
|
|
4
|
+
import { DATABASE_PATH } from "../config/paths.js";
|
|
5
|
+
export class RuntimeDatabase {
|
|
6
|
+
db;
|
|
7
|
+
constructor(databasePath = DATABASE_PATH) {
|
|
8
|
+
fs.mkdirSync(path.dirname(databasePath), { recursive: true, mode: 0o700 });
|
|
9
|
+
this.db = new Database(databasePath);
|
|
10
|
+
this.db.pragma("journal_mode = WAL");
|
|
11
|
+
this.db.pragma("synchronous = NORMAL");
|
|
12
|
+
this.migrate();
|
|
13
|
+
}
|
|
14
|
+
close() {
|
|
15
|
+
this.db.close();
|
|
16
|
+
}
|
|
17
|
+
saveCandles(instId, bar, candles) {
|
|
18
|
+
setImmediate(() => {
|
|
19
|
+
if (!this.db.open)
|
|
20
|
+
return;
|
|
21
|
+
const statement = this.db.prepare("INSERT INTO candles(inst_id,bar,ts,data_json) VALUES(?,?,?,?) ON CONFLICT(inst_id,bar,ts) DO UPDATE SET data_json=excluded.data_json");
|
|
22
|
+
const transaction = this.db.transaction((items) => {
|
|
23
|
+
for (const candle of items) {
|
|
24
|
+
const values = Array.isArray(candle) ? candle : [];
|
|
25
|
+
const ts = Number(values[0]);
|
|
26
|
+
if (Number.isFinite(ts))
|
|
27
|
+
statement.run(instId, bar, ts, JSON.stringify(candle));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
transaction(candles);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
loadCandles(instId, bar, limit = 300) {
|
|
34
|
+
const rows = this.db
|
|
35
|
+
.prepare("SELECT data_json FROM candles WHERE inst_id=? AND bar=? ORDER BY ts DESC LIMIT ?")
|
|
36
|
+
.all(instId, bar, limit);
|
|
37
|
+
return rows.reverse().map((row) => JSON.parse(row.data_json));
|
|
38
|
+
}
|
|
39
|
+
upsertIntelligence(kind, id, ts, data) {
|
|
40
|
+
setImmediate(() => {
|
|
41
|
+
if (!this.db.open)
|
|
42
|
+
return;
|
|
43
|
+
this.db.prepare("INSERT INTO intelligence(kind,id,ts,data_json) VALUES(?,?,?,?) ON CONFLICT(kind,id) DO UPDATE SET ts=excluded.ts,data_json=excluded.data_json").run(kind, id, ts, JSON.stringify(data));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
queryIntelligence(kind, limit = 100, since = 0) {
|
|
47
|
+
const rows = this.db.prepare("SELECT data_json FROM intelligence WHERE kind=? AND ts>=? ORDER BY ts DESC LIMIT ?").all(kind, since, limit);
|
|
48
|
+
return rows.map((row) => JSON.parse(row.data_json));
|
|
49
|
+
}
|
|
50
|
+
getExecution(executionKey) {
|
|
51
|
+
const row = this.db.prepare("SELECT execution_key,operation,request_hash,status,response_json,updated_at FROM executions WHERE execution_key=?").get(executionKey);
|
|
52
|
+
if (!row)
|
|
53
|
+
return undefined;
|
|
54
|
+
return {
|
|
55
|
+
executionKey: String(row.execution_key),
|
|
56
|
+
operation: String(row.operation),
|
|
57
|
+
requestHash: String(row.request_hash),
|
|
58
|
+
status: String(row.status),
|
|
59
|
+
response: row.response_json ? JSON.parse(String(row.response_json)) : null,
|
|
60
|
+
updatedAt: Number(row.updated_at)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
beginExecution(executionKey, operation, requestHash) {
|
|
64
|
+
const existing = this.getExecution(executionKey);
|
|
65
|
+
if (existing)
|
|
66
|
+
return existing;
|
|
67
|
+
this.db.prepare("INSERT INTO executions(execution_key,operation,request_hash,status,response_json,updated_at) VALUES(?,?,?,'submitting','null',?)").run(executionKey, operation, requestHash, Date.now());
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
finishExecution(executionKey, status, response) {
|
|
71
|
+
this.db.prepare("UPDATE executions SET status=?,response_json=?,updated_at=? WHERE execution_key=?")
|
|
72
|
+
.run(status, JSON.stringify(response), Date.now(), executionKey);
|
|
73
|
+
}
|
|
74
|
+
retainIntelligence(days) {
|
|
75
|
+
const cutoff = Date.now() - days * 86_400_000;
|
|
76
|
+
this.db.prepare("DELETE FROM intelligence WHERE ts<?").run(cutoff);
|
|
77
|
+
}
|
|
78
|
+
migrate() {
|
|
79
|
+
this.db.exec(`
|
|
80
|
+
CREATE TABLE IF NOT EXISTS candles (
|
|
81
|
+
inst_id TEXT NOT NULL,
|
|
82
|
+
bar TEXT NOT NULL,
|
|
83
|
+
ts INTEGER NOT NULL,
|
|
84
|
+
data_json TEXT NOT NULL,
|
|
85
|
+
PRIMARY KEY(inst_id,bar,ts)
|
|
86
|
+
);
|
|
87
|
+
CREATE TABLE IF NOT EXISTS intelligence (
|
|
88
|
+
kind TEXT NOT NULL,
|
|
89
|
+
id TEXT NOT NULL,
|
|
90
|
+
ts INTEGER NOT NULL,
|
|
91
|
+
data_json TEXT NOT NULL,
|
|
92
|
+
PRIMARY KEY(kind,id)
|
|
93
|
+
);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_intelligence_kind_ts ON intelligence(kind,ts DESC);
|
|
95
|
+
CREATE TABLE IF NOT EXISTS executions (
|
|
96
|
+
execution_key TEXT PRIMARY KEY,
|
|
97
|
+
operation TEXT NOT NULL,
|
|
98
|
+
request_hash TEXT NOT NULL,
|
|
99
|
+
status TEXT NOT NULL,
|
|
100
|
+
response_json TEXT NOT NULL,
|
|
101
|
+
updated_at INTEGER NOT NULL
|
|
102
|
+
);
|
|
103
|
+
`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AccountService } from "../account/service.js";
|
|
3
|
+
import type { DerivativesService } from "../derivatives/service.js";
|
|
4
|
+
import type { IntelligenceService } from "../intelligence/service.js";
|
|
5
|
+
import type { MarketService } from "../market/service.js";
|
|
6
|
+
import type { TradeService } from "../trade/service.js";
|
|
7
|
+
export interface ToolContext {
|
|
8
|
+
market: MarketService;
|
|
9
|
+
account: AccountService;
|
|
10
|
+
derivatives: DerivativesService;
|
|
11
|
+
intelligence: IntelligenceService;
|
|
12
|
+
trade: TradeService;
|
|
13
|
+
}
|
|
14
|
+
export interface ToolDefinition {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
schema: z.ZodObject;
|
|
18
|
+
execute: (context: ToolContext, input: Record<string, unknown>) => Promise<unknown>;
|
|
19
|
+
}
|
|
20
|
+
export declare const TOOL_CATALOG: ToolDefinition[];
|
|
21
|
+
export declare function toolByName(name: string): ToolDefinition | undefined;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const InstId = z.string().min(1).describe("OKX instrument ID, for example BTC-USDT-SWAP");
|
|
3
|
+
const Account = z.string().min(1).optional().describe("Configured account alias; the default account is used when omitted");
|
|
4
|
+
const ExecutionKey = z.string().min(1).max(128).describe("Stable idempotency key chosen by the caller");
|
|
5
|
+
const Limit = z.number().int().positive().optional();
|
|
6
|
+
const Bar = z.string().min(1).optional();
|
|
7
|
+
const InstrumentSchema = z.strictObject({ instId: InstId });
|
|
8
|
+
const MarketListSchema = z.strictObject({ instId: InstId, limit: Limit });
|
|
9
|
+
const CandleSchema = z.strictObject({ instId: InstId, bar: Bar, limit: Limit });
|
|
10
|
+
const WatchlistSchema = z.strictObject({ instIds: z.array(InstId).optional(), bar: Bar });
|
|
11
|
+
const DerivativesSchema = z.strictObject({
|
|
12
|
+
instId: InstId,
|
|
13
|
+
period: z.string().optional(),
|
|
14
|
+
begin: z.number().int().optional(),
|
|
15
|
+
end: z.number().int().optional(),
|
|
16
|
+
limit: Limit
|
|
17
|
+
});
|
|
18
|
+
const AccountOnlySchema = z.strictObject({ account: Account });
|
|
19
|
+
const AccountInstSchema = z.strictObject({ account: Account, instId: InstId.optional(), instType: z.string().optional() });
|
|
20
|
+
const HistorySchema = z.strictObject({
|
|
21
|
+
account: Account,
|
|
22
|
+
instType: z.string().optional(),
|
|
23
|
+
instId: InstId.optional(),
|
|
24
|
+
ordType: z.string().optional(),
|
|
25
|
+
state: z.string().optional(),
|
|
26
|
+
ccy: z.string().optional(),
|
|
27
|
+
type: z.string().optional(),
|
|
28
|
+
subType: z.string().optional(),
|
|
29
|
+
after: z.string().optional(),
|
|
30
|
+
before: z.string().optional(),
|
|
31
|
+
begin: z.number().int().optional(),
|
|
32
|
+
end: z.number().int().optional(),
|
|
33
|
+
limit: Limit,
|
|
34
|
+
archive: z.boolean().optional()
|
|
35
|
+
});
|
|
36
|
+
const IntelligenceSchema = z.strictObject({
|
|
37
|
+
account: Account,
|
|
38
|
+
language: z.string().optional(),
|
|
39
|
+
localOnly: z.boolean().optional(),
|
|
40
|
+
id: z.string().optional(),
|
|
41
|
+
keyword: z.string().optional(),
|
|
42
|
+
coins: z.union([z.string(), z.array(z.string())]).optional(),
|
|
43
|
+
ccy: z.string().optional(),
|
|
44
|
+
importance: z.string().optional(),
|
|
45
|
+
platform: z.string().optional(),
|
|
46
|
+
sentiment: z.string().optional(),
|
|
47
|
+
sortBy: z.string().optional(),
|
|
48
|
+
detailLevel: z.string().optional(),
|
|
49
|
+
period: z.string().optional(),
|
|
50
|
+
region: z.string().optional(),
|
|
51
|
+
instId: z.string().optional(),
|
|
52
|
+
bar: z.string().optional(),
|
|
53
|
+
begin: z.number().int().optional(),
|
|
54
|
+
end: z.number().int().optional(),
|
|
55
|
+
since: z.number().int().optional(),
|
|
56
|
+
after: z.string().optional(),
|
|
57
|
+
limit: Limit,
|
|
58
|
+
newsLimit: Limit,
|
|
59
|
+
threshold: z.number().positive().optional()
|
|
60
|
+
});
|
|
61
|
+
const SmartSchema = z.strictObject({
|
|
62
|
+
account: Account,
|
|
63
|
+
language: z.string().optional(),
|
|
64
|
+
localOnly: z.boolean().optional(),
|
|
65
|
+
keyword: z.string().optional(),
|
|
66
|
+
authorId: z.string().optional(),
|
|
67
|
+
authorIds: z.union([z.string(), z.array(z.string())]).optional(),
|
|
68
|
+
instId: z.string().optional(),
|
|
69
|
+
instCcyList: z.union([z.string(), z.array(z.string())]).optional(),
|
|
70
|
+
sortType: z.string().optional(),
|
|
71
|
+
period: z.string().optional(),
|
|
72
|
+
pnl: z.string().optional(),
|
|
73
|
+
winRatio: z.string().optional(),
|
|
74
|
+
maxRetreat: z.string().optional(),
|
|
75
|
+
asset: z.string().optional(),
|
|
76
|
+
lmtNum: z.number().int().optional(),
|
|
77
|
+
after: z.string().optional(),
|
|
78
|
+
before: z.string().optional(),
|
|
79
|
+
topInstruments: z.number().int().optional(),
|
|
80
|
+
dataVersion: z.string().optional(),
|
|
81
|
+
granularity: z.string().optional(),
|
|
82
|
+
since: z.number().int().optional(),
|
|
83
|
+
limit: Limit
|
|
84
|
+
});
|
|
85
|
+
const EvaluateSchema = z.strictObject({
|
|
86
|
+
instId: InstId,
|
|
87
|
+
side: z.enum(["buy", "sell"]),
|
|
88
|
+
size: z.string().min(1),
|
|
89
|
+
price: z.string().optional(),
|
|
90
|
+
leverage: z.string().optional(),
|
|
91
|
+
stopLossPrice: z.string().optional()
|
|
92
|
+
});
|
|
93
|
+
const PlaceOrderSchema = z.strictObject({
|
|
94
|
+
account: Account,
|
|
95
|
+
executionKey: ExecutionKey,
|
|
96
|
+
instId: InstId,
|
|
97
|
+
tdMode: z.enum(["cash", "cross", "isolated"]),
|
|
98
|
+
side: z.enum(["buy", "sell"]),
|
|
99
|
+
posSide: z.enum(["net", "long", "short"]).optional(),
|
|
100
|
+
ordType: z.enum(["limit", "market", "post_only", "ioc", "fok"]),
|
|
101
|
+
size: z.string().min(1),
|
|
102
|
+
price: z.string().optional(),
|
|
103
|
+
reduceOnly: z.boolean().optional(),
|
|
104
|
+
ccy: z.string().optional(),
|
|
105
|
+
targetCcy: z.enum(["base_ccy", "quote_ccy"]).optional()
|
|
106
|
+
});
|
|
107
|
+
const BatchOrderItemSchema = PlaceOrderSchema.omit({ account: true, executionKey: true });
|
|
108
|
+
const PlaceAlgoSchema = z.strictObject({
|
|
109
|
+
account: Account,
|
|
110
|
+
executionKey: ExecutionKey,
|
|
111
|
+
instId: InstId,
|
|
112
|
+
tdMode: z.enum(["cash", "cross", "isolated"]),
|
|
113
|
+
side: z.enum(["buy", "sell"]),
|
|
114
|
+
posSide: z.enum(["net", "long", "short"]).optional(),
|
|
115
|
+
ordType: z.enum(["trigger", "conditional", "trailing"]),
|
|
116
|
+
size: z.string().min(1),
|
|
117
|
+
triggerPrice: z.string().optional(),
|
|
118
|
+
orderPrice: z.string().optional(),
|
|
119
|
+
triggerPriceType: z.enum(["last", "index", "mark"]).optional(),
|
|
120
|
+
takeProfitTriggerPrice: z.string().optional(),
|
|
121
|
+
takeProfitOrderPrice: z.string().optional(),
|
|
122
|
+
stopLossTriggerPrice: z.string().optional(),
|
|
123
|
+
stopLossOrderPrice: z.string().optional(),
|
|
124
|
+
callbackRatio: z.string().optional(),
|
|
125
|
+
callbackSpread: z.string().optional(),
|
|
126
|
+
activePrice: z.string().optional(),
|
|
127
|
+
reduceOnly: z.boolean().optional()
|
|
128
|
+
});
|
|
129
|
+
export const TOOL_CATALOG = [
|
|
130
|
+
tool("market_get_ticker", "Read the latest ticker from the shared market runtime.", InstrumentSchema, (c, a) => c.market.getTicker(String(a.instId))),
|
|
131
|
+
tool("market_get_instrument", "Read OKX instrument specifications and trading increments.", InstrumentSchema, (c, a) => c.market.getInstrument(String(a.instId))),
|
|
132
|
+
tool("market_get_order_book", "Read the current validated order book.", z.strictObject({ instId: InstId, depth: z.number().int().min(1).max(400).optional() }), (c, a) => c.market.getOrderBook(String(a.instId), numberOr(a.depth, c.market.config.market.orderBookDepth))),
|
|
133
|
+
tool("market_get_recent_trades", "Read recent public trades from the shared runtime.", MarketListSchema, (c, a) => c.market.getRecentTrades(String(a.instId), numberOr(a.limit, 100))),
|
|
134
|
+
tool("market_get_candles", "Read current and closed OKX candles with local history backfill.", CandleSchema, (c, a) => c.market.getCandles(String(a.instId), stringOr(a.bar, "1m"), numberOr(a.limit, 100))),
|
|
135
|
+
tool("market_get_funding_rate", "Read the current perpetual funding rate.", InstrumentSchema, (c, a) => c.market.getFundingRate(String(a.instId))),
|
|
136
|
+
tool("market_get_mark_price", "Read the latest mark price.", InstrumentSchema, (c, a) => c.market.getMarkPrice(String(a.instId))),
|
|
137
|
+
tool("market_get_open_interest", "Read the latest open interest.", InstrumentSchema, (c, a) => c.market.getOpenInterest(String(a.instId))),
|
|
138
|
+
tool("market_get_indicators", "Calculate common indicators from locally cached candles.", CandleSchema, (c, a) => c.market.getIndicators(String(a.instId), stringOr(a.bar, "1m"), numberOr(a.limit, 200))),
|
|
139
|
+
tool("market_get_decision_snapshot", "Read a time-aligned market snapshot for analysis or precheck.", CandleSchema, (c, a) => c.market.getDecisionSnapshot(String(a.instId), stringOr(a.bar, "1m"), numberOr(a.limit, 100))),
|
|
140
|
+
tool("market_scan_watchlist", "Scan configured or supplied instruments with ticker and indicators.", WatchlistSchema, (c, a) => c.market.scanWatchlist(a.instIds, stringOr(a.bar, "5m"))),
|
|
141
|
+
...derivativeTools(),
|
|
142
|
+
...newsTools(),
|
|
143
|
+
...smartTools(),
|
|
144
|
+
tool("account_get_snapshot", "Read balances, positions, orders, and account configuration together.", AccountOnlySchema, (c, a) => c.account.getSnapshot(optionalString(a.account))),
|
|
145
|
+
tool("account_get_balances", "Read OKX account balances.", z.strictObject({ account: Account, ccy: z.string().optional() }), (c, a) => c.account.getBalances(optionalString(a.account), optionalString(a.ccy))),
|
|
146
|
+
tool("account_get_positions", "Read current OKX positions.", AccountInstSchema, (c, a) => c.account.getPositions(optionalString(a.account), optionalString(a.instId))),
|
|
147
|
+
tool("account_get_open_orders", "Read pending ordinary and algo orders.", AccountInstSchema, (c, a) => c.account.getOpenOrders(optionalString(a.account), optionalString(a.instId), optionalString(a.instType))),
|
|
148
|
+
tool("account_get_order", "Read one order by exchange or client order ID.", z.strictObject({ account: Account, instId: InstId, ordId: z.string().optional(), clOrdId: z.string().optional() }), (c, a) => c.account.getOrder(optionalString(a.account), String(a.instId), optionalString(a.ordId), optionalString(a.clOrdId))),
|
|
149
|
+
tool("account_get_order_history", "Read recent or archived order history.", HistorySchema, (c, a) => c.account.getOrderHistory(optionalString(a.account), without(a, "account"))),
|
|
150
|
+
tool("account_get_fills", "Read recent or archived fills.", HistorySchema, (c, a) => c.account.getFills(optionalString(a.account), without(a, "account"))),
|
|
151
|
+
tool("account_get_bills", "Read recent or archived account bills.", HistorySchema, (c, a) => c.account.getBills(optionalString(a.account), without(a, "account"))),
|
|
152
|
+
tool("account_get_risk", "Calculate a generic risk summary from current account facts.", AccountOnlySchema, (c, a) => c.account.getRisk(optionalString(a.account))),
|
|
153
|
+
tool("trade_evaluate_plan", "Calculate contract quantity, notional, margin, and stop risk without writing.", EvaluateSchema, (c, a) => c.trade.evaluatePlan(a)),
|
|
154
|
+
tool("trade_precheck_order", "Validate an ordinary order against instrument, account, and market facts.", PlaceOrderSchema, (c, a) => c.trade.precheck(a)),
|
|
155
|
+
tool("trade_set_leverage", "Set leverage for an OKX instrument and margin mode.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, lever: z.string().min(1), mgnMode: z.enum(["cross", "isolated"]), posSide: z.string().optional() }), (c, a) => c.trade.setLeverage(a)),
|
|
156
|
+
tool("trade_place_order", "Submit an idempotent ordinary OKX order after precheck.", PlaceOrderSchema, (c, a) => c.trade.placeOrder(a)),
|
|
157
|
+
tool("trade_place_batch_orders", "Submit up to twenty prechecked ordinary OKX orders idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, orders: z.array(BatchOrderItemSchema).min(1).max(20) }), (c, a) => c.trade.placeBatchOrders(a)),
|
|
158
|
+
tool("trade_amend_order", "Amend an existing ordinary order idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, ordId: z.string().optional(), clOrdId: z.string().optional(), newSize: z.string().optional(), newPrice: z.string().optional() }), (c, a) => c.trade.amendOrder(a)),
|
|
159
|
+
tool("trade_cancel_order", "Cancel an existing ordinary order idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, ordId: z.string().optional(), clOrdId: z.string().optional() }), (c, a) => c.trade.cancelOrder(a)),
|
|
160
|
+
tool("trade_precheck_algo_order", "Validate an algo order against instrument, account, and market facts.", PlaceAlgoSchema, (c, a) => c.trade.precheckAlgo(a)),
|
|
161
|
+
tool("trade_place_algo_order", "Submit an idempotent prechecked trigger, conditional, or trailing order.", PlaceAlgoSchema, (c, a) => c.trade.placeAlgoOrder(a)),
|
|
162
|
+
tool("trade_amend_algo_order", "Amend a supported pending algo order idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, algoId: z.string().optional(), algoClOrdId: z.string().optional(), newSize: z.string().optional(), newTriggerPrice: z.string().optional(), newOrderPrice: z.string().optional() }), (c, a) => c.trade.amendAlgoOrder(a)),
|
|
163
|
+
tool("trade_cancel_algo_order", "Cancel a pending algo order idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, algoId: z.string().min(1) }), (c, a) => c.trade.cancelAlgoOrder(a)),
|
|
164
|
+
tool("trade_close_position", "Close an OKX position with a market order idempotently.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId, mgnMode: z.enum(["cross", "isolated"]), posSide: z.string().optional(), ccy: z.string().optional(), autoCancel: z.boolean().optional() }), (c, a) => c.trade.closePosition(a)),
|
|
165
|
+
tool("trade_cancel_instrument_orders", "Cancel every pending ordinary and algo order for one instrument.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId }), (c, a) => c.trade.cancelInstrumentOrders(a)),
|
|
166
|
+
tool("trade_close_instrument_positions", "Close every open position side for one instrument.", z.strictObject({ account: Account, executionKey: ExecutionKey, instId: InstId }), (c, a) => c.trade.closeInstrumentPositions(a))
|
|
167
|
+
];
|
|
168
|
+
export function toolByName(name) {
|
|
169
|
+
return TOOL_CATALOG.find((tool) => tool.name === name);
|
|
170
|
+
}
|
|
171
|
+
function derivativeTools() {
|
|
172
|
+
const operations = [
|
|
173
|
+
["derivatives_get_positioning", "Read open-interest positioning history.", (service, query) => service.positioning(query)],
|
|
174
|
+
["derivatives_get_taker_flow", "Read contract taker buy and sell flow.", (service, query) => service.takerFlow(query)],
|
|
175
|
+
["derivatives_get_funding_basis", "Read funding, premium, mark, index, and basis facts.", (service, query) => service.fundingBasis(query)],
|
|
176
|
+
["derivatives_get_liquidations", "Read recent filled liquidation records.", (service, query) => service.liquidations(query)],
|
|
177
|
+
["derivatives_get_system_stress", "Read insurance fund, price limits, and position tiers.", (service, query) => service.systemStress(query)],
|
|
178
|
+
["derivatives_get_position_changes", "Calculate changes between open-interest observations.", (service, query) => service.positionChanges(query)],
|
|
179
|
+
["derivatives_get_crowding", "Compare market and top-trader long-short ratios.", (service, query) => service.crowding(query)],
|
|
180
|
+
["derivatives_get_consensus", "Compare positioning, taker flow, and crowding evidence.", (service, query) => service.consensus(query)],
|
|
181
|
+
["derivatives_get_decision_snapshot", "Read a combined derivatives decision snapshot.", (service, query) => service.decisionSnapshot(query)]
|
|
182
|
+
];
|
|
183
|
+
return operations.map(([name, description, execute]) => tool(name, description, DerivativesSchema, (context, input) => execute(context.derivatives, input)));
|
|
184
|
+
}
|
|
185
|
+
function newsTools() {
|
|
186
|
+
return [
|
|
187
|
+
experimentalTool("news_list", "List recent OKX news intelligence.", IntelligenceSchema, (c, a) => c.intelligence.newsList(a)),
|
|
188
|
+
experimentalTool("news_search", "Search OKX news intelligence by keyword and filters.", IntelligenceSchema, (c, a) => c.intelligence.newsList(a)),
|
|
189
|
+
experimentalTool("news_read_detail", "Read one news item in detail.", IntelligenceSchema, (c, a) => c.intelligence.newsDetail(a)),
|
|
190
|
+
experimentalTool("news_list_sources", "List available OKX news sources.", IntelligenceSchema, (c, a) => c.intelligence.newsSources(a)),
|
|
191
|
+
experimentalTool("news_read_coin_sentiment", "Read current sentiment for one or more coins.", IntelligenceSchema, (c, a) => c.intelligence.sentiment(a)),
|
|
192
|
+
experimentalTool("news_read_coin_sentiment_trend", "Read sentiment history for one or more coins.", IntelligenceSchema, (c, a) => c.intelligence.sentiment(a, true)),
|
|
193
|
+
experimentalTool("news_read_sentiment_ranking", "Read coin sentiment rankings.", IntelligenceSchema, (c, a) => c.intelligence.sentimentRanking(a)),
|
|
194
|
+
experimentalTool("news_read_economic_calendar", "Read the economic event calendar.", IntelligenceSchema, (c, a) => c.intelligence.economicCalendar(a)),
|
|
195
|
+
experimentalTool("news_list_events", "List locally clustered news events.", IntelligenceSchema, async (c, a) => c.intelligence.listEvents(a)),
|
|
196
|
+
experimentalTool("news_read_event", "Read one locally clustered news event.", IntelligenceSchema, async (c, a) => c.intelligence.readEvent(a)),
|
|
197
|
+
experimentalTool("news_read_market_reaction", "Measure market movement around a news event.", IntelligenceSchema, (c, a) => c.intelligence.marketReaction(a)),
|
|
198
|
+
experimentalTool("news_list_anomalies", "List material derivatives changes near current news.", IntelligenceSchema, (c, a) => c.intelligence.anomalies(a)),
|
|
199
|
+
experimentalTool("news_read_daily_briefing", "Build a daily briefing from news, sentiment, and derivatives.", IntelligenceSchema, (c, a) => c.intelligence.dailyBriefing(a))
|
|
200
|
+
];
|
|
201
|
+
}
|
|
202
|
+
function smartTools() {
|
|
203
|
+
const operations = [
|
|
204
|
+
["smart_money_list_traders", "list_traders", "List Smart Money traders by performance filters."],
|
|
205
|
+
["smart_money_search_trader", "search_trader", "Search for a Smart Money trader."],
|
|
206
|
+
["smart_money_read_performance", "read_performance", "Read performance for selected traders."],
|
|
207
|
+
["smart_money_read_positions", "read_positions", "Read a trader's current positions."],
|
|
208
|
+
["smart_money_read_position_history", "read_position_history", "Read a trader's closed-position history."],
|
|
209
|
+
["smart_money_read_order_history", "read_order_history", "Read a trader's public order history."],
|
|
210
|
+
["smart_money_read_signal_overview_by_filter", "read_signal_overview_by_filter", "Read aggregate Smart Money signals by filters."],
|
|
211
|
+
["smart_money_read_signal_overview_by_trader", "read_signal_overview_by_trader", "Read aggregate Smart Money signals by trader."],
|
|
212
|
+
["smart_money_read_signal_trend_by_filter", "read_signal_trend_by_filter", "Read Smart Money signal history by filters."],
|
|
213
|
+
["smart_money_read_signal_trend_by_trader", "read_signal_trend_by_trader", "Read Smart Money signal history by trader."]
|
|
214
|
+
];
|
|
215
|
+
return operations.map(([name, operation, description]) => experimentalTool(name, description, SmartSchema, (context, input) => context.intelligence.smart(operation, input)));
|
|
216
|
+
}
|
|
217
|
+
function tool(name, description, schema, execute) {
|
|
218
|
+
return { name, description, schema, execute };
|
|
219
|
+
}
|
|
220
|
+
function experimentalTool(name, description, schema, execute) {
|
|
221
|
+
return tool(name, `Experimental OKX intelligence capability. ${description}`, schema, execute);
|
|
222
|
+
}
|
|
223
|
+
function optionalString(value) {
|
|
224
|
+
return typeof value === "string" && value ? value : undefined;
|
|
225
|
+
}
|
|
226
|
+
function stringOr(value, fallback) {
|
|
227
|
+
return typeof value === "string" && value ? value : fallback;
|
|
228
|
+
}
|
|
229
|
+
function numberOr(value, fallback) {
|
|
230
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
231
|
+
}
|
|
232
|
+
function without(value, key) {
|
|
233
|
+
const { [key]: _removed, ...rest } = value;
|
|
234
|
+
return rest;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"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"}
|