@backtest-kit/cli 6.2.1 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.cjs CHANGED
@@ -87,64 +87,6 @@ var BacktestKitSignals__namespace = /*#__PURE__*/_interopNamespaceDefault(Backte
87
87
  });
88
88
  }
89
89
 
90
- {
91
- BacktestKit.Storage.enable();
92
- BacktestKit.Notification.enable();
93
- }
94
- {
95
- BacktestKit.Markdown.enable();
96
- BacktestKit.Report.enable();
97
- BacktestKit.Dump.enable();
98
- BacktestKit.Memory.enable();
99
- }
100
- {
101
- BacktestKit.Dump.useMarkdown();
102
- BacktestKit.Memory.usePersist();
103
- }
104
- {
105
- BacktestKit.StorageLive.usePersist();
106
- BacktestKit.StorageBacktest.useMemory();
107
- }
108
- {
109
- BacktestKit.NotificationLive.usePersist();
110
- BacktestKit.NotificationBacktest.useMemory();
111
- }
112
- {
113
- BacktestKit.Markdown.useDummy();
114
- }
115
- BacktestKit.setConfig({
116
- CC_MAX_NOTIFICATIONS: 5000,
117
- CC_MAX_SIGNALS: 750,
118
- });
119
- BacktestKit.setConfig({
120
- CC_ENABLE_DCA_EVERYWHERE: true,
121
- CC_ENABLE_PPPL_EVERYWHERE: true,
122
- CC_ENABLE_TRAILING_EVERYWHERE: true,
123
- });
124
- BacktestKit.setConfig({
125
- CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
126
- });
127
- BacktestKit.setConfig({
128
- CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
129
- CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
130
- CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
131
- CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
132
- CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
133
- CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
134
- CC_MAX_RISK_MARKDOWN_ROWS: 1000,
135
- CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
136
- CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
137
- CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
138
- CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
139
- });
140
- BacktestKit.setConfig({
141
- CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
142
- });
143
- BacktestKit.setConfig({
144
- CC_WALKER_MARKDOWN_TOP_N: 10,
145
- });
146
- BacktestKit.Log.useJsonl();
147
-
148
90
  const ERROR_HANDLER_INSTALLED = Symbol.for("error-handler-installed");
149
91
  function dumpStackTrace() {
150
92
  const trace = stackTrace__namespace.get();
@@ -830,7 +772,14 @@ class WalkerMainService {
830
772
  this.run = functoolsKit.singleshot(async (payload) => {
831
773
  this.loggerService.log("walkerMainService run", { payload });
832
774
  const strategyMap = new Map();
775
+ const cwd = process.cwd();
833
776
  for (const entryPoint of payload.entryPoints) {
777
+ const absolutePath = path.resolve(entryPoint);
778
+ const moduleRoot = path.dirname(absolutePath);
779
+ {
780
+ dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
781
+ dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
782
+ }
834
783
  await this.resolveService.attachStrategy(entryPoint);
835
784
  for (const { strategyName } of await BacktestKit.listStrategySchema()) {
836
785
  if (strategyMap.has(strategyName)) {
@@ -838,6 +787,7 @@ class WalkerMainService {
838
787
  }
839
788
  strategyMap.set(strategyName, entryPoint);
840
789
  }
790
+ BacktestKit.Cache.clear();
841
791
  }
842
792
  await this.moduleConnectionService.loadModule("./walker.module");
843
793
  {
@@ -874,7 +824,6 @@ class WalkerMainService {
874
824
  if (!frameName) {
875
825
  throw new Error("Frame name is required");
876
826
  }
877
- const cwd = process.cwd();
878
827
  const self = this;
879
828
  const callbacks = {
880
829
  async onStrategyStart(strategyName) {
@@ -882,6 +831,10 @@ class WalkerMainService {
882
831
  if (!entryPoint) {
883
832
  return;
884
833
  }
834
+ {
835
+ Setup.clear();
836
+ Setup.enable();
837
+ }
885
838
  const absolutePath = path.resolve(entryPoint);
886
839
  const moduleRoot = path.dirname(absolutePath);
887
840
  {
@@ -2441,6 +2394,112 @@ const cli = {
2441
2394
  };
2442
2395
  init();
2443
2396
 
2397
+ class SetupUtils {
2398
+ constructor() {
2399
+ this.enable = functoolsKit.singleshot(() => {
2400
+ cli.loggerService.debug("SetupUtils enable");
2401
+ {
2402
+ BacktestKit.Storage.enable();
2403
+ BacktestKit.Notification.enable();
2404
+ }
2405
+ {
2406
+ BacktestKit.Markdown.enable();
2407
+ BacktestKit.Report.enable();
2408
+ BacktestKit.Dump.enable();
2409
+ BacktestKit.Memory.enable();
2410
+ }
2411
+ {
2412
+ BacktestKit.Dump.useMarkdown();
2413
+ BacktestKit.Memory.usePersist();
2414
+ }
2415
+ {
2416
+ BacktestKit.StorageLive.usePersist();
2417
+ BacktestKit.StorageBacktest.useMemory();
2418
+ }
2419
+ {
2420
+ BacktestKit.NotificationLive.usePersist();
2421
+ BacktestKit.NotificationBacktest.useMemory();
2422
+ }
2423
+ {
2424
+ BacktestKit.Markdown.useDummy();
2425
+ BacktestKit.Log.useJsonl();
2426
+ }
2427
+ });
2428
+ this.clear = () => {
2429
+ cli.loggerService.debug("SetupUtils clear");
2430
+ if (!this.enable.hasValue()) {
2431
+ return;
2432
+ }
2433
+ this.enable.clear();
2434
+ {
2435
+ BacktestKit.PersistSignalAdapter.clear();
2436
+ BacktestKit.PersistRiskAdapter.clear();
2437
+ BacktestKit.PersistScheduleAdapter.clear();
2438
+ BacktestKit.PersistPartialAdapter.clear();
2439
+ BacktestKit.PersistBreakevenAdapter.clear();
2440
+ BacktestKit.PersistCandleAdapter.clear();
2441
+ BacktestKit.PersistStorageAdapter.clear();
2442
+ BacktestKit.PersistNotificationAdapter.clear();
2443
+ BacktestKit.PersistLogAdapter.clear();
2444
+ BacktestKit.PersistMeasureAdapter.clear();
2445
+ BacktestKit.PersistMemoryAdapter.clear();
2446
+ }
2447
+ {
2448
+ BacktestKit.Dump.clear();
2449
+ BacktestKit.Log.clear();
2450
+ BacktestKit.Markdown.clear();
2451
+ BacktestKit.Memory.clear();
2452
+ BacktestKit.Report.clear();
2453
+ }
2454
+ {
2455
+ BacktestKit.StorageLive.clear();
2456
+ BacktestKit.StorageBacktest.clear();
2457
+ }
2458
+ {
2459
+ BacktestKit.NotificationLive.clear();
2460
+ BacktestKit.NotificationBacktest.clear();
2461
+ }
2462
+ {
2463
+ BacktestKit.Cache.clear();
2464
+ }
2465
+ };
2466
+ }
2467
+ }
2468
+ const Setup = new SetupUtils();
2469
+
2470
+ Setup.enable();
2471
+ BacktestKit.setConfig({
2472
+ CC_MAX_NOTIFICATIONS: 5000,
2473
+ CC_MAX_SIGNALS: 750,
2474
+ });
2475
+ BacktestKit.setConfig({
2476
+ CC_ENABLE_DCA_EVERYWHERE: true,
2477
+ CC_ENABLE_PPPL_EVERYWHERE: true,
2478
+ CC_ENABLE_TRAILING_EVERYWHERE: true,
2479
+ });
2480
+ BacktestKit.setConfig({
2481
+ CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
2482
+ });
2483
+ BacktestKit.setConfig({
2484
+ CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
2485
+ CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
2486
+ CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
2487
+ CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
2488
+ CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
2489
+ CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
2490
+ CC_MAX_RISK_MARKDOWN_ROWS: 1000,
2491
+ CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
2492
+ CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
2493
+ CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
2494
+ CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
2495
+ });
2496
+ BacktestKit.setConfig({
2497
+ CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
2498
+ });
2499
+ BacktestKit.setConfig({
2500
+ CC_WALKER_MARKDOWN_TOP_N: 10,
2501
+ });
2502
+
2444
2503
  const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
2445
2504
  const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
2446
2505
  const HELP_TEXT$1 = `
@@ -2456,7 +2515,7 @@ const main$b = async () => {
2456
2515
  if (MODES.some((mode) => values[mode])) {
2457
2516
  return;
2458
2517
  }
2459
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
2518
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
2460
2519
  process.stdout.write("\n");
2461
2520
  process.stdout.write(`Run with --help to see available commands.\n`);
2462
2521
  process.stdout.write("\n");
@@ -3024,7 +3083,7 @@ const main$1 = async () => {
3024
3083
  if (!values.help) {
3025
3084
  return;
3026
3085
  }
3027
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n\n`);
3086
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n\n`);
3028
3087
  process.stdout.write(HELP_TEXT);
3029
3088
  process.exit(0);
3030
3089
  };
@@ -3038,7 +3097,7 @@ const main = async () => {
3038
3097
  if (!values.version) {
3039
3098
  return;
3040
3099
  }
3041
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
3100
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
3042
3101
  process.exit(0);
3043
3102
  };
3044
3103
  main();
@@ -3076,6 +3135,7 @@ async function run(mode, args) {
3076
3135
  throw new Error(`Invalid mode: ${mode}`);
3077
3136
  }
3078
3137
 
3138
+ exports.Setup = Setup;
3079
3139
  exports.cli = cli;
3080
3140
  exports.run = run;
3081
3141
  exports.setLogger = setLogger;
package/build/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import * as BacktestKit from 'backtest-kit';
3
- import { Storage, Notification, Markdown, Report, Dump, Memory, StorageLive, StorageBacktest, NotificationLive, NotificationBacktest, setConfig, Log, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, listStrategySchema, overrideExchangeSchema, Backtest, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenSync, Exchange } from 'backtest-kit';
3
+ import { Log, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, listStrategySchema, overrideExchangeSchema, Backtest, Cache, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenSync, Storage, Notification, Markdown, Report, Dump, Memory, StorageLive, StorageBacktest, NotificationLive, NotificationBacktest, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistMemoryAdapter, setConfig, Exchange } from 'backtest-kit';
4
4
  import { getErrorMessage, errorData, singleshot, str, BehaviorSubject, compose, createAwaiter, execpool, queued, sleep, randomString, TIMEOUT_SYMBOL, typo, retry, trycatch, memoize } from 'functools-kit';
5
5
  import fs, { constants } from 'fs';
6
6
  import * as stackTrace from 'stack-trace';
@@ -62,64 +62,6 @@ import { spawn } from 'child_process';
62
62
  });
63
63
  }
64
64
 
65
- {
66
- Storage.enable();
67
- Notification.enable();
68
- }
69
- {
70
- Markdown.enable();
71
- Report.enable();
72
- Dump.enable();
73
- Memory.enable();
74
- }
75
- {
76
- Dump.useMarkdown();
77
- Memory.usePersist();
78
- }
79
- {
80
- StorageLive.usePersist();
81
- StorageBacktest.useMemory();
82
- }
83
- {
84
- NotificationLive.usePersist();
85
- NotificationBacktest.useMemory();
86
- }
87
- {
88
- Markdown.useDummy();
89
- }
90
- setConfig({
91
- CC_MAX_NOTIFICATIONS: 5000,
92
- CC_MAX_SIGNALS: 750,
93
- });
94
- setConfig({
95
- CC_ENABLE_DCA_EVERYWHERE: true,
96
- CC_ENABLE_PPPL_EVERYWHERE: true,
97
- CC_ENABLE_TRAILING_EVERYWHERE: true,
98
- });
99
- setConfig({
100
- CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
101
- });
102
- setConfig({
103
- CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
104
- CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
105
- CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
106
- CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
107
- CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
108
- CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
109
- CC_MAX_RISK_MARKDOWN_ROWS: 1000,
110
- CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
111
- CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
112
- CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
113
- CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
114
- });
115
- setConfig({
116
- CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
117
- });
118
- setConfig({
119
- CC_WALKER_MARKDOWN_TOP_N: 10,
120
- });
121
- Log.useJsonl();
122
-
123
65
  const ERROR_HANDLER_INSTALLED = Symbol.for("error-handler-installed");
124
66
  function dumpStackTrace() {
125
67
  const trace = stackTrace.get();
@@ -805,7 +747,14 @@ class WalkerMainService {
805
747
  this.run = singleshot(async (payload) => {
806
748
  this.loggerService.log("walkerMainService run", { payload });
807
749
  const strategyMap = new Map();
750
+ const cwd = process.cwd();
808
751
  for (const entryPoint of payload.entryPoints) {
752
+ const absolutePath = path.resolve(entryPoint);
753
+ const moduleRoot = path.dirname(absolutePath);
754
+ {
755
+ dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
756
+ dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
757
+ }
809
758
  await this.resolveService.attachStrategy(entryPoint);
810
759
  for (const { strategyName } of await listStrategySchema()) {
811
760
  if (strategyMap.has(strategyName)) {
@@ -813,6 +762,7 @@ class WalkerMainService {
813
762
  }
814
763
  strategyMap.set(strategyName, entryPoint);
815
764
  }
765
+ Cache.clear();
816
766
  }
817
767
  await this.moduleConnectionService.loadModule("./walker.module");
818
768
  {
@@ -849,7 +799,6 @@ class WalkerMainService {
849
799
  if (!frameName) {
850
800
  throw new Error("Frame name is required");
851
801
  }
852
- const cwd = process.cwd();
853
802
  const self = this;
854
803
  const callbacks = {
855
804
  async onStrategyStart(strategyName) {
@@ -857,6 +806,10 @@ class WalkerMainService {
857
806
  if (!entryPoint) {
858
807
  return;
859
808
  }
809
+ {
810
+ Setup.clear();
811
+ Setup.enable();
812
+ }
860
813
  const absolutePath = path.resolve(entryPoint);
861
814
  const moduleRoot = path.dirname(absolutePath);
862
815
  {
@@ -2412,6 +2365,112 @@ const cli = {
2412
2365
  };
2413
2366
  init();
2414
2367
 
2368
+ class SetupUtils {
2369
+ constructor() {
2370
+ this.enable = singleshot(() => {
2371
+ cli.loggerService.debug("SetupUtils enable");
2372
+ {
2373
+ Storage.enable();
2374
+ Notification.enable();
2375
+ }
2376
+ {
2377
+ Markdown.enable();
2378
+ Report.enable();
2379
+ Dump.enable();
2380
+ Memory.enable();
2381
+ }
2382
+ {
2383
+ Dump.useMarkdown();
2384
+ Memory.usePersist();
2385
+ }
2386
+ {
2387
+ StorageLive.usePersist();
2388
+ StorageBacktest.useMemory();
2389
+ }
2390
+ {
2391
+ NotificationLive.usePersist();
2392
+ NotificationBacktest.useMemory();
2393
+ }
2394
+ {
2395
+ Markdown.useDummy();
2396
+ Log.useJsonl();
2397
+ }
2398
+ });
2399
+ this.clear = () => {
2400
+ cli.loggerService.debug("SetupUtils clear");
2401
+ if (!this.enable.hasValue()) {
2402
+ return;
2403
+ }
2404
+ this.enable.clear();
2405
+ {
2406
+ PersistSignalAdapter.clear();
2407
+ PersistRiskAdapter.clear();
2408
+ PersistScheduleAdapter.clear();
2409
+ PersistPartialAdapter.clear();
2410
+ PersistBreakevenAdapter.clear();
2411
+ PersistCandleAdapter.clear();
2412
+ PersistStorageAdapter.clear();
2413
+ PersistNotificationAdapter.clear();
2414
+ PersistLogAdapter.clear();
2415
+ PersistMeasureAdapter.clear();
2416
+ PersistMemoryAdapter.clear();
2417
+ }
2418
+ {
2419
+ Dump.clear();
2420
+ Log.clear();
2421
+ Markdown.clear();
2422
+ Memory.clear();
2423
+ Report.clear();
2424
+ }
2425
+ {
2426
+ StorageLive.clear();
2427
+ StorageBacktest.clear();
2428
+ }
2429
+ {
2430
+ NotificationLive.clear();
2431
+ NotificationBacktest.clear();
2432
+ }
2433
+ {
2434
+ Cache.clear();
2435
+ }
2436
+ };
2437
+ }
2438
+ }
2439
+ const Setup = new SetupUtils();
2440
+
2441
+ Setup.enable();
2442
+ setConfig({
2443
+ CC_MAX_NOTIFICATIONS: 5000,
2444
+ CC_MAX_SIGNALS: 750,
2445
+ });
2446
+ setConfig({
2447
+ CC_ENABLE_DCA_EVERYWHERE: true,
2448
+ CC_ENABLE_PPPL_EVERYWHERE: true,
2449
+ CC_ENABLE_TRAILING_EVERYWHERE: true,
2450
+ });
2451
+ setConfig({
2452
+ CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
2453
+ });
2454
+ setConfig({
2455
+ CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
2456
+ CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
2457
+ CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
2458
+ CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
2459
+ CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
2460
+ CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
2461
+ CC_MAX_RISK_MARKDOWN_ROWS: 1000,
2462
+ CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
2463
+ CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
2464
+ CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
2465
+ CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
2466
+ });
2467
+ setConfig({
2468
+ CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
2469
+ });
2470
+ setConfig({
2471
+ CC_WALKER_MARKDOWN_TOP_N: 10,
2472
+ });
2473
+
2415
2474
  const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
2416
2475
  const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
2417
2476
  const HELP_TEXT$1 = `
@@ -2427,7 +2486,7 @@ const main$b = async () => {
2427
2486
  if (MODES.some((mode) => values[mode])) {
2428
2487
  return;
2429
2488
  }
2430
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
2489
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
2431
2490
  process.stdout.write("\n");
2432
2491
  process.stdout.write(`Run with --help to see available commands.\n`);
2433
2492
  process.stdout.write("\n");
@@ -2995,7 +3054,7 @@ const main$1 = async () => {
2995
3054
  if (!values.help) {
2996
3055
  return;
2997
3056
  }
2998
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n\n`);
3057
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n\n`);
2999
3058
  process.stdout.write(HELP_TEXT);
3000
3059
  process.exit(0);
3001
3060
  };
@@ -3009,7 +3068,7 @@ const main = async () => {
3009
3068
  if (!values.version) {
3010
3069
  return;
3011
3070
  }
3012
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
3071
+ process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
3013
3072
  process.exit(0);
3014
3073
  };
3015
3074
  main();
@@ -3047,4 +3106,4 @@ async function run(mode, args) {
3047
3106
  throw new Error(`Invalid mode: ${mode}`);
3048
3107
  }
3049
3108
 
3050
- export { cli, run, setLogger };
3109
+ export { Setup, cli, run, setLogger };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtest-kit/cli",
3
- "version": "6.2.1",
3
+ "version": "6.5.0",
4
4
  "description": "Zero-boilerplate CLI runner for backtest-kit strategies. Run backtests, paper trading, and live bots with candle cache warming, web dashboard, and Telegram notifications — no setup code required.",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
@@ -61,11 +61,11 @@
61
61
  "devDependencies": {
62
62
  "@babel/plugin-transform-modules-umd": "7.27.1",
63
63
  "@babel/standalone": "7.29.1",
64
- "@backtest-kit/ui": "6.2.0",
65
- "@backtest-kit/graph": "6.2.0",
66
- "@backtest-kit/ollama": "6.2.0",
67
- "@backtest-kit/pinets": "6.2.0",
68
- "@backtest-kit/signals": "6.2.0",
64
+ "@backtest-kit/ui": "6.5.0",
65
+ "@backtest-kit/graph": "6.5.0",
66
+ "@backtest-kit/ollama": "6.5.0",
67
+ "@backtest-kit/pinets": "6.5.0",
68
+ "@backtest-kit/signals": "6.5.0",
69
69
  "@rollup/plugin-replace": "6.0.3",
70
70
  "@rollup/plugin-typescript": "11.1.6",
71
71
  "@types/image-size": "0.7.0",
@@ -73,7 +73,7 @@
73
73
  "@types/mustache": "4.2.6",
74
74
  "@types/node": "22.9.0",
75
75
  "@types/stack-trace": "0.0.33",
76
- "backtest-kit": "6.2.0",
76
+ "backtest-kit": "6.5.0",
77
77
  "glob": "11.0.1",
78
78
  "markdown-it": "14.1.1",
79
79
  "rimraf": "6.0.1",
@@ -88,12 +88,12 @@
88
88
  "peerDependencies": {
89
89
  "@babel/plugin-transform-modules-umd": "^7.27.1",
90
90
  "@babel/standalone": "^7.29.1",
91
- "@backtest-kit/ui": "^6.2.0",
92
- "@backtest-kit/graph": "^6.2.0",
93
- "@backtest-kit/ollama": "^6.2.0",
94
- "@backtest-kit/pinets": "^6.2.0",
95
- "@backtest-kit/signals": "^6.2.0",
96
- "backtest-kit": "^6.2.0",
91
+ "@backtest-kit/ui": "^6.5.0",
92
+ "@backtest-kit/graph": "^6.5.0",
93
+ "@backtest-kit/ollama": "^6.5.0",
94
+ "@backtest-kit/pinets": "^6.5.0",
95
+ "@backtest-kit/signals": "^6.5.0",
96
+ "backtest-kit": "^6.5.0",
97
97
  "markdown-it": "^14.1.1",
98
98
  "typescript": "^5.0.0"
99
99
  },
@@ -12,12 +12,12 @@
12
12
  "license": "ISC",
13
13
  "type": "commonjs",
14
14
  "dependencies": {
15
- "@backtest-kit/cli": "^6.2.1",
16
- "@backtest-kit/graph": "^6.2.0",
17
- "@backtest-kit/pinets": "^6.2.0",
18
- "@backtest-kit/ui": "^6.2.0",
15
+ "@backtest-kit/cli": "^6.5.0",
16
+ "@backtest-kit/graph": "^6.5.0",
17
+ "@backtest-kit/pinets": "^6.5.0",
18
+ "@backtest-kit/ui": "^6.5.0",
19
19
  "agent-swarm-kit": "^1.3.0",
20
- "backtest-kit": "^6.2.0",
20
+ "backtest-kit": "^6.5.0",
21
21
  "functools-kit": "^1.0.95",
22
22
  "garch": "^1.2.3",
23
23
  "get-moment-stamp": "^1.1.2",
package/types.d.ts CHANGED
@@ -266,6 +266,12 @@ declare const cli: {
266
266
  quickchartApiService: QuickchartApiService;
267
267
  };
268
268
 
269
+ declare class SetupUtils {
270
+ enable: (() => void) & functools_kit.ISingleshotClearable;
271
+ clear: () => void;
272
+ }
273
+ declare const Setup: SetupUtils;
274
+
269
275
  interface ILoader {
270
276
  import(filePath: string): any;
271
277
  check(filePath: string): boolean;
@@ -288,4 +294,4 @@ type Mode = "backtest" | "live" | "paper";
288
294
  type Args = Partial<PayloadBacktest> | Partial<PayloadPaper> | Partial<PayloadLive>;
289
295
  declare function run(mode: Mode, args: Args): Promise<void>;
290
296
 
291
- export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, cli, run, setLogger };
297
+ export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, Setup, cli, run, setLogger };