@backtest-kit/cli 9.2.0 → 9.3.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/README.md CHANGED
@@ -728,11 +728,53 @@ Broker.useBrokerAdapter(MyBroker);
728
728
  Broker.enable();
729
729
  ```
730
730
 
731
- ## 🔀 Import Aliases (`alias.module`)
731
+ ## ⚙️ Setup Hook (`config/setup.config`)
732
732
 
733
- `@backtest-kit/cli` lets you override any nodejs module import without touching the strategy code. Drop a `config/alias.module` file in your project root and export a mapping from module name to replacement module.
733
+ `@backtest-kit/cli` loads a `{projectRoot}/config/setup.config` file once before any module hooks or strategy code run. Use it to perform one-time initialization that must happen before the first persistence call — registering a custom storage backend, configuring a logger, seeding global state, or anything else the process needs before `backtest-kit` starts.
734
734
 
735
- The alias table is loaded once (on the first `import` call) from `{projectRoot}/config/alias.module` and applied globally to every subsequent module load via `require`/ `import`.
735
+ ### Example: MongoDB + Redis persistence via `@backtest-kit/mongo`
736
+
737
+ The most common use-case is swapping the default file-based persistence for a production-grade backend. Install `@backtest-kit/mongo` and call `setup()` — it registers all 15 persistence adapters in one call and reads connection parameters from environment variables:
738
+
739
+ ```bash
740
+ npm install @backtest-kit/mongo
741
+ ```
742
+
743
+ ```ts
744
+ // config/setup.config.ts
745
+ import { setup } from '@backtest-kit/mongo';
746
+
747
+ setup();
748
+ ```
749
+
750
+ ```env
751
+ # .env
752
+ CC_MONGO_CONNECTION_STRING=mongodb://localhost:27017/backtest-kit
753
+ CC_REDIS_HOST=127.0.0.1
754
+ CC_REDIS_PORT=6379
755
+ ```
756
+
757
+ Or pass connection parameters explicitly:
758
+
759
+ ```ts
760
+ // config/setup.config.ts
761
+ import { setup } from '@backtest-kit/mongo';
762
+
763
+ setup({
764
+ CC_MONGO_CONNECTION_STRING: 'mongodb://mongo:27017/mydb',
765
+ CC_REDIS_HOST: 'redis',
766
+ CC_REDIS_PORT: 6379,
767
+ CC_REDIS_PASSWORD: 'secret',
768
+ });
769
+ ```
770
+
771
+ No changes to strategy code are needed — `setup()` wires up the adapters transparently before `backtest-kit` makes its first persistence call.
772
+
773
+ ## 🔀 Import Aliases (`config/alias.config`)
774
+
775
+ `@backtest-kit/cli` lets you override any nodejs module import — without touching the strategy code. Drop a `config/alias.config` file in your project root and export a mapping from module name to replacement module.
776
+
777
+ The alias table is loaded once (on the first `import` call) from `{projectRoot}/config/alias.config` and applied globally to every subsequent module load via `require`/ `import`.
736
778
 
737
779
  **Use cases:**
738
780
 
@@ -740,19 +782,19 @@ The alias table is loaded once (on the first `import` call) from `{projectRoot}/
740
782
  - Swap any external api for a mock during CI runs
741
783
 
742
784
  ```ts
743
- // config/alias.module.ts — named export
785
+ // config/alias.config.ts — named export
744
786
  export const ccxt = require("./stubs/ccxt.stub.cjs");
745
787
  ```
746
788
 
747
789
  ```js
748
- // config/alias.module.cjs — default export
790
+ // config/alias.config.cjs — default export
749
791
  module.exports = {
750
792
  ccxt: require("./stubs/ccxt.stub.cjs"),
751
793
  };
752
794
  ```
753
795
 
754
796
  ```js
755
- // config/alias.module.mjs — default export
797
+ // config/alias.config.mjs — default export
756
798
  import ccxtStub from "./stubs/ccxt.stub.mjs";
757
799
 
758
800
  export default {
package/build/index.cjs CHANGED
@@ -892,6 +892,7 @@ class BacktestMainService {
892
892
  this.frontendProviderService = inject(TYPES.frontendProviderService);
893
893
  this.telegramProviderService = inject(TYPES.telegramProviderService);
894
894
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
895
+ this.configConnectionService = inject(TYPES.configConnectionService);
895
896
  this.run = functoolsKit.singleshot(async (payload) => {
896
897
  this.loggerService.log("backtestMainService run", {
897
898
  payload,
@@ -908,9 +909,10 @@ class BacktestMainService {
908
909
  const cwd = process.cwd();
909
910
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
910
911
  }
912
+ await this.configConnectionService.loadConfig("setup.config");
911
913
  {
912
914
  await this.resolveService.attachJavascript(payload.entryPoint);
913
- await this.moduleConnectionService.loadModule("./backtest.module");
915
+ await this.moduleConnectionService.loadModule("backtest.module");
914
916
  }
915
917
  {
916
918
  this.exchangeSchemaService.addSchema();
@@ -1011,6 +1013,7 @@ class WalkerMainService {
1011
1013
  this.symbolSchemaService = inject(TYPES.symbolSchemaService);
1012
1014
  this.cacheLogicService = inject(TYPES.cacheLogicService);
1013
1015
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
1016
+ this.configConnectionService = inject(TYPES.configConnectionService);
1014
1017
  this.run = functoolsKit.singleshot(async (payload) => {
1015
1018
  this.loggerService.log("walkerMainService run", { payload });
1016
1019
  {
@@ -1050,7 +1053,8 @@ class WalkerMainService {
1050
1053
  const cwd = process.cwd();
1051
1054
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1052
1055
  }
1053
- await this.moduleConnectionService.loadModule("./walker.module");
1056
+ await this.configConnectionService.loadConfig("setup.config");
1057
+ await this.moduleConnectionService.loadModule("walker.module");
1054
1058
  {
1055
1059
  this.exchangeSchemaService.addSchema();
1056
1060
  this.symbolSchemaService.addSchema();
@@ -1232,6 +1236,7 @@ class LiveMainService {
1232
1236
  this.frontendProviderService = inject(TYPES.frontendProviderService);
1233
1237
  this.telegramProviderService = inject(TYPES.telegramProviderService);
1234
1238
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
1239
+ this.configConnectionService = inject(TYPES.configConnectionService);
1235
1240
  this.run = functoolsKit.singleshot(async (payload) => {
1236
1241
  this.loggerService.log("liveMainService run", {
1237
1242
  payload,
@@ -1248,9 +1253,10 @@ class LiveMainService {
1248
1253
  const cwd = process.cwd();
1249
1254
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1250
1255
  }
1256
+ await this.configConnectionService.loadConfig("setup.config");
1251
1257
  {
1252
1258
  await this.resolveService.attachJavascript(payload.entryPoint);
1253
- await this.moduleConnectionService.loadModule("./live.module");
1259
+ await this.moduleConnectionService.loadModule("live.module");
1254
1260
  }
1255
1261
  {
1256
1262
  this.exchangeSchemaService.addSchema();
@@ -1318,6 +1324,7 @@ class PaperMainService {
1318
1324
  this.frontendProviderService = inject(TYPES.frontendProviderService);
1319
1325
  this.telegramProviderService = inject(TYPES.telegramProviderService);
1320
1326
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
1327
+ this.configConnectionService = inject(TYPES.configConnectionService);
1321
1328
  this.run = functoolsKit.singleshot(async (payload) => {
1322
1329
  this.loggerService.log("paperMainService init");
1323
1330
  {
@@ -1332,9 +1339,10 @@ class PaperMainService {
1332
1339
  const cwd = process.cwd();
1333
1340
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1334
1341
  }
1342
+ await this.configConnectionService.loadConfig("setup.config");
1335
1343
  {
1336
1344
  await this.resolveService.attachJavascript(payload.entryPoint);
1337
- await this.moduleConnectionService.loadModule("./paper.module");
1345
+ await this.moduleConnectionService.loadModule("paper.module");
1338
1346
  }
1339
1347
  {
1340
1348
  this.exchangeSchemaService.addSchema();
@@ -2594,7 +2602,7 @@ class BabelService {
2594
2602
  const IMPORT_ALIAS = {};
2595
2603
 
2596
2604
  const USE_ESMODULE_DEFAULT = false;
2597
- const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "node_modules"]);
2605
+ const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "config", "node_modules"]);
2598
2606
  const TRANSPILE_FN = functoolsKit.memoize(([path]) => `${path}`, (path, code, self, require) => {
2599
2607
  const __filename = self.__filename;
2600
2608
  const __dirname = self.__dirname;
@@ -2819,10 +2827,10 @@ globalThis.BacktestKitSignals = BacktestKitSignals__namespace;
2819
2827
 
2820
2828
  const GET_ALIAS_EXPORTS_FN = (self) => {
2821
2829
  const instance = self.getInstance(self.resolveService.OVERRIDE_CONFIG_DIR);
2822
- if (!instance.check("alias.module")) {
2830
+ if (!instance.check("alias.config")) {
2823
2831
  return null;
2824
2832
  }
2825
- const exports = instance.import("alias.module");
2833
+ const exports = instance.import("alias.config");
2826
2834
  return "default" in exports
2827
2835
  ? exports.default
2828
2836
  : exports;
@@ -3067,7 +3075,7 @@ const main$g = async () => {
3067
3075
  if (MODES.some((mode) => values[mode])) {
3068
3076
  return;
3069
3077
  }
3070
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n`);
3078
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
3071
3079
  process.stdout.write("\n");
3072
3080
  process.stdout.write(`Run with --help to see available commands.\n`);
3073
3081
  process.stdout.write("\n");
@@ -3257,10 +3265,10 @@ const main$b = async () => {
3257
3265
  main$b();
3258
3266
 
3259
3267
  const MODE_MODULE = {
3260
- backtest: "./backtest.module",
3261
- live: "./live.module",
3262
- paper: "./paper.module",
3263
- walker: "./walker.module",
3268
+ backtest: "backtest.module",
3269
+ live: "live.module",
3270
+ paper: "paper.module",
3271
+ walker: "walker.module",
3264
3272
  };
3265
3273
  const resolveMode = (values) => {
3266
3274
  const enabled = ["backtest", "live", "paper", "walker"].filter((mode) => Boolean(values[mode]));
@@ -3363,6 +3371,7 @@ const main$a = async () => {
3363
3371
  const cwd = process.cwd();
3364
3372
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3365
3373
  }
3374
+ await cli.configConnectionService.loadConfig("setup.config");
3366
3375
  await cli.moduleConnectionService.loadModule(MODE_MODULE[mode]);
3367
3376
  listenFinish();
3368
3377
  createGracefulShutdown(mode)();
@@ -3451,7 +3460,8 @@ const main$7 = async () => {
3451
3460
  const cwd = process.cwd();
3452
3461
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3453
3462
  }
3454
- await cli.moduleConnectionService.loadModule("./pine.module");
3463
+ await cli.configConnectionService.loadConfig("setup.config");
3464
+ await cli.moduleConnectionService.loadModule("pine.module");
3455
3465
  {
3456
3466
  await cli.exchangeSchemaService.addSchema();
3457
3467
  await cli.symbolSchemaService.addSchema();
@@ -3536,7 +3546,8 @@ const main$6 = async () => {
3536
3546
  const cwd = process.cwd();
3537
3547
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3538
3548
  }
3539
- await cli.moduleConnectionService.loadModule("./editor.module");
3549
+ await cli.configConnectionService.loadConfig("setup.config");
3550
+ await cli.moduleConnectionService.loadModule("editor.module");
3540
3551
  {
3541
3552
  await cli.exchangeSchemaService.addSchema();
3542
3553
  }
@@ -3569,7 +3580,8 @@ const main$5 = async () => {
3569
3580
  const cwd = process.cwd();
3570
3581
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3571
3582
  }
3572
- await cli.moduleConnectionService.loadModule("./dump.module");
3583
+ await cli.configConnectionService.loadConfig("setup.config");
3584
+ await cli.moduleConnectionService.loadModule("dump.module");
3573
3585
  {
3574
3586
  await cli.exchangeSchemaService.addSchema();
3575
3587
  await cli.symbolSchemaService.addSchema();
@@ -3636,7 +3648,8 @@ const main$4 = async () => {
3636
3648
  const cwd = process.cwd();
3637
3649
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3638
3650
  }
3639
- await cli.moduleConnectionService.loadModule("./pnldebug.module");
3651
+ await cli.configConnectionService.loadConfig("setup.config");
3652
+ await cli.moduleConnectionService.loadModule("pnldebug.module");
3640
3653
  {
3641
3654
  await cli.exchangeSchemaService.addSchema();
3642
3655
  await cli.symbolSchemaService.addSchema();
@@ -4090,7 +4103,7 @@ const main$1 = async () => {
4090
4103
  if (!values.help) {
4091
4104
  return;
4092
4105
  }
4093
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n\n`);
4106
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n\n`);
4094
4107
  process.stdout.write(HELP_TEXT);
4095
4108
  process.exit(0);
4096
4109
  };
@@ -4104,7 +4117,7 @@ const main = async () => {
4104
4117
  if (!values.version) {
4105
4118
  return;
4106
4119
  }
4107
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n`);
4120
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
4108
4121
  process.exit(0);
4109
4122
  };
4110
4123
  main();
package/build/index.mjs CHANGED
@@ -867,6 +867,7 @@ class BacktestMainService {
867
867
  this.frontendProviderService = inject(TYPES.frontendProviderService);
868
868
  this.telegramProviderService = inject(TYPES.telegramProviderService);
869
869
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
870
+ this.configConnectionService = inject(TYPES.configConnectionService);
870
871
  this.run = singleshot(async (payload) => {
871
872
  this.loggerService.log("backtestMainService run", {
872
873
  payload,
@@ -883,9 +884,10 @@ class BacktestMainService {
883
884
  const cwd = process.cwd();
884
885
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
885
886
  }
887
+ await this.configConnectionService.loadConfig("setup.config");
886
888
  {
887
889
  await this.resolveService.attachJavascript(payload.entryPoint);
888
- await this.moduleConnectionService.loadModule("./backtest.module");
890
+ await this.moduleConnectionService.loadModule("backtest.module");
889
891
  }
890
892
  {
891
893
  this.exchangeSchemaService.addSchema();
@@ -986,6 +988,7 @@ class WalkerMainService {
986
988
  this.symbolSchemaService = inject(TYPES.symbolSchemaService);
987
989
  this.cacheLogicService = inject(TYPES.cacheLogicService);
988
990
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
991
+ this.configConnectionService = inject(TYPES.configConnectionService);
989
992
  this.run = singleshot(async (payload) => {
990
993
  this.loggerService.log("walkerMainService run", { payload });
991
994
  {
@@ -1025,7 +1028,8 @@ class WalkerMainService {
1025
1028
  const cwd = process.cwd();
1026
1029
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1027
1030
  }
1028
- await this.moduleConnectionService.loadModule("./walker.module");
1031
+ await this.configConnectionService.loadConfig("setup.config");
1032
+ await this.moduleConnectionService.loadModule("walker.module");
1029
1033
  {
1030
1034
  this.exchangeSchemaService.addSchema();
1031
1035
  this.symbolSchemaService.addSchema();
@@ -1207,6 +1211,7 @@ class LiveMainService {
1207
1211
  this.frontendProviderService = inject(TYPES.frontendProviderService);
1208
1212
  this.telegramProviderService = inject(TYPES.telegramProviderService);
1209
1213
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
1214
+ this.configConnectionService = inject(TYPES.configConnectionService);
1210
1215
  this.run = singleshot(async (payload) => {
1211
1216
  this.loggerService.log("liveMainService run", {
1212
1217
  payload,
@@ -1223,9 +1228,10 @@ class LiveMainService {
1223
1228
  const cwd = process.cwd();
1224
1229
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1225
1230
  }
1231
+ await this.configConnectionService.loadConfig("setup.config");
1226
1232
  {
1227
1233
  await this.resolveService.attachJavascript(payload.entryPoint);
1228
- await this.moduleConnectionService.loadModule("./live.module");
1234
+ await this.moduleConnectionService.loadModule("live.module");
1229
1235
  }
1230
1236
  {
1231
1237
  this.exchangeSchemaService.addSchema();
@@ -1293,6 +1299,7 @@ class PaperMainService {
1293
1299
  this.frontendProviderService = inject(TYPES.frontendProviderService);
1294
1300
  this.telegramProviderService = inject(TYPES.telegramProviderService);
1295
1301
  this.moduleConnectionService = inject(TYPES.moduleConnectionService);
1302
+ this.configConnectionService = inject(TYPES.configConnectionService);
1296
1303
  this.run = singleshot(async (payload) => {
1297
1304
  this.loggerService.log("paperMainService init");
1298
1305
  {
@@ -1307,9 +1314,10 @@ class PaperMainService {
1307
1314
  const cwd = process.cwd();
1308
1315
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
1309
1316
  }
1317
+ await this.configConnectionService.loadConfig("setup.config");
1310
1318
  {
1311
1319
  await this.resolveService.attachJavascript(payload.entryPoint);
1312
- await this.moduleConnectionService.loadModule("./paper.module");
1320
+ await this.moduleConnectionService.loadModule("paper.module");
1313
1321
  }
1314
1322
  {
1315
1323
  this.exchangeSchemaService.addSchema();
@@ -2569,7 +2577,7 @@ class BabelService {
2569
2577
  const IMPORT_ALIAS = {};
2570
2578
 
2571
2579
  const USE_ESMODULE_DEFAULT = false;
2572
- const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "node_modules"]);
2580
+ const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "config", "node_modules"]);
2573
2581
  const TRANSPILE_FN = memoize(([path]) => `${path}`, (path, code, self, require) => {
2574
2582
  const __filename = self.__filename;
2575
2583
  const __dirname = self.__dirname;
@@ -2790,10 +2798,10 @@ globalThis.BacktestKitSignals = BacktestKitSignals;
2790
2798
 
2791
2799
  const GET_ALIAS_EXPORTS_FN = (self) => {
2792
2800
  const instance = self.getInstance(self.resolveService.OVERRIDE_CONFIG_DIR);
2793
- if (!instance.check("alias.module")) {
2801
+ if (!instance.check("alias.config")) {
2794
2802
  return null;
2795
2803
  }
2796
- const exports = instance.import("alias.module");
2804
+ const exports = instance.import("alias.config");
2797
2805
  return "default" in exports
2798
2806
  ? exports.default
2799
2807
  : exports;
@@ -3038,7 +3046,7 @@ const main$g = async () => {
3038
3046
  if (MODES.some((mode) => values[mode])) {
3039
3047
  return;
3040
3048
  }
3041
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n`);
3049
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
3042
3050
  process.stdout.write("\n");
3043
3051
  process.stdout.write(`Run with --help to see available commands.\n`);
3044
3052
  process.stdout.write("\n");
@@ -3228,10 +3236,10 @@ const main$b = async () => {
3228
3236
  main$b();
3229
3237
 
3230
3238
  const MODE_MODULE = {
3231
- backtest: "./backtest.module",
3232
- live: "./live.module",
3233
- paper: "./paper.module",
3234
- walker: "./walker.module",
3239
+ backtest: "backtest.module",
3240
+ live: "live.module",
3241
+ paper: "paper.module",
3242
+ walker: "walker.module",
3235
3243
  };
3236
3244
  const resolveMode = (values) => {
3237
3245
  const enabled = ["backtest", "live", "paper", "walker"].filter((mode) => Boolean(values[mode]));
@@ -3334,6 +3342,7 @@ const main$a = async () => {
3334
3342
  const cwd = process.cwd();
3335
3343
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3336
3344
  }
3345
+ await cli.configConnectionService.loadConfig("setup.config");
3337
3346
  await cli.moduleConnectionService.loadModule(MODE_MODULE[mode]);
3338
3347
  listenFinish();
3339
3348
  createGracefulShutdown(mode)();
@@ -3422,7 +3431,8 @@ const main$7 = async () => {
3422
3431
  const cwd = process.cwd();
3423
3432
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3424
3433
  }
3425
- await cli.moduleConnectionService.loadModule("./pine.module");
3434
+ await cli.configConnectionService.loadConfig("setup.config");
3435
+ await cli.moduleConnectionService.loadModule("pine.module");
3426
3436
  {
3427
3437
  await cli.exchangeSchemaService.addSchema();
3428
3438
  await cli.symbolSchemaService.addSchema();
@@ -3507,7 +3517,8 @@ const main$6 = async () => {
3507
3517
  const cwd = process.cwd();
3508
3518
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3509
3519
  }
3510
- await cli.moduleConnectionService.loadModule("./editor.module");
3520
+ await cli.configConnectionService.loadConfig("setup.config");
3521
+ await cli.moduleConnectionService.loadModule("editor.module");
3511
3522
  {
3512
3523
  await cli.exchangeSchemaService.addSchema();
3513
3524
  }
@@ -3540,7 +3551,8 @@ const main$5 = async () => {
3540
3551
  const cwd = process.cwd();
3541
3552
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3542
3553
  }
3543
- await cli.moduleConnectionService.loadModule("./dump.module");
3554
+ await cli.configConnectionService.loadConfig("setup.config");
3555
+ await cli.moduleConnectionService.loadModule("dump.module");
3544
3556
  {
3545
3557
  await cli.exchangeSchemaService.addSchema();
3546
3558
  await cli.symbolSchemaService.addSchema();
@@ -3607,7 +3619,8 @@ const main$4 = async () => {
3607
3619
  const cwd = process.cwd();
3608
3620
  dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
3609
3621
  }
3610
- await cli.moduleConnectionService.loadModule("./pnldebug.module");
3622
+ await cli.configConnectionService.loadConfig("setup.config");
3623
+ await cli.moduleConnectionService.loadModule("pnldebug.module");
3611
3624
  {
3612
3625
  await cli.exchangeSchemaService.addSchema();
3613
3626
  await cli.symbolSchemaService.addSchema();
@@ -4061,7 +4074,7 @@ const main$1 = async () => {
4061
4074
  if (!values.help) {
4062
4075
  return;
4063
4076
  }
4064
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n\n`);
4077
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n\n`);
4065
4078
  process.stdout.write(HELP_TEXT);
4066
4079
  process.exit(0);
4067
4080
  };
@@ -4075,7 +4088,7 @@ const main = async () => {
4075
4088
  if (!values.version) {
4076
4089
  return;
4077
4090
  }
4078
- process.stdout.write(`@backtest-kit/cli ${"9.2.0"}\n`);
4091
+ process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
4079
4092
  process.exit(0);
4080
4093
  };
4081
4094
  main();
@@ -15,17 +15,17 @@
15
15
  "@types/node": "25.6.0"
16
16
  },
17
17
  "dependencies": {
18
- "@backtest-kit/cli": "9.2.0",
19
- "@backtest-kit/graph": "9.2.0",
20
- "@backtest-kit/pinets": "9.2.0",
21
- "@backtest-kit/signals": "9.2.0",
22
- "@backtest-kit/ui": "9.2.0",
18
+ "@backtest-kit/cli": "9.3.0",
19
+ "@backtest-kit/graph": "9.3.0",
20
+ "@backtest-kit/pinets": "9.3.0",
21
+ "@backtest-kit/signals": "9.3.0",
22
+ "@backtest-kit/ui": "9.3.0",
23
23
  "@tavily/core": "0.7.2",
24
24
  "@tensorflow/tfjs": "4.22.0",
25
25
  "@tensorflow/tfjs-backend-wasm": "4.22.0",
26
26
  "@tensorflow/tfjs-core": "4.22.0",
27
27
  "agent-swarm-kit": "2.6.0",
28
- "backtest-kit": "9.2.0",
28
+ "backtest-kit": "9.3.0",
29
29
  "dayjs": "1.11.20",
30
30
  "functools-kit": "2.3.0",
31
31
  "garch": "1.2.3",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtest-kit/cli",
3
- "version": "9.2.0",
3
+ "version": "9.3.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",
@@ -63,11 +63,11 @@
63
63
  "devDependencies": {
64
64
  "@babel/plugin-transform-modules-umd": "7.27.1",
65
65
  "@babel/standalone": "7.29.1",
66
- "@backtest-kit/graph": "9.2.0",
67
- "@backtest-kit/ollama": "9.2.0",
68
- "@backtest-kit/pinets": "9.2.0",
69
- "@backtest-kit/signals": "9.2.0",
70
- "@backtest-kit/ui": "9.2.0",
66
+ "@backtest-kit/graph": "9.3.0",
67
+ "@backtest-kit/ollama": "9.3.0",
68
+ "@backtest-kit/pinets": "9.3.0",
69
+ "@backtest-kit/signals": "9.3.0",
70
+ "@backtest-kit/ui": "9.3.0",
71
71
  "@rollup/plugin-replace": "6.0.3",
72
72
  "@rollup/plugin-typescript": "11.1.6",
73
73
  "@types/image-size": "0.7.0",
@@ -75,7 +75,7 @@
75
75
  "@types/mustache": "4.2.6",
76
76
  "@types/node": "22.9.0",
77
77
  "@types/stack-trace": "0.0.33",
78
- "backtest-kit": "9.2.0",
78
+ "backtest-kit": "9.3.0",
79
79
  "glob": "11.0.1",
80
80
  "markdown-it": "14.1.1",
81
81
  "rimraf": "6.0.1",
@@ -90,12 +90,12 @@
90
90
  "peerDependencies": {
91
91
  "@babel/plugin-transform-modules-umd": "^7.27.1",
92
92
  "@babel/standalone": "^7.29.1",
93
- "@backtest-kit/graph": "^9.2.0",
94
- "@backtest-kit/ollama": "^9.2.0",
95
- "@backtest-kit/pinets": "^9.2.0",
96
- "@backtest-kit/signals": "^9.2.0",
97
- "@backtest-kit/ui": "^9.2.0",
98
- "backtest-kit": "^9.2.0",
93
+ "@backtest-kit/graph": "^9.3.0",
94
+ "@backtest-kit/ollama": "^9.3.0",
95
+ "@backtest-kit/pinets": "^9.3.0",
96
+ "@backtest-kit/signals": "^9.3.0",
97
+ "@backtest-kit/ui": "^9.3.0",
98
+ "backtest-kit": "^9.3.0",
99
99
  "markdown-it": "^14.1.1",
100
100
  "typescript": "^5.0.0"
101
101
  },
@@ -13,12 +13,12 @@
13
13
  "license": "ISC",
14
14
  "type": "commonjs",
15
15
  "dependencies": {
16
- "@backtest-kit/cli": "^9.2.0",
17
- "@backtest-kit/graph": "^9.2.0",
18
- "@backtest-kit/pinets": "^9.2.0",
19
- "@backtest-kit/ui": "^9.2.0",
16
+ "@backtest-kit/cli": "^9.3.0",
17
+ "@backtest-kit/graph": "^9.3.0",
18
+ "@backtest-kit/pinets": "^9.3.0",
19
+ "@backtest-kit/ui": "^9.3.0",
20
20
  "agent-swarm-kit": "^2.6.0",
21
- "backtest-kit": "^9.2.0",
21
+ "backtest-kit": "^9.3.0",
22
22
  "functools-kit": "^2.3.0",
23
23
  "garch": "^1.2.3",
24
24
  "get-moment-stamp": "^1.1.2",
package/types.d.ts CHANGED
@@ -33,6 +33,7 @@ declare class PaperMainService {
33
33
  private frontendProviderService;
34
34
  private telegramProviderService;
35
35
  private moduleConnectionService;
36
+ private configConnectionService;
36
37
  run: ((payload: {
37
38
  entryPoint: string;
38
39
  symbol: string;
@@ -58,6 +59,7 @@ declare class LiveMainService {
58
59
  private frontendProviderService;
59
60
  private telegramProviderService;
60
61
  private moduleConnectionService;
62
+ private configConnectionService;
61
63
  run: ((payload: {
62
64
  entryPoint: string;
63
65
  symbol: string;
@@ -85,6 +87,7 @@ declare class BacktestMainService {
85
87
  private frontendProviderService;
86
88
  private telegramProviderService;
87
89
  private moduleConnectionService;
90
+ private configConnectionService;
88
91
  run: ((payload: {
89
92
  entryPoint: string;
90
93
  symbol: string;
@@ -115,6 +118,7 @@ declare class WalkerMainService {
115
118
  private symbolSchemaService;
116
119
  private cacheLogicService;
117
120
  private moduleConnectionService;
121
+ private configConnectionService;
118
122
  run: ((payload: {
119
123
  entryPoints: string[];
120
124
  symbol: string;