@almanak/mcp-server 0.2.5 → 0.2.7

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.
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_fs_1 = require("node:fs");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_test_1 = require("node:test");
11
+ const backtest_v3_1 = require("../../backtest-v3");
12
+ const tools_1 = require("../../tools");
13
+ const pre_v3_backtest_tools_1 = require("./fixtures/pre-v3-backtest-tools");
14
+ const FULL_SHA = 'b'.repeat(40);
15
+ const ECONOMIC_YAML = 'mode: economic\nwindow:\n start: 2026-09-01T00:00:00+00:00\n';
16
+ const HISTORICAL_YAML = 'mode: historical_path\nwindow:\n start: 2026-09-01T00:00:00+00:00\n';
17
+ const RANGE_CONFIG = 'strategy:\n allocations:\n position:\n market: pool\n range:\n lower: -200\n upper: 200\n';
18
+ const BAND_CONFIG = '# yaml-language-server: $schema=strategy.schema.json\nstrategy:\n decision_interval: 5s\n allocations:\n position:\n' +
19
+ ' market: pool\n account: fund\n band:\n lower: -200130\n upper: -196130\n width_bps: 500\n';
20
+ /** Market, allocation and account names are free-form: `band` as a name is not a band allocation. */
21
+ const BAND_NAMED_RANGE_CONFIG = 'strategy:\n markets:\n band:\n connector: uniswap_v4\n allocations:\n band:\n market: band\n' +
22
+ ' account: band\n notes: |\n band: not a key\n range:\n lower: -1\n upper: 1\n' +
23
+ 'accounts:\n band:\n kind: eoa\n';
24
+ function makeHandler(overrides = {}) {
25
+ var _a, _b;
26
+ const calls = {};
27
+ const backtestConfigs = (_a = overrides.backtestConfigs) !== null && _a !== void 0 ? _a : { 'backtest-economic.yaml': ECONOMIC_YAML };
28
+ const client = {
29
+ getStrategy: async () => {
30
+ var _a;
31
+ return ({
32
+ valid: true,
33
+ data: {
34
+ display_name: 'SPCX/USDG banded LP',
35
+ github_repo_owner: 'u-e2b70317',
36
+ github_repo_name: 'spcx-usdg-robinhood-banded-lp',
37
+ github_default_branch: 'main',
38
+ framework_version: (_a = overrides.frameworkVersion) !== null && _a !== void 0 ? _a : 'V3',
39
+ },
40
+ });
41
+ },
42
+ getStrategyRefConfig: async (id, ref, refType) => {
43
+ var _a;
44
+ calls.refConfigArgs = { id, ref, refType };
45
+ return (_a = overrides.refConfig) !== null && _a !== void 0 ? _a : { valid: true, data: { github_commit_sha: FULL_SHA, effective_config_json: {} } };
46
+ },
47
+ getStrategyRefMetadata: async (_id, ref) => {
48
+ var _a, _b;
49
+ calls.refMetadataRef = ref;
50
+ return {
51
+ valid: true,
52
+ data: {
53
+ sdk_generation: 'v3',
54
+ almanak_sdk_version: (_a = overrides.sdkVersion) !== null && _a !== void 0 ? _a : '3.0.0rc9',
55
+ config_yaml: (_b = overrides.configYaml) !== null && _b !== void 0 ? _b : RANGE_CONFIG,
56
+ backtest_config_paths: Object.keys(backtestConfigs),
57
+ backtest_configs: backtestConfigs,
58
+ },
59
+ };
60
+ },
61
+ getStrategyFileContent: async (id, filePath, ref) => {
62
+ var _a;
63
+ calls.fileArgs = { id, path: filePath, ref };
64
+ return (_a = overrides.file) !== null && _a !== void 0 ? _a : { valid: false, message: 'File not found' };
65
+ },
66
+ submitBacktest: async (body) => {
67
+ var _a;
68
+ calls.submitBody = body;
69
+ return (_a = overrides.submit) !== null && _a !== void 0 ? _a : { id: 'bt-v3', status: 'PENDING', created_at: '2026-09-24T00:00:00Z' };
70
+ },
71
+ };
72
+ return {
73
+ handler: new tools_1.PlatformToolHandler(client, {
74
+ modes: ['strategies'],
75
+ ...(overrides.sdkGeneration === null ? {} : { sdkGeneration: (_b = overrides.sdkGeneration) !== null && _b !== void 0 ? _b : 'v3' }),
76
+ }),
77
+ calls,
78
+ };
79
+ }
80
+ async function run(handler, args) {
81
+ const result = await handler.callTool('backtests_run', { strategy_link_id: 'link-v3', show_widget: true, ...args });
82
+ return JSON.parse(result.content[0].text);
83
+ }
84
+ (0, node_test_1.describe)('tool listings by session generation', () => {
85
+ const backtestTools = (sdkGeneration) => new tools_1.PlatformToolHandler({}, { modes: ['all'], ...(sdkGeneration ? { sdkGeneration } : {}) })
86
+ .listTools()
87
+ .filter((tool) => tool.name === 'backtests_run' || tool.name === 'backtests_results');
88
+ (0, node_test_1.test)('v2 and unset sessions list backtests_run and backtests_results exactly as before SDK v3 support', () => {
89
+ strict_1.default.deepEqual(JSON.parse(JSON.stringify(backtestTools('v2'))), pre_v3_backtest_tools_1.PRE_V3_BACKTEST_TOOL_DEFINITIONS);
90
+ strict_1.default.deepEqual(JSON.parse(JSON.stringify(backtestTools())), pre_v3_backtest_tools_1.PRE_V3_BACKTEST_TOOL_DEFINITIONS);
91
+ });
92
+ (0, node_test_1.test)('a v3 session adds the v3 notes to backtests_results', () => {
93
+ const results = backtestTools('v3').find((tool) => tool.name === 'backtests_results');
94
+ strict_1.default.match(results.description, /For an SDK v3 run \(sdk_generation "v3"\)/);
95
+ });
96
+ });
97
+ (0, node_test_1.describe)('backtests_run schema by session generation', () => {
98
+ const schemaOf = (sdkGeneration) => {
99
+ const handler = new tools_1.PlatformToolHandler({}, { modes: ['strategies'], ...(sdkGeneration ? { sdkGeneration } : {}) });
100
+ return handler.listTools().find((tool) => tool.name === 'backtests_run').inputSchema;
101
+ };
102
+ (0, node_test_1.test)('a v3 session sees the committed-file inputs and no v2 window inputs', () => {
103
+ const schema = schemaOf('v3');
104
+ strict_1.default.deepEqual(schema.required, ['strategy_link_id', 'show_widget']);
105
+ strict_1.default.deepEqual(Object.keys(schema.properties).sort(), ['backtest_config_path', 'branch', 'commit_sha', 'show_widget', 'strategy_link_id']);
106
+ });
107
+ (0, node_test_1.test)('v2 and unset sessions keep the v2 schema unchanged', () => {
108
+ for (const generation of ['v2', undefined]) {
109
+ const schema = schemaOf(generation);
110
+ strict_1.default.deepEqual(schema.required, ['strategy_link_id', 'start_time', 'end_time', 'show_widget']);
111
+ strict_1.default.equal('backtest_config_path' in schema.properties, false);
112
+ strict_1.default.equal('start_time' in schema.properties, true);
113
+ }
114
+ });
115
+ });
116
+ (0, node_test_1.describe)('backtests_run for SDK v3 strategies', () => {
117
+ (0, node_test_1.test)('runs the only committed backtest file at the default branch head with the v3 input shape', async () => {
118
+ const { handler, calls } = makeHandler();
119
+ const out = await run(handler, {});
120
+ strict_1.default.equal(out.show_widget, true);
121
+ strict_1.default.equal(out.data.backtest_id, 'bt-v3');
122
+ strict_1.default.equal(out.data.sdk_generation, 'v3');
123
+ strict_1.default.equal(out.data.backtest_config_path, 'backtest-economic.yaml');
124
+ strict_1.default.equal(out.data.commit_sha, FULL_SHA);
125
+ strict_1.default.deepEqual(calls.refConfigArgs, { id: 'link-v3', ref: 'main', refType: 'branch' });
126
+ strict_1.default.equal(calls.refMetadataRef, FULL_SHA);
127
+ strict_1.default.deepEqual(calls.submitBody, {
128
+ github_strategy_link_id: 'link-v3',
129
+ commit_sha: FULL_SHA,
130
+ sdk_version: '3.0.0rc9',
131
+ sdk_generation: 'v3',
132
+ backtest_config_path: 'backtest-economic.yaml',
133
+ });
134
+ strict_1.default.equal(calls.fileArgs, undefined, 'a file the ref metadata already served is not fetched again');
135
+ });
136
+ (0, node_test_1.test)('resolves an explicit pushed commit and reads a non-root backtest file at that commit', async () => {
137
+ var _a;
138
+ const { handler, calls } = makeHandler({
139
+ backtestConfigs: {},
140
+ file: { valid: true, data: { ref: FULL_SHA, file: { path: 'backtests/q3.yaml', content: HISTORICAL_YAML } } },
141
+ });
142
+ const out = await run(handler, { commit_sha: '8FA138A', backtest_config_path: './backtests/q3.yaml' });
143
+ strict_1.default.equal(out.data.backtest_id, 'bt-v3');
144
+ strict_1.default.deepEqual(calls.refConfigArgs, { id: 'link-v3', ref: '8fa138a', refType: 'commit' });
145
+ strict_1.default.deepEqual(calls.fileArgs, { id: 'link-v3', path: 'backtests/q3.yaml', ref: FULL_SHA });
146
+ strict_1.default.equal((_a = calls.submitBody) === null || _a === void 0 ? void 0 : _a.backtest_config_path, 'backtests/q3.yaml');
147
+ });
148
+ (0, node_test_1.test)('runs the head of a named branch', async () => {
149
+ const { handler, calls } = makeHandler();
150
+ await run(handler, { branch: 'feature/backtest' });
151
+ strict_1.default.deepEqual(calls.refConfigArgs, { id: 'link-v3', ref: 'feature/backtest', refType: 'branch' });
152
+ });
153
+ (0, node_test_1.test)('an unpushed commit is refused with push guidance and never submitted', async () => {
154
+ const { handler, calls } = makeHandler({
155
+ refConfig: { valid: false, message: "Commit 'abcdef1' could not be resolved.", errorCode: 'COMMIT_UNRESOLVED', statusCode: 400, retryable: false },
156
+ });
157
+ const out = await run(handler, { commit_sha: 'abcdef1' });
158
+ strict_1.default.equal(out.data.statusCode, 400);
159
+ strict_1.default.equal(out.data.errorCode, 'COMMIT_UNRESOLVED');
160
+ strict_1.default.match(out.data.error, /Only pushed commits can be backtested/);
161
+ strict_1.default.equal(out.data.requestedCommit, 'abcdef1');
162
+ strict_1.default.equal(calls.submitBody, undefined);
163
+ });
164
+ (0, node_test_1.test)('a file missing from the commit is refused and lists the committed ones', async () => {
165
+ const { handler, calls } = makeHandler();
166
+ const out = await run(handler, { backtest_config_path: 'backtest.yaml' });
167
+ strict_1.default.equal(out.data.statusCode, 404);
168
+ strict_1.default.equal(out.data.errorCode, 'BACKTEST_CONFIG_NOT_FOUND');
169
+ strict_1.default.match(out.data.error, /backtest\.yaml is not in commit bbbbbbb/);
170
+ strict_1.default.deepEqual(out.data.backtest_config_paths, ['backtest-economic.yaml']);
171
+ strict_1.default.equal(calls.submitBody, undefined);
172
+ });
173
+ (0, node_test_1.test)('no committed backtest file asks for one to be written, committed and pushed', async () => {
174
+ const { handler, calls } = makeHandler({ backtestConfigs: {} });
175
+ const out = await run(handler, {});
176
+ strict_1.default.equal(out.data.errorCode, 'BACKTEST_CONFIG_NOT_FOUND');
177
+ strict_1.default.match(out.data.error, /almanak support --schema backtest/);
178
+ strict_1.default.equal(calls.submitBody, undefined);
179
+ });
180
+ (0, node_test_1.test)('several committed backtest files require a choice', async () => {
181
+ const { handler, calls } = makeHandler({
182
+ backtestConfigs: { 'backtest.yaml': HISTORICAL_YAML, 'backtest-economic.yaml': ECONOMIC_YAML },
183
+ });
184
+ const out = await run(handler, {});
185
+ strict_1.default.equal(out.data.errorCode, 'BACKTEST_CONFIG_AMBIGUOUS');
186
+ strict_1.default.deepEqual(out.data.backtest_config_paths, ['backtest.yaml', 'backtest-economic.yaml']);
187
+ strict_1.default.equal(calls.submitBody, undefined);
188
+ });
189
+ (0, node_test_1.test)('an economic run of a band allocation is refused before submission', async () => {
190
+ const { handler, calls } = makeHandler({ configYaml: BAND_CONFIG });
191
+ const out = await run(handler, {});
192
+ strict_1.default.equal(out.data.statusCode, 400);
193
+ strict_1.default.equal(out.data.errorCode, 'V3_BACKTEST_BAND_UNSUPPORTED');
194
+ strict_1.default.match(out.data.error, /not supported in economic backtests/);
195
+ strict_1.default.equal(calls.submitBody, undefined);
196
+ });
197
+ (0, node_test_1.test)('a non-economic file with a band allocation is left to the runner', async () => {
198
+ var _a;
199
+ const { handler, calls } = makeHandler({ configYaml: BAND_CONFIG, backtestConfigs: { 'backtest.yaml': HISTORICAL_YAML } });
200
+ const out = await run(handler, {});
201
+ strict_1.default.equal(out.data.backtest_id, 'bt-v3');
202
+ strict_1.default.equal((_a = calls.submitBody) === null || _a === void 0 ? void 0 : _a.backtest_config_path, 'backtest.yaml');
203
+ });
204
+ (0, node_test_1.test)('v2 window inputs are refused for a v3 strategy before any lookup', async () => {
205
+ const { handler, calls } = makeHandler();
206
+ const out = await run(handler, { start_time: '2026-01-01', end_time: '2026-02-01' });
207
+ strict_1.default.equal(out.data.errorCode, 'V3_BACKTEST_INPUT_INVALID');
208
+ strict_1.default.match(out.data.error, /start_time, end_time are SDK v2 inputs/);
209
+ strict_1.default.equal(calls.refConfigArgs, undefined);
210
+ strict_1.default.equal(calls.submitBody, undefined);
211
+ });
212
+ (0, node_test_1.test)('refuses malformed paths, refs and conflicting ref inputs', async () => {
213
+ for (const [args, pattern] of [
214
+ [{ backtest_config_path: '../secrets.yaml' }, /repository-relative/],
215
+ [{ backtest_config_path: '/abs/backtest.yaml' }, /repository-relative/],
216
+ [{ backtest_config_path: 'backtest.json' }, /repository-relative/],
217
+ [{ commit_sha: 'abc1234', branch: 'main' }, /not both/],
218
+ [{ commit_sha: 'not-a-sha' }, /hexadecimal/],
219
+ [{ branch: 'bad branch' }, /git branch name/],
220
+ ]) {
221
+ const { handler, calls } = makeHandler();
222
+ const out = await run(handler, args);
223
+ strict_1.default.equal(out.data.statusCode, 400, JSON.stringify(args));
224
+ strict_1.default.match(out.data.error, pattern);
225
+ strict_1.default.equal(calls.refConfigArgs, undefined);
226
+ }
227
+ });
228
+ (0, node_test_1.test)('an SDK pin below the hosted v3 minimum is refused', async () => {
229
+ const { handler, calls } = makeHandler({ sdkVersion: '3.0.0.dev4' });
230
+ const out = await run(handler, {});
231
+ strict_1.default.equal(out.data.errorCode, 'V3_BACKTEST_INPUT_INVALID');
232
+ strict_1.default.match(out.data.error, /3\.0\.0rc1 or newer/);
233
+ strict_1.default.equal(calls.submitBody, undefined);
234
+ });
235
+ (0, node_test_1.test)('preserves structured backend refusals', async () => {
236
+ const { handler } = makeHandler({
237
+ submit: { valid: false, statusCode: 400, errorCode: 'V3_BACKTEST_INPUT_INVALID', error: 'backtest_config_path must be a relative .yaml path inside the repository' },
238
+ });
239
+ const out = await run(handler, {});
240
+ strict_1.default.equal(out.data.statusCode, 400);
241
+ strict_1.default.equal(out.data.errorCode, 'V3_BACKTEST_INPUT_INVALID');
242
+ strict_1.default.equal(out.data.backtest_config_path, 'backtest-economic.yaml');
243
+ });
244
+ (0, node_test_1.test)('a v3 session whose link is stored as SDK v2 is refused without advising v2 inputs', async () => {
245
+ const { handler, calls } = makeHandler({ frameworkVersion: 'V2' });
246
+ const out = await run(handler, { backtest_config_path: 'backtest.yaml' });
247
+ strict_1.default.equal(out.data.errorCode, 'SDK_GENERATION_MISMATCH');
248
+ strict_1.default.match(out.data.error, /stored as SDK v2, but this chat session runs the SDK v3 lane/);
249
+ strict_1.default.match(out.data.error, /Do not add SDK v2 window inputs/);
250
+ strict_1.default.doesNotMatch(out.data.error, /takes start_time/);
251
+ strict_1.default.equal(calls.refConfigArgs, undefined);
252
+ strict_1.default.equal(calls.submitBody, undefined);
253
+ });
254
+ (0, node_test_1.test)('a preview refusal of a present file surfaces its reason instead of "not found"', async () => {
255
+ const { handler, calls } = makeHandler({
256
+ backtestConfigs: {},
257
+ file: { valid: true, data: { ref: FULL_SHA, file: { path: 'dist/bt.yaml', content: null, message: 'File type is not previewable' } } },
258
+ });
259
+ const out = await run(handler, { backtest_config_path: 'dist/bt.yaml' });
260
+ strict_1.default.equal(out.data.errorCode, 'BACKTEST_CONFIG_UNREADABLE');
261
+ strict_1.default.match(out.data.error, /File type is not previewable/);
262
+ strict_1.default.equal(calls.submitBody, undefined);
263
+ });
264
+ (0, node_test_1.test)('only "File not found" reads as a missing file; other lookup failures keep their text', async () => {
265
+ const { handler } = makeHandler({ backtestConfigs: {}, file: { valid: false, message: 'Strategy not found' } });
266
+ const out = await run(handler, { backtest_config_path: 'backtest.yaml' });
267
+ strict_1.default.equal(out.data.errorCode, 'BACKTEST_CONFIG_UNREADABLE');
268
+ strict_1.default.match(out.data.error, /Strategy not found/);
269
+ });
270
+ (0, node_test_1.test)('repository access errors carry no push advice', async () => {
271
+ const { handler, calls } = makeHandler({
272
+ refConfig: {
273
+ valid: false,
274
+ message: 'The linked GitHub repository is unavailable. Reconnect GitHub or check repository access.',
275
+ errorCode: 'REPO_ACCESS',
276
+ statusCode: 403,
277
+ retryable: false,
278
+ },
279
+ });
280
+ const out = await run(handler, { commit_sha: 'abcdef1' });
281
+ strict_1.default.equal(out.data.errorCode, 'REPO_ACCESS');
282
+ strict_1.default.doesNotMatch(out.data.error, /push/i);
283
+ strict_1.default.equal(calls.submitBody, undefined);
284
+ });
285
+ (0, node_test_1.test)('free-form names called band do not trigger the economic band refusal', async () => {
286
+ var _a;
287
+ const { handler, calls } = makeHandler({ configYaml: BAND_NAMED_RANGE_CONFIG });
288
+ const out = await run(handler, {});
289
+ strict_1.default.equal(out.data.backtest_id, 'bt-v3');
290
+ strict_1.default.equal((_a = calls.submitBody) === null || _a === void 0 ? void 0 : _a.backtest_config_path, 'backtest-economic.yaml');
291
+ });
292
+ });
293
+ (0, node_test_1.describe)('backtests_run lane and generation mismatches', () => {
294
+ const V2_ARGS = { start_time: '2026-04-06', end_time: '2026-07-05' };
295
+ (0, node_test_1.test)('an SDK v3 strategy in a v2 or unset session points at the Backtest page instead of looping on inputs', async () => {
296
+ for (const sdkGeneration of ['v2', undefined]) {
297
+ const { handler, calls } = makeHandler({ sdkGeneration: sdkGeneration !== null && sdkGeneration !== void 0 ? sdkGeneration : null });
298
+ const out = await run(handler, V2_ARGS);
299
+ strict_1.default.equal(out.data.errorCode, 'SDK_GENERATION_MISMATCH', String(sdkGeneration));
300
+ strict_1.default.match(out.data.error, /not on the SDK v3 lane/);
301
+ strict_1.default.match(out.data.error, /Backtest page/);
302
+ strict_1.default.match(out.data.error, /Do not retry with other inputs/);
303
+ strict_1.default.equal(calls.refConfigArgs, undefined);
304
+ strict_1.default.equal(calls.submitBody, undefined);
305
+ }
306
+ });
307
+ (0, node_test_1.test)('SDK v3 inputs for an SDK v2 strategy in a v2 session are refused', async () => {
308
+ const { handler, calls } = makeHandler({ frameworkVersion: 'V2', sdkGeneration: 'v2' });
309
+ const out = await run(handler, { ...V2_ARGS, backtest_config_path: 'backtest.yaml' });
310
+ strict_1.default.equal(out.data.errorCode, 'SDK_GENERATION_MISMATCH');
311
+ strict_1.default.match(out.data.error, /backtest_config_path is an SDK v3 input/);
312
+ strict_1.default.equal(calls.refConfigArgs, undefined);
313
+ });
314
+ (0, node_test_1.test)('the v2 path refuses a commit that resolves an SDK v3 almanak before submitting', async () => {
315
+ const { handler, calls } = makeHandler({ frameworkVersion: 'V2', sdkGeneration: 'v2', sdkVersion: '3.0.0rc9' });
316
+ const out = await run(handler, V2_ARGS);
317
+ strict_1.default.equal(out.data.errorCode, 'SDK_GENERATION_MISMATCH');
318
+ strict_1.default.match(out.data.error, /resolves almanak 3\.0\.0rc9 \(SDK v3\), but the strategy link is stored as SDK v2/);
319
+ strict_1.default.equal(calls.submitBody, undefined);
320
+ });
321
+ });
322
+ (0, node_test_1.describe)('SDK v3 backtest input helpers', () => {
323
+ (0, node_test_1.test)('backtestMode reads a plain top-level scalar only', () => {
324
+ strict_1.default.equal((0, backtest_v3_1.backtestMode)(ECONOMIC_YAML), 'economic');
325
+ strict_1.default.equal((0, backtest_v3_1.backtestMode)("# schema\nmode: 'historical_path' # detailed\n"), 'historical_path');
326
+ strict_1.default.equal((0, backtest_v3_1.backtestMode)('data:\n mode: economic\n'), null);
327
+ });
328
+ (0, node_test_1.test)('declaresBandAllocation matches only a band directly under strategy.allocations.<name>', () => {
329
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)(BAND_CONFIG), true);
330
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)(BAND_CONFIG.replace(/\n/g, '\r\n')), true);
331
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)("strategy:\n allocations:\n 'lp':\n \"band\": {lower: 1, upper: 2}\n"), true);
332
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)(RANGE_CONFIG), false);
333
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)(BAND_NAMED_RANGE_CONFIG), false);
334
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)('strategy:\n markets:\n band:\n connector: x\n'), false);
335
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)('allocations:\n position:\n band:\n lower: 1\n'), false, 'not under strategy:');
336
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)('strategy:\n allocations:\n position:\n things:\n - band: 1\n'), false);
337
+ strict_1.default.equal((0, backtest_v3_1.declaresBandAllocation)('# band: later\nstrategy:\n allocations: {}\n'), false);
338
+ });
339
+ (0, node_test_1.test)('normalizeBacktestConfigPath', () => {
340
+ strict_1.default.deepEqual((0, backtest_v3_1.normalizeBacktestConfigPath)(' ./backtest.yml '), { path: 'backtest.yml' });
341
+ strict_1.default.ok('error' in (0, backtest_v3_1.normalizeBacktestConfigPath)('a//b.yaml'));
342
+ strict_1.default.ok('error' in (0, backtest_v3_1.normalizeBacktestConfigPath)(''));
343
+ });
344
+ (0, node_test_1.test)('isValidBranchName', () => {
345
+ strict_1.default.equal((0, backtest_v3_1.isValidBranchName)('main'), true);
346
+ strict_1.default.equal((0, backtest_v3_1.isValidBranchName)('feat/x-1'), true);
347
+ for (const bad of ['-x', 'a..b', 'a b', 'x.', 'x/', 'a@{1}'])
348
+ strict_1.default.equal((0, backtest_v3_1.isValidBranchName)(bad), false, bad);
349
+ });
350
+ });
351
+ const V3_RUN = {
352
+ id: 'bt-v3',
353
+ status: 'COMPLETED',
354
+ created_at: '2026-09-24T00:00:00Z',
355
+ completed_at: '2026-09-24T00:04:00Z',
356
+ github_strategy_link_id: 'link-v3',
357
+ commit_sha: FULL_SHA,
358
+ sdk_version: '3.0.0rc9',
359
+ backtest_config: { path: 'backtest-economic.yaml' },
360
+ result_summary: { sdk_generation: 'v3', sdk_version: '3.0.0rc9', closed: true, evaluations: 48 },
361
+ error_message: null,
362
+ };
363
+ const V3_RESULT_DOC = {
364
+ sdk_generation: 'v3',
365
+ artifacts: { 'report.json': 'gs://b/r.json', 'report.html': 'gs://b/r.html' },
366
+ report: {
367
+ mode: 'economic',
368
+ closed: true,
369
+ window: { start: 1756684800, end: 1756771200 },
370
+ decision_evaluations: 48,
371
+ decision_interval: { configured_seconds: 3600, effective_seconds: 3600, cadence_fidelity: 'configured' },
372
+ metrics: { total_return_pct: 1.25, max_drawdown_pct: 0.4, sharpe_ratio: null },
373
+ net_quote_return: { quote: 'USDC', value: '12.5', return_pct: 1.25 },
374
+ positions: [{}, {}],
375
+ equity_curve: [{ time: 1, value: '1000', complete: true }, { time: 2, value: '990', complete: false }],
376
+ price_series: [{ time: 1, prices: {} }],
377
+ },
378
+ };
379
+ function makeResultsHandler(runRow, doc = V3_RESULT_DOC) {
380
+ const calls = {};
381
+ const client = {
382
+ getBacktest: async () => runRow,
383
+ getBacktestResult: async (id) => {
384
+ calls.resultId = id;
385
+ return doc;
386
+ },
387
+ };
388
+ return { handler: new tools_1.PlatformToolHandler(client, { modes: ['strategies'] }), calls };
389
+ }
390
+ async function results(handler) {
391
+ const result = await handler.callTool('backtests_results', { backtest_id: 'bt-v3' });
392
+ return JSON.parse(result.content[0].text).data;
393
+ }
394
+ (0, node_test_1.describe)('backtests_results for SDK v3 runs', () => {
395
+ (0, node_test_1.test)('a running run returns the runner progress snapshot', async () => {
396
+ const progress = { phase: 'simulating', observed_at: '2026-09-24T00:01:00Z', completed_ticks: 12, total_ticks: 48, simulation_elapsed_ms: 900 };
397
+ const { handler, calls } = makeResultsHandler({
398
+ ...V3_RUN,
399
+ status: 'RUNNING',
400
+ result_summary: null,
401
+ progress,
402
+ progress_updated_at: '2026-09-24T00:01:01Z',
403
+ });
404
+ const out = await results(handler);
405
+ strict_1.default.equal(out.sdk_generation, 'v3');
406
+ strict_1.default.equal(out.backtest_config_path, 'backtest-economic.yaml');
407
+ strict_1.default.deepEqual(out.progress, { ...progress, updated_at: '2026-09-24T00:01:01Z' });
408
+ strict_1.default.match(out.hint, /not finished/);
409
+ strict_1.default.equal(calls.resultId, undefined);
410
+ });
411
+ (0, node_test_1.test)('a failed run returns the runner failure block and stage guidance', async () => {
412
+ const { handler } = makeResultsHandler({
413
+ ...V3_RUN,
414
+ status: 'FAILED',
415
+ error_message: 'banded liquidity allocations are not supported in economic backtests yet',
416
+ result_summary: {
417
+ failure_stage: 'run',
418
+ code: 'STRATEGY_ERROR',
419
+ message: 'banded liquidity allocations are not supported in economic backtests yet',
420
+ },
421
+ });
422
+ const out = await results(handler);
423
+ strict_1.default.deepEqual(out.failure, {
424
+ stage: 'run',
425
+ code: 'STRATEGY_ERROR',
426
+ message: 'banded liquidity allocations are not supported in economic backtests yet',
427
+ });
428
+ strict_1.default.match(out.hint, /economic backtests do not model band allocations/);
429
+ strict_1.default.equal('run_validity' in out, false);
430
+ });
431
+ (0, node_test_1.test)('a preflight failure points at the author inputs', async () => {
432
+ const { handler } = makeResultsHandler({
433
+ ...V3_RUN,
434
+ status: 'FAILED',
435
+ error_message: 'backtest config is missing',
436
+ result_summary: { failure_stage: 'preflight', code: 'PREFLIGHT_FAILED', message: 'backtest config is missing' },
437
+ });
438
+ const out = await results(handler);
439
+ strict_1.default.equal(out.failure.stage, 'preflight');
440
+ strict_1.default.match(out.hint, /before simulating/);
441
+ });
442
+ (0, node_test_1.test)('a completed run returns the compact report and writes result.json', async () => {
443
+ const dir = await node_fs_1.promises.realpath(await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'backtests-v3-')));
444
+ const prev = process.cwd();
445
+ process.chdir(dir);
446
+ try {
447
+ const { handler, calls } = makeResultsHandler(V3_RUN);
448
+ const out = await results(handler);
449
+ strict_1.default.equal(calls.resultId, 'bt-v3');
450
+ strict_1.default.deepEqual(out.report_summary, {
451
+ mode: 'economic',
452
+ closed: true,
453
+ window: { start: 1756684800, end: 1756771200 },
454
+ decision_interval: { configured_seconds: 3600, effective_seconds: 3600, cadence_fidelity: 'configured' },
455
+ evaluations: 48,
456
+ metrics: { total_return_pct: 1.25, max_drawdown_pct: 0.4, sharpe_ratio: null },
457
+ net_quote_return: { quote: 'USDC', value: '12.5', return_pct: 1.25 },
458
+ positions_count: 2,
459
+ equity_points: 2,
460
+ incomplete_equity_points: 1,
461
+ });
462
+ strict_1.default.deepEqual(out.artifacts, ['report.json', 'report.html']);
463
+ strict_1.default.equal('trades_count' in out, false);
464
+ strict_1.default.equal('decision_summary' in out, false);
465
+ strict_1.default.ok(out.result_path.startsWith(node_path_1.default.join(dir, '.logs') + node_path_1.default.sep));
466
+ strict_1.default.deepEqual(JSON.parse(await node_fs_1.promises.readFile(out.result_path, 'utf8')), V3_RESULT_DOC);
467
+ }
468
+ finally {
469
+ process.chdir(prev);
470
+ }
471
+ });
472
+ });
473
+ //# sourceMappingURL=backtest-v3-tool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backtest-v3-tool.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/backtest-v3-tool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * backtests_run and backtests_results exactly as SDK v2 and unset sessions listed them before the SDK v3
3
+ * backtest support (origin/main 127daa4fa, @almanak/mcp-server 0.2.5). Those sessions must keep seeing this text.
4
+ * Generated from that revision's listTools(); do not edit by hand.
5
+ */
6
+ export declare const PRE_V3_BACKTEST_TOOL_DEFINITIONS: ({
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: string;
11
+ properties: {
12
+ strategy_link_id: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ start_time: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ end_time: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ commit_sha: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ include_gas_costs: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ interval_seconds: {
33
+ type: string;
34
+ enum: number[];
35
+ description: string;
36
+ };
37
+ price_timeframe: {
38
+ type: string;
39
+ enum: string[];
40
+ description: string;
41
+ };
42
+ strategy_config: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ show_widget: {
47
+ const: boolean;
48
+ description: string;
49
+ };
50
+ backtest_id?: undefined;
51
+ };
52
+ required: string[];
53
+ };
54
+ } | {
55
+ name: string;
56
+ description: string;
57
+ inputSchema: {
58
+ type: string;
59
+ properties: {
60
+ backtest_id: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ strategy_link_id?: undefined;
65
+ start_time?: undefined;
66
+ end_time?: undefined;
67
+ commit_sha?: undefined;
68
+ include_gas_costs?: undefined;
69
+ interval_seconds?: undefined;
70
+ price_timeframe?: undefined;
71
+ strategy_config?: undefined;
72
+ show_widget?: undefined;
73
+ };
74
+ required: string[];
75
+ };
76
+ })[];