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.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -0
  3. package/dist/account/private-websocket.d.ts +13 -0
  4. package/dist/account/private-websocket.js +102 -0
  5. package/dist/account/private-websocket.js.map +1 -0
  6. package/dist/account/service.d.ts +22 -0
  7. package/dist/account/service.js +118 -0
  8. package/dist/account/service.js.map +1 -0
  9. package/dist/account/store.d.ts +12 -0
  10. package/dist/account/store.js +48 -0
  11. package/dist/account/store.js.map +1 -0
  12. package/dist/cli/index.d.ts +2 -0
  13. package/dist/cli/index.js +122 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/prompts.d.ts +2 -0
  16. package/dist/cli/prompts.js +52 -0
  17. package/dist/cli/prompts.js.map +1 -0
  18. package/dist/config/loader.d.ts +9 -0
  19. package/dist/config/loader.js +87 -0
  20. package/dist/config/loader.js.map +1 -0
  21. package/dist/config/paths.d.ts +7 -0
  22. package/dist/config/paths.js +11 -0
  23. package/dist/config/paths.js.map +1 -0
  24. package/dist/config/schema.d.ts +42 -0
  25. package/dist/config/schema.js +30 -0
  26. package/dist/config/schema.js.map +1 -0
  27. package/dist/core/attribution.d.ts +2 -0
  28. package/dist/core/attribution.js +29 -0
  29. package/dist/core/attribution.js.map +1 -0
  30. package/dist/core/errors.d.ts +9 -0
  31. package/dist/core/errors.js +33 -0
  32. package/dist/core/errors.js.map +1 -0
  33. package/dist/core/okx-client.d.ts +13 -0
  34. package/dist/core/okx-client.js +102 -0
  35. package/dist/core/okx-client.js.map +1 -0
  36. package/dist/core/sanitize.d.ts +2 -0
  37. package/dist/core/sanitize.js +19 -0
  38. package/dist/core/sanitize.js.map +1 -0
  39. package/dist/core/types.d.ts +38 -0
  40. package/dist/core/types.js +18 -0
  41. package/dist/core/types.js.map +1 -0
  42. package/dist/derivatives/service.d.ts +28 -0
  43. package/dist/derivatives/service.js +144 -0
  44. package/dist/derivatives/service.js.map +1 -0
  45. package/dist/index.d.ts +4 -0
  46. package/dist/index.js +5 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/intelligence/service.d.ts +38 -0
  49. package/dist/intelligence/service.js +324 -0
  50. package/dist/intelligence/service.js.map +1 -0
  51. package/dist/market/indicators.d.ts +2 -0
  52. package/dist/market/indicators.js +74 -0
  53. package/dist/market/indicators.js.map +1 -0
  54. package/dist/market/service.d.ts +28 -0
  55. package/dist/market/service.js +232 -0
  56. package/dist/market/service.js.map +1 -0
  57. package/dist/market/store.d.ts +46 -0
  58. package/dist/market/store.js +158 -0
  59. package/dist/market/store.js.map +1 -0
  60. package/dist/market/websocket.d.ts +33 -0
  61. package/dist/market/websocket.js +213 -0
  62. package/dist/market/websocket.js.map +1 -0
  63. package/dist/mcp/server.d.ts +1 -0
  64. package/dist/mcp/server.js +28 -0
  65. package/dist/mcp/server.js.map +1 -0
  66. package/dist/runtime/client.d.ts +15 -0
  67. package/dist/runtime/client.js +106 -0
  68. package/dist/runtime/client.js.map +1 -0
  69. package/dist/runtime/server.d.ts +28 -0
  70. package/dist/runtime/server.js +140 -0
  71. package/dist/runtime/server.js.map +1 -0
  72. package/dist/runtime/state.d.ts +14 -0
  73. package/dist/runtime/state.js +98 -0
  74. package/dist/runtime/state.js.map +1 -0
  75. package/dist/storage/database.d.ts +23 -0
  76. package/dist/storage/database.js +106 -0
  77. package/dist/storage/database.js.map +1 -0
  78. package/dist/tools/catalog.d.ts +21 -0
  79. package/dist/tools/catalog.js +236 -0
  80. package/dist/tools/catalog.js.map +1 -0
  81. package/dist/trade/service.d.ts +128 -0
  82. package/dist/trade/service.js +470 -0
  83. package/dist/trade/service.js.map +1 -0
  84. package/examples/claude-code/mcp.json +8 -0
  85. package/examples/codex/config.toml +3 -0
  86. package/examples/config.example.json +18 -0
  87. package/package.json +71 -0
  88. package/skills/okx-account-analysis/SKILL.md +14 -0
  89. package/skills/okx-account-analysis/agents/openai.yaml +9 -0
  90. package/skills/okx-derivatives-analysis/SKILL.md +14 -0
  91. package/skills/okx-derivatives-analysis/agents/openai.yaml +9 -0
  92. package/skills/okx-market-analysis/SKILL.md +14 -0
  93. package/skills/okx-market-analysis/agents/openai.yaml +9 -0
  94. package/skills/okx-news-intelligence/SKILL.md +14 -0
  95. package/skills/okx-news-intelligence/agents/openai.yaml +9 -0
  96. package/skills/okx-smart-money-analysis/SKILL.md +15 -0
  97. package/skills/okx-smart-money-analysis/agents/openai.yaml +9 -0
  98. package/skills/okx-trading/SKILL.md +16 -0
  99. package/skills/okx-trading/agents/openai.yaml +9 -0
  100. package/skills/trading-philosophy/SKILL.md +14 -0
  101. 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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExF,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAWnE,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAiB,CAAC;QACtF,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACnD,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,GAAG,kBAAkB,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC7D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACxC,sBAAsB,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,sBAAsB,CAAC,eAAe,CAAC,CAAC;QACxC,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,IAAI,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM;gBAAE,MAAM,KAAK,CAAC;YACpD,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,kBAAkB,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,MAAM,KAAK,KAAK;gBAAE,MAAM,KAAK,CAAC;YAClC,MAAM,MAAM,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,cAAsB,EAAE,UAAkB;IAC5E,sBAAsB,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,UAAU,KAAK,UAAU;YAAE,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC9C,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG;YAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,UAAmC,EAAE;IACzF,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,EAAE,CAAC,cAAc,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvI,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AAC3E,CAAC"}
@@ -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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"}