@vantagestack/mcp-server 0.1.56 → 0.1.59

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 (109) hide show
  1. package/package.json +1 -1
  2. package/dist/client.d.ts +0 -25
  3. package/dist/client.js +0 -172
  4. package/dist/client.js.map +0 -1
  5. package/dist/index.d.ts +0 -2
  6. package/dist/index.js +0 -1319
  7. package/dist/index.js.map +0 -1
  8. package/dist/tools/account-deletion.d.ts +0 -6
  9. package/dist/tools/account-deletion.js +0 -92
  10. package/dist/tools/account-deletion.js.map +0 -1
  11. package/dist/tools/account-health.d.ts +0 -21
  12. package/dist/tools/account-health.js +0 -84
  13. package/dist/tools/account-health.js.map +0 -1
  14. package/dist/tools/account.d.ts +0 -19
  15. package/dist/tools/account.js +0 -291
  16. package/dist/tools/account.js.map +0 -1
  17. package/dist/tools/account.test.d.ts +0 -1
  18. package/dist/tools/account.test.js +0 -213
  19. package/dist/tools/account.test.js.map +0 -1
  20. package/dist/tools/calendar.d.ts +0 -4
  21. package/dist/tools/calendar.js +0 -85
  22. package/dist/tools/calendar.js.map +0 -1
  23. package/dist/tools/calendar.test.d.ts +0 -1
  24. package/dist/tools/calendar.test.js +0 -62
  25. package/dist/tools/calendar.test.js.map +0 -1
  26. package/dist/tools/canary.d.ts +0 -4
  27. package/dist/tools/canary.js +0 -25
  28. package/dist/tools/canary.js.map +0 -1
  29. package/dist/tools/canary.test.d.ts +0 -1
  30. package/dist/tools/canary.test.js +0 -46
  31. package/dist/tools/canary.test.js.map +0 -1
  32. package/dist/tools/contract-configs.d.ts +0 -9
  33. package/dist/tools/contract-configs.js +0 -187
  34. package/dist/tools/contract-configs.js.map +0 -1
  35. package/dist/tools/contract-configs.test.d.ts +0 -1
  36. package/dist/tools/contract-configs.test.js +0 -245
  37. package/dist/tools/contract-configs.test.js.map +0 -1
  38. package/dist/tools/copier.d.ts +0 -11
  39. package/dist/tools/copier.js +0 -52
  40. package/dist/tools/copier.js.map +0 -1
  41. package/dist/tools/copier.test.d.ts +0 -1
  42. package/dist/tools/copier.test.js +0 -75
  43. package/dist/tools/copier.test.js.map +0 -1
  44. package/dist/tools/groups.d.ts +0 -14
  45. package/dist/tools/groups.js +0 -44
  46. package/dist/tools/groups.js.map +0 -1
  47. package/dist/tools/groups.test.d.ts +0 -1
  48. package/dist/tools/groups.test.js +0 -72
  49. package/dist/tools/groups.test.js.map +0 -1
  50. package/dist/tools/ip-allowlist.d.ts +0 -6
  51. package/dist/tools/ip-allowlist.js +0 -69
  52. package/dist/tools/ip-allowlist.js.map +0 -1
  53. package/dist/tools/journal.d.ts +0 -6
  54. package/dist/tools/journal.js +0 -110
  55. package/dist/tools/journal.js.map +0 -1
  56. package/dist/tools/journal.test.d.ts +0 -1
  57. package/dist/tools/journal.test.js +0 -100
  58. package/dist/tools/journal.test.js.map +0 -1
  59. package/dist/tools/latency.d.ts +0 -3
  60. package/dist/tools/latency.js +0 -54
  61. package/dist/tools/latency.js.map +0 -1
  62. package/dist/tools/market-history.d.ts +0 -4
  63. package/dist/tools/market-history.js +0 -50
  64. package/dist/tools/market-history.js.map +0 -1
  65. package/dist/tools/market-hours.d.ts +0 -3
  66. package/dist/tools/market-hours.js +0 -19
  67. package/dist/tools/market-hours.js.map +0 -1
  68. package/dist/tools/paper-trading.d.ts +0 -10
  69. package/dist/tools/paper-trading.js +0 -200
  70. package/dist/tools/paper-trading.js.map +0 -1
  71. package/dist/tools/ping.d.ts +0 -8
  72. package/dist/tools/ping.js +0 -22
  73. package/dist/tools/ping.js.map +0 -1
  74. package/dist/tools/ping.test.d.ts +0 -1
  75. package/dist/tools/ping.test.js +0 -25
  76. package/dist/tools/ping.test.js.map +0 -1
  77. package/dist/tools/qc.d.ts +0 -18
  78. package/dist/tools/qc.js +0 -422
  79. package/dist/tools/qc.js.map +0 -1
  80. package/dist/tools/qc.test.d.ts +0 -1
  81. package/dist/tools/qc.test.js +0 -218
  82. package/dist/tools/qc.test.js.map +0 -1
  83. package/dist/tools/read.d.ts +0 -7
  84. package/dist/tools/read.js +0 -154
  85. package/dist/tools/read.js.map +0 -1
  86. package/dist/tools/read.test.d.ts +0 -1
  87. package/dist/tools/read.test.js +0 -102
  88. package/dist/tools/read.test.js.map +0 -1
  89. package/dist/tools/risk.d.ts +0 -7
  90. package/dist/tools/risk.js +0 -108
  91. package/dist/tools/risk.js.map +0 -1
  92. package/dist/tools/signal-templates.d.ts +0 -6
  93. package/dist/tools/signal-templates.js +0 -90
  94. package/dist/tools/signal-templates.js.map +0 -1
  95. package/dist/tools/signals.d.ts +0 -8
  96. package/dist/tools/signals.js +0 -318
  97. package/dist/tools/signals.js.map +0 -1
  98. package/dist/tools/signals.test.d.ts +0 -1
  99. package/dist/tools/signals.test.js +0 -92
  100. package/dist/tools/signals.test.js.map +0 -1
  101. package/dist/tools/sync-accounts.d.ts +0 -18
  102. package/dist/tools/sync-accounts.js +0 -68
  103. package/dist/tools/sync-accounts.js.map +0 -1
  104. package/dist/tools/trade.d.ts +0 -3
  105. package/dist/tools/trade.js +0 -49
  106. package/dist/tools/trade.js.map +0 -1
  107. package/dist/user.d.ts +0 -19
  108. package/dist/user.js +0 -21
  109. package/dist/user.js.map +0 -1
@@ -1,218 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { listQcAlgorithms, getQcAlgorithm, getAlgorithmFile, createQcAlgorithm, updateQcAlgorithm, listStrategyInstances, getStrategyInstance, launchStrategy, stopStrategy, getStrategyLogs, getStrategyStats, getStrategyOrders, } from "./qc.js";
3
- const makeClient = (overrides = {}) => ({
4
- get: overrides.get ?? (() => Promise.resolve([])),
5
- post: overrides.post ?? (() => Promise.resolve({ id: 99 })),
6
- patch: overrides.patch ?? (() => Promise.resolve({ id: 1 })),
7
- delete: overrides.delete ?? (() => Promise.resolve({})),
8
- getText: overrides.getText ?? (() => Promise.resolve("")),
9
- });
10
- const resolver = {};
11
- const ALGOS = [
12
- { id: 1, name: "LO1 Breakout", updatedAt: "2026-04-30T10:00:00Z", files: ["main.py"] },
13
- { id: 2, name: "PMT Algo", updatedAt: "2026-04-29T10:00:00Z", files: ["main.py", "config.json"] },
14
- ];
15
- const INSTANCES = [
16
- { id: 10, algorithmId: 1, algorithmName: "LO1 Breakout", status: "completed", mode: "backtest", createdAt: "2026-04-30T10:00:00Z", progress: 1.0 },
17
- { id: 11, algorithmId: 1, algorithmName: "LO1 Breakout", status: "running", mode: "backtest", createdAt: "2026-04-30T11:00:00Z", progress: 0.45 },
18
- ];
19
- // ─── listQcAlgorithms ──────────────────────────────────────────────────────
20
- describe("listQcAlgorithms", () => {
21
- it("returns algorithm list", async () => {
22
- const result = await listQcAlgorithms(makeClient({ get: () => Promise.resolve(ALGOS) }), resolver, {});
23
- expect(result.isError).toBeUndefined();
24
- expect(result.content[0].text).toContain("2 algorithm(s)");
25
- expect(result.content[0].text).toContain("LO1 Breakout");
26
- });
27
- it("returns helpful message when empty", async () => {
28
- const result = await listQcAlgorithms(makeClient({ get: () => Promise.resolve([]) }), resolver, {});
29
- expect(result.content[0].text).toContain("create_qc_algorithm");
30
- });
31
- it("returns isError on API failure", async () => {
32
- const result = await listQcAlgorithms(makeClient({ get: () => Promise.reject(new Error("500")) }), resolver, {});
33
- expect(result.isError).toBe(true);
34
- });
35
- });
36
- // ─── getQcAlgorithm ────────────────────────────────────────────────────────
37
- describe("getQcAlgorithm", () => {
38
- it("returns algorithm details", async () => {
39
- const result = await getQcAlgorithm(makeClient({ get: () => Promise.resolve(ALGOS[0]) }), resolver, { algorithmId: "1" });
40
- expect(result.isError).toBeUndefined();
41
- expect(result.content[0].text).toContain("LO1 Breakout");
42
- expect(result.content[0].text).toContain("1 file(s)");
43
- });
44
- it("returns isError when algorithmId missing", async () => {
45
- const result = await getQcAlgorithm(makeClient(), resolver, {});
46
- expect(result.isError).toBe(true);
47
- });
48
- });
49
- // ─── getAlgorithmFile ──────────────────────────────────────────────────────
50
- describe("getAlgorithmFile", () => {
51
- const CODE = "import numpy as np\n# LO1 breakout\nclass LO1(QCAlgorithm):\n pass\n";
52
- it("returns file content with line count", async () => {
53
- const result = await getAlgorithmFile(makeClient({ getText: () => Promise.resolve(CODE) }), resolver, { algorithmId: "1", filename: "main.py" });
54
- expect(result.isError).toBeUndefined();
55
- expect(result.content[0].text).toContain("main.py");
56
- expect(result.content[0].text).toMatch(/\d+ lines/);
57
- expect(result.content[1].text).toContain("LO1 breakout");
58
- });
59
- it("returns isError when params missing", async () => {
60
- const result = await getAlgorithmFile(makeClient(), resolver, { algorithmId: "1" });
61
- expect(result.isError).toBe(true);
62
- });
63
- it("returns isError on API failure", async () => {
64
- const result = await getAlgorithmFile(makeClient({ getText: () => Promise.reject(new Error("404")) }), resolver, { algorithmId: "1", filename: "main.py" });
65
- expect(result.isError).toBe(true);
66
- });
67
- });
68
- // ─── createQcAlgorithm ─────────────────────────────────────────────────────
69
- describe("createQcAlgorithm", () => {
70
- it("creates algorithm and returns id", async () => {
71
- const result = await createQcAlgorithm(makeClient({ post: () => Promise.resolve({ id: 5, name: "New Algo" }) }), resolver, { name: "New Algo", files: [{ filename: "main.py", content: "# code" }] });
72
- expect(result.isError).toBeUndefined();
73
- expect(result.content[0].text).toContain("id=5");
74
- expect(result.content[0].text).toContain("New Algo");
75
- });
76
- it("returns isError when name missing", async () => {
77
- const result = await createQcAlgorithm(makeClient(), resolver, {});
78
- expect(result.isError).toBe(true);
79
- });
80
- });
81
- // ─── updateQcAlgorithm ─────────────────────────────────────────────────────
82
- describe("updateQcAlgorithm", () => {
83
- it("updates algorithm files", async () => {
84
- const result = await updateQcAlgorithm(makeClient({ patch: () => Promise.resolve({ id: 1 }) }), resolver, { algorithmId: "1", files: [{ filename: "main.py", content: "# updated" }] });
85
- expect(result.isError).toBeUndefined();
86
- expect(result.content[0].text).toContain("main.py");
87
- });
88
- it("returns isError when algorithmId missing", async () => {
89
- const result = await updateQcAlgorithm(makeClient(), resolver, { files: [{ filename: "main.py", content: "x" }] });
90
- expect(result.isError).toBe(true);
91
- });
92
- it("returns isError when files empty", async () => {
93
- const result = await updateQcAlgorithm(makeClient(), resolver, { algorithmId: "1", files: [] });
94
- expect(result.isError).toBe(true);
95
- });
96
- });
97
- // ─── listStrategyInstances ─────────────────────────────────────────────────
98
- describe("listStrategyInstances", () => {
99
- it("returns instance list", async () => {
100
- const result = await listStrategyInstances(makeClient({ get: () => Promise.resolve(INSTANCES) }), resolver, {});
101
- expect(result.isError).toBeUndefined();
102
- expect(result.content[0].text).toContain("2 instance(s)");
103
- expect(result.content[0].text).toContain("completed");
104
- expect(result.content[0].text).toContain("running");
105
- });
106
- it("returns empty message when none", async () => {
107
- const result = await listStrategyInstances(makeClient({ get: () => Promise.resolve([]) }), resolver, {});
108
- expect(result.content[0].text).toContain("No strategy instances");
109
- });
110
- });
111
- // ─── getStrategyInstance ───────────────────────────────────────────────────
112
- describe("getStrategyInstance", () => {
113
- it("returns instance detail with progress", async () => {
114
- const result = await getStrategyInstance(makeClient({ get: () => Promise.resolve(INSTANCES[1]) }), resolver, { instanceId: "11" });
115
- expect(result.isError).toBeUndefined();
116
- expect(result.content[0].text).toContain("45%");
117
- expect(result.content[0].text).toContain("running");
118
- });
119
- it("returns isError when instanceId missing", async () => {
120
- const result = await getStrategyInstance(makeClient(), resolver, {});
121
- expect(result.isError).toBe(true);
122
- });
123
- });
124
- // ─── launchStrategy ────────────────────────────────────────────────────────
125
- describe("launchStrategy", () => {
126
- it("launches and returns instanceId with follow-up hint", async () => {
127
- const result = await launchStrategy(makeClient({ post: () => Promise.resolve({ id: 20, status: "initializing" }) }), resolver, { algorithmId: "1", connectionAccountId: 7, strategyName: "lo1" });
128
- expect(result.isError).toBeUndefined();
129
- expect(result.content[0].text).toContain("instanceId=20");
130
- expect(result.content[0].text).toContain("get_strategy_logs");
131
- });
132
- it("returns isError when algorithmId missing", async () => {
133
- const result = await launchStrategy(makeClient(), resolver, { connectionAccountId: 7, strategyName: "lo1" });
134
- expect(result.isError).toBe(true);
135
- });
136
- });
137
- // ─── stopStrategy ──────────────────────────────────────────────────────────
138
- describe("stopStrategy", () => {
139
- it("stops instance and confirms", async () => {
140
- const result = await stopStrategy(makeClient({ delete: () => Promise.resolve({}) }), resolver, { instanceId: "11" });
141
- expect(result.isError).toBeUndefined();
142
- expect(result.content[0].text).toContain("11");
143
- expect(result.content[0].text).toContain("stopped");
144
- });
145
- it("returns isError when instanceId missing", async () => {
146
- const result = await stopStrategy(makeClient(), resolver, {});
147
- expect(result.isError).toBe(true);
148
- });
149
- it("returns isError on API failure", async () => {
150
- const result = await stopStrategy(makeClient({ delete: () => Promise.reject(new Error("404")) }), resolver, { instanceId: "11" });
151
- expect(result.isError).toBe(true);
152
- });
153
- });
154
- // ─── getStrategyLogs ───────────────────────────────────────────────────────
155
- describe("getStrategyLogs", () => {
156
- it("returns last N lines", async () => {
157
- const logs = Array.from({ length: 150 }, (_, i) => `2026-04-30 INFO Line ${i + 1}`).join("\n");
158
- const result = await getStrategyLogs(makeClient({ getText: () => Promise.resolve(logs) }), resolver, { instanceId: "10", tail: 100 });
159
- expect(result.isError).toBeUndefined();
160
- expect(result.content[0].text).toContain("last 100 of 150");
161
- expect(result.content[0].text).toContain("Line 150");
162
- });
163
- it("returns graceful message when no logs yet", async () => {
164
- const result = await getStrategyLogs(makeClient({ getText: () => Promise.resolve("") }), resolver, { instanceId: "10" });
165
- expect(result.content[0].text).toContain("No logs yet");
166
- });
167
- it("returns isError when instanceId missing", async () => {
168
- const result = await getStrategyLogs(makeClient(), resolver, {});
169
- expect(result.isError).toBe(true);
170
- });
171
- });
172
- // ─── getStrategyStats ──────────────────────────────────────────────────────
173
- describe("getStrategyStats", () => {
174
- const STATS = { netPnl: 4250.5, totalTrades: 38, winRate: 0.632, profitFactor: 2.3, sharpe: 1.95, maxDrawdown: -1200 };
175
- it("returns formatted stats summary", async () => {
176
- const result = await getStrategyStats(makeClient({ get: () => Promise.resolve(STATS) }), resolver, { instanceId: "10" });
177
- expect(result.isError).toBeUndefined();
178
- expect(result.content[0].text).toContain("+4250.50");
179
- expect(result.content[0].text).toContain("63.2%");
180
- expect(result.content[0].text).toContain("2.30");
181
- expect(result.content[0].text).toContain("1.95");
182
- });
183
- it("returns isError when instanceId missing", async () => {
184
- const result = await getStrategyStats(makeClient(), resolver, {});
185
- expect(result.isError).toBe(true);
186
- });
187
- it("returns isError on API failure", async () => {
188
- const result = await getStrategyStats(makeClient({ get: () => Promise.reject(new Error("404")) }), resolver, { instanceId: "10" });
189
- expect(result.isError).toBe(true);
190
- });
191
- });
192
- // ─── getStrategyOrders ─────────────────────────────────────────────────────
193
- describe("getStrategyOrders", () => {
194
- const CSV = `Time,Symbol,Direction,Quantity,FillPrice,PnL
195
- 2026-01-15 09:31,MYMM6,Buy,1,49200,
196
- 2026-01-15 10:45,MYMM6,Sell,1,49350,150
197
- 2026-01-16 09:31,MYMM6,Sell,1,49500,
198
- 2026-01-16 11:00,MYMM6,Buy,1,49420,-80`;
199
- it("returns parsed order summary", async () => {
200
- const result = await getStrategyOrders(makeClient({ getText: () => Promise.resolve(CSV) }), resolver, { instanceId: "10" });
201
- expect(result.isError).toBeUndefined();
202
- expect(result.content[0].text).toContain("4 order(s)");
203
- expect(result.content[0].text).toContain("MYMM6");
204
- });
205
- it("returns raw CSV in second block", async () => {
206
- const result = await getStrategyOrders(makeClient({ getText: () => Promise.resolve(CSV) }), resolver, { instanceId: "10" });
207
- expect(result.content[1].text).toContain("Time,Symbol");
208
- });
209
- it("returns graceful message for empty export", async () => {
210
- const result = await getStrategyOrders(makeClient({ getText: () => Promise.resolve("") }), resolver, { instanceId: "10" });
211
- expect(result.content[0].text).toContain("No orders exported");
212
- });
213
- it("returns isError when instanceId missing", async () => {
214
- const result = await getStrategyOrders(makeClient(), resolver, {});
215
- expect(result.isError).toBe(true);
216
- });
217
- });
218
- //# sourceMappingURL=qc.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qc.test.js","sourceRoot":"","sources":["../../src/tools/qc.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { VantageClient } from "../client.js";
2
- import { UserResolver, ToolResult } from "../user.js";
3
- export declare function listGroups(client: VantageClient, resolver: UserResolver, _input: Record<string, unknown>): Promise<ToolResult>;
4
- export declare function getGroupState(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
5
- export declare function checkConnections(client: VantageClient, resolver: UserResolver, _input: Record<string, unknown>): Promise<ToolResult>;
6
- export declare function getSignalHistory(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
7
- export declare function inspectSignal(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
@@ -1,154 +0,0 @@
1
- import { makeErrorResult } from "../user.js";
2
- export async function listGroups(client, resolver, _input) {
3
- try {
4
- const userId = await resolver.resolve(client);
5
- const groups = await client.get(`/api/account/${userId}/groups`);
6
- // Reveal full secrets for each group (audited server-side)
7
- const revealed = await Promise.all(groups.map((g) => client
8
- .get(`/api/account/${userId}/groups/${g.id}/webhook-url`)
9
- .catch(() => ({ groupId: g.id, groupName: g.name, webhookUrl: g.webhookUrl ?? "", webhookSecret: "" }))));
10
- const summary = groups
11
- .map((g, i) => `• ${g.name} (id=${g.id}, accounts=${g.accounts?.length ?? 0})`)
12
- .join("\n");
13
- return {
14
- content: [
15
- { type: "text", text: `${groups.length} group(s):\n${summary}` },
16
- {
17
- type: "text",
18
- text: JSON.stringify(groups.map((g, i) => ({
19
- groupId: g.id,
20
- name: g.name,
21
- accountCount: g.accounts?.length ?? 0,
22
- webhookUrl: revealed[i].webhookUrl,
23
- webhookSecret: revealed[i].webhookSecret,
24
- })), null, 2),
25
- },
26
- ],
27
- };
28
- }
29
- catch (err) {
30
- return makeErrorResult(err);
31
- }
32
- }
33
- export async function getGroupState(client, _resolver, input) {
34
- const groupId = String(input.groupId ?? "");
35
- const secret = String(input.secret ?? "");
36
- if (!groupId || !secret)
37
- return makeErrorResult(new Error("groupId and secret are required"));
38
- try {
39
- const state = await client.get(`/webhook/group/${groupId}/${secret}/account-state`);
40
- const members = state.members ?? [];
41
- const summaryLines = members.map((m) => {
42
- const spec = m.accountSpec ?? m.userId ?? "?";
43
- const positions = m.positions ?? [];
44
- const orders = m.workingOrders ?? [];
45
- const posStr = positions.length === 0 ? "FLAT" : `${positions.length} open position(s)`;
46
- const ordStr = orders.length > 0 ? `, ${orders.length} working order(s)` : "";
47
- const errStr = m.error ? ` [${m.error}]` : "";
48
- return `• ${spec}: ${posStr}${ordStr}${errStr}`;
49
- });
50
- return {
51
- content: [
52
- {
53
- type: "text",
54
- text: summaryLines.length > 0 ? summaryLines.join("\n") : "No active accounts in group",
55
- },
56
- { type: "text", text: JSON.stringify(state, null, 2) },
57
- ],
58
- };
59
- }
60
- catch (err) {
61
- return makeErrorResult(err);
62
- }
63
- }
64
- export async function checkConnections(client, resolver, _input) {
65
- try {
66
- const userId = await resolver.resolve(client);
67
- const connections = await client.get(`/api/account/${userId}/connections`);
68
- const summaryLines = connections.map((c) => {
69
- const status = c.connected && c.isEnabled ? "connected" : "disconnected";
70
- const expiry = c.tokenExpiry
71
- ? ` (token expires ${new Date(c.tokenExpiry).toISOString()})`
72
- : "";
73
- return `• ${c.label ?? c.brokerType} [${c.brokerType}]: ${status}${expiry}`;
74
- });
75
- return {
76
- content: [
77
- {
78
- type: "text",
79
- text: connections.length > 0
80
- ? summaryLines.join("\n")
81
- : "No connections found",
82
- },
83
- { type: "text", text: JSON.stringify(connections, null, 2) },
84
- ],
85
- };
86
- }
87
- catch (err) {
88
- return makeErrorResult(err);
89
- }
90
- }
91
- export async function getSignalHistory(client, _resolver, input) {
92
- const groupId = String(input.groupId ?? "");
93
- if (!groupId)
94
- return makeErrorResult(new Error("groupId is required"));
95
- const params = new URLSearchParams();
96
- if (input.limit)
97
- params.set("limit", String(input.limit));
98
- if (input.status)
99
- params.set("status", String(input.status));
100
- if (input.ticker)
101
- params.set("ticker", String(input.ticker));
102
- const qs = params.toString() ? `?${params.toString()}` : "";
103
- try {
104
- const res = await client.get(`/api/groups/${groupId}/signals${qs}`);
105
- const signals = res.signals ?? [];
106
- const lines = signals.map((s) => `• [${s.receivedAt}] ${s.action} ${s.ticker} ${s.status} (id=${s.id})`);
107
- return {
108
- content: [
109
- {
110
- type: "text",
111
- text: `${res.total} total signal(s), showing ${signals.length}:\n${lines.join("\n")}`,
112
- },
113
- { type: "text", text: JSON.stringify(res, null, 2) },
114
- ],
115
- };
116
- }
117
- catch (err) {
118
- return makeErrorResult(err);
119
- }
120
- }
121
- export async function inspectSignal(client, _resolver, input) {
122
- const signalId = String(input.signalId ?? "");
123
- if (!signalId)
124
- return makeErrorResult(new Error("signalId is required"));
125
- try {
126
- const [signal, audit] = await Promise.all([
127
- client.get(`/api/signals/${signalId}`),
128
- client
129
- .get(`/api/signals/${signalId}/audit`)
130
- .catch(() => null),
131
- ]);
132
- const summaryParts = [
133
- `Signal ${signalId}: ${signal.action} ${signal.ticker}`,
134
- `Status: ${signal.status}`,
135
- ];
136
- if (signal.errorMessage)
137
- summaryParts.push(`Error: ${signal.errorMessage}`);
138
- if (signal.executedAt)
139
- summaryParts.push(`Executed: ${signal.executedAt}`);
140
- return {
141
- content: [
142
- { type: "text", text: summaryParts.join(" | ") },
143
- {
144
- type: "text",
145
- text: JSON.stringify({ signal, audit: audit ?? "unavailable" }, null, 2),
146
- },
147
- ],
148
- };
149
- }
150
- catch (err) {
151
- return makeErrorResult(err);
152
- }
153
- }
154
- //# sourceMappingURL=read.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,102 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { listGroups, getGroupState, checkConnections, getSignalHistory, inspectSignal, } from "./read.js";
3
- const makeClient = (getImpl) => ({ get: getImpl });
4
- const makeResolver = (userId = 42) => ({ resolve: async () => userId });
5
- describe("list_groups", () => {
6
- it("returns group summary and JSON", async () => {
7
- const client = makeClient(() => Promise.resolve([
8
- { id: 7, name: "Main Group", accounts: [{}, {}], webhookUrl: "https://x/webhook/group/7/secret" },
9
- ]));
10
- const result = await listGroups(client, makeResolver(), {});
11
- expect(result.isError).toBeUndefined();
12
- expect(result.content[0].text).toContain("Main Group");
13
- expect(result.content[0].text).toContain("id=7");
14
- });
15
- it("returns isError when API fails", async () => {
16
- const client = makeClient(() => Promise.reject(new Error("401")));
17
- const result = await listGroups(client, makeResolver(), {});
18
- expect(result.isError).toBe(true);
19
- });
20
- });
21
- describe("get_group_state", () => {
22
- it("shows FLAT when no positions", async () => {
23
- const client = makeClient(() => Promise.resolve({ members: [{ accountSpec: "Demo123", positions: [], workingOrders: [] }] }));
24
- const result = await getGroupState(client, makeResolver(), { groupId: "7", secret: "abc" });
25
- expect(result.isError).toBeUndefined();
26
- expect(result.content[0].text).toContain("FLAT");
27
- });
28
- it("shows open position count", async () => {
29
- const client = makeClient(() => Promise.resolve({
30
- members: [{ accountSpec: "Demo123", positions: [{ symbol: "MYM" }], workingOrders: [] }],
31
- }));
32
- const result = await getGroupState(client, makeResolver(), { groupId: "7", secret: "abc" });
33
- expect(result.content[0].text).toContain("1 open position");
34
- });
35
- it("returns isError when groupId missing", async () => {
36
- const client = makeClient(() => Promise.resolve({}));
37
- const result = await getGroupState(client, makeResolver(), {});
38
- expect(result.isError).toBe(true);
39
- });
40
- });
41
- describe("check_connections", () => {
42
- it("returns connection status", async () => {
43
- const client = makeClient(() => Promise.resolve([
44
- { id: 1, label: "Tradovate Demo", brokerType: "tradovate", isActive: true, isEnabled: true },
45
- ]));
46
- const result = await checkConnections(client, makeResolver(), {});
47
- expect(result.isError).toBeUndefined();
48
- expect(result.content[0].text).toContain("Tradovate Demo");
49
- expect(result.content[0].text).toContain("connected");
50
- });
51
- });
52
- describe("get_signal_history", () => {
53
- it("returns signal list", async () => {
54
- const client = makeClient(() => Promise.resolve({
55
- total: 2,
56
- offset: 0,
57
- limit: 50,
58
- signals: [
59
- { id: 1, action: "buy", ticker: "MYM1!", status: "executed", receivedAt: "2026-04-29T10:00:00Z" },
60
- { id: 2, action: "sell", ticker: "MYM1!", status: "failed", receivedAt: "2026-04-29T11:00:00Z" },
61
- ],
62
- }));
63
- const result = await getSignalHistory(client, makeResolver(), { groupId: "7" });
64
- expect(result.isError).toBeUndefined();
65
- expect(result.content[0].text).toContain("2 total signal(s)");
66
- expect(result.content[0].text).toContain("executed");
67
- });
68
- it("returns isError when groupId missing", async () => {
69
- const client = makeClient(() => Promise.resolve({}));
70
- const result = await getSignalHistory(client, makeResolver(), {});
71
- expect(result.isError).toBe(true);
72
- });
73
- });
74
- describe("inspect_signal", () => {
75
- it("combines signal and audit", async () => {
76
- const client = makeClient((path) => {
77
- if (path.endsWith("/audit"))
78
- return Promise.resolve({ events: [] });
79
- return Promise.resolve({ id: 123, action: "buy", ticker: "MYM1!", status: "executed" });
80
- });
81
- const result = await inspectSignal(client, makeResolver(), { signalId: "123" });
82
- expect(result.isError).toBeUndefined();
83
- expect(result.content[0].text).toContain("Signal 123");
84
- expect(result.content[0].text).toContain("executed");
85
- });
86
- it("returns isError when signalId missing", async () => {
87
- const client = makeClient(() => Promise.resolve({}));
88
- const result = await inspectSignal(client, makeResolver(), {});
89
- expect(result.isError).toBe(true);
90
- });
91
- it("still returns signal if audit call fails", async () => {
92
- const client = makeClient((path) => {
93
- if (path.endsWith("/audit"))
94
- return Promise.reject(new Error("404"));
95
- return Promise.resolve({ id: 55, action: "sell", ticker: "ES1!", status: "partial" });
96
- });
97
- const result = await inspectSignal(client, makeResolver(), { signalId: "55" });
98
- expect(result.isError).toBeUndefined();
99
- expect(result.content[1].text).toContain('"audit": "unavailable"');
100
- });
101
- });
102
- //# sourceMappingURL=read.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.test.js","sourceRoot":"","sources":["../../src/tools/read.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,WAAW,CAAC;AAInB,MAAM,UAAU,GAAG,CAAC,OAA2C,EAAE,EAAE,CACjE,CAAC,EAAE,GAAG,EAAE,OAAO,EAA+B,CAAA,CAAC;AAEjD,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,CACnC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAA8B,CAAA,CAAC;AAE/D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAC7B,OAAO,CAAC,OAAO,CAAC;YACd,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,kCAAkC,EAAE;SAClG,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAC7B,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAC7F,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAC7B,OAAO,CAAC,OAAO,CAAC;YACd,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;SACzF,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAC7B,OAAO,CAAC,OAAO,CAAC;YACd,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;SAC7F,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAC7B,OAAO,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,EAAE;YACT,OAAO,EAAE;gBACP,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE;gBACjG,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,EAAE;aACjG;SACF,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACpE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- import { VantageClient } from "../client.js";
2
- import { UserResolver, ToolResult } from "../user.js";
3
- /** RM2-07 — list every open halt for the authed user, newest first. */
4
- export declare function getRiskHalts(client: VantageClient, resolver: UserResolver, _input: Record<string, unknown>): Promise<ToolResult>;
5
- /** RM2-07 — operator re-enable for a halted account. */
6
- export declare function reenableRiskHalt(client: VantageClient, resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
7
- export declare function getRisk(client: VantageClient, resolver: UserResolver, _input: Record<string, unknown>): Promise<ToolResult>;