@backtest-kit/cli 6.2.1 → 6.4.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();
@@ -882,6 +824,10 @@ class WalkerMainService {
882
824
  if (!entryPoint) {
883
825
  return;
884
826
  }
827
+ {
828
+ Setup.clear();
829
+ Setup.enable();
830
+ }
885
831
  const absolutePath = path.resolve(entryPoint);
886
832
  const moduleRoot = path.dirname(absolutePath);
887
833
  {
@@ -2441,6 +2387,109 @@ const cli = {
2441
2387
  };
2442
2388
  init();
2443
2389
 
2390
+ class SetupUtils {
2391
+ constructor() {
2392
+ this.enable = functoolsKit.singleshot(() => {
2393
+ cli.loggerService.debug("SetupUtils enable");
2394
+ {
2395
+ BacktestKit.Storage.enable();
2396
+ BacktestKit.Notification.enable();
2397
+ }
2398
+ {
2399
+ BacktestKit.Markdown.enable();
2400
+ BacktestKit.Report.enable();
2401
+ BacktestKit.Dump.enable();
2402
+ BacktestKit.Memory.enable();
2403
+ }
2404
+ {
2405
+ BacktestKit.Dump.useMarkdown();
2406
+ BacktestKit.Memory.usePersist();
2407
+ }
2408
+ {
2409
+ BacktestKit.StorageLive.usePersist();
2410
+ BacktestKit.StorageBacktest.useMemory();
2411
+ }
2412
+ {
2413
+ BacktestKit.NotificationLive.usePersist();
2414
+ BacktestKit.NotificationBacktest.useMemory();
2415
+ }
2416
+ {
2417
+ BacktestKit.Markdown.useDummy();
2418
+ BacktestKit.Log.useJsonl();
2419
+ }
2420
+ });
2421
+ this.clear = () => {
2422
+ cli.loggerService.debug("SetupUtils clear");
2423
+ if (!this.enable.hasValue()) {
2424
+ return;
2425
+ }
2426
+ this.enable.clear();
2427
+ {
2428
+ BacktestKit.PersistSignalAdapter.clear();
2429
+ BacktestKit.PersistRiskAdapter.clear();
2430
+ BacktestKit.PersistScheduleAdapter.clear();
2431
+ BacktestKit.PersistPartialAdapter.clear();
2432
+ BacktestKit.PersistBreakevenAdapter.clear();
2433
+ BacktestKit.PersistCandleAdapter.clear();
2434
+ BacktestKit.PersistStorageAdapter.clear();
2435
+ BacktestKit.PersistNotificationAdapter.clear();
2436
+ BacktestKit.PersistLogAdapter.clear();
2437
+ BacktestKit.PersistMeasureAdapter.clear();
2438
+ BacktestKit.PersistMemoryAdapter.clear();
2439
+ }
2440
+ {
2441
+ BacktestKit.Dump.clear();
2442
+ BacktestKit.Log.clear();
2443
+ BacktestKit.Markdown.clear();
2444
+ BacktestKit.Memory.clear();
2445
+ BacktestKit.Report.clear();
2446
+ }
2447
+ {
2448
+ BacktestKit.StorageLive.clear();
2449
+ BacktestKit.StorageBacktest.clear();
2450
+ }
2451
+ {
2452
+ BacktestKit.NotificationLive.clear();
2453
+ BacktestKit.NotificationBacktest.clear();
2454
+ }
2455
+ };
2456
+ }
2457
+ }
2458
+ const Setup = new SetupUtils();
2459
+
2460
+ Setup.enable();
2461
+ BacktestKit.setConfig({
2462
+ CC_MAX_NOTIFICATIONS: 5000,
2463
+ CC_MAX_SIGNALS: 750,
2464
+ });
2465
+ BacktestKit.setConfig({
2466
+ CC_ENABLE_DCA_EVERYWHERE: true,
2467
+ CC_ENABLE_PPPL_EVERYWHERE: true,
2468
+ CC_ENABLE_TRAILING_EVERYWHERE: true,
2469
+ });
2470
+ BacktestKit.setConfig({
2471
+ CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
2472
+ });
2473
+ BacktestKit.setConfig({
2474
+ CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
2475
+ CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
2476
+ CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
2477
+ CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
2478
+ CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
2479
+ CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
2480
+ CC_MAX_RISK_MARKDOWN_ROWS: 1000,
2481
+ CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
2482
+ CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
2483
+ CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
2484
+ CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
2485
+ });
2486
+ BacktestKit.setConfig({
2487
+ CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
2488
+ });
2489
+ BacktestKit.setConfig({
2490
+ CC_WALKER_MARKDOWN_TOP_N: 10,
2491
+ });
2492
+
2444
2493
  const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
2445
2494
  const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
2446
2495
  const HELP_TEXT$1 = `
@@ -2456,7 +2505,7 @@ const main$b = async () => {
2456
2505
  if (MODES.some((mode) => values[mode])) {
2457
2506
  return;
2458
2507
  }
2459
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
2508
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n`);
2460
2509
  process.stdout.write("\n");
2461
2510
  process.stdout.write(`Run with --help to see available commands.\n`);
2462
2511
  process.stdout.write("\n");
@@ -3024,7 +3073,7 @@ const main$1 = async () => {
3024
3073
  if (!values.help) {
3025
3074
  return;
3026
3075
  }
3027
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n\n`);
3076
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n\n`);
3028
3077
  process.stdout.write(HELP_TEXT);
3029
3078
  process.exit(0);
3030
3079
  };
@@ -3038,7 +3087,7 @@ const main = async () => {
3038
3087
  if (!values.version) {
3039
3088
  return;
3040
3089
  }
3041
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
3090
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n`);
3042
3091
  process.exit(0);
3043
3092
  };
3044
3093
  main();
@@ -3076,6 +3125,7 @@ async function run(mode, args) {
3076
3125
  throw new Error(`Invalid mode: ${mode}`);
3077
3126
  }
3078
3127
 
3128
+ exports.Setup = Setup;
3079
3129
  exports.cli = cli;
3080
3130
  exports.run = run;
3081
3131
  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, 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();
@@ -857,6 +799,10 @@ class WalkerMainService {
857
799
  if (!entryPoint) {
858
800
  return;
859
801
  }
802
+ {
803
+ Setup.clear();
804
+ Setup.enable();
805
+ }
860
806
  const absolutePath = path.resolve(entryPoint);
861
807
  const moduleRoot = path.dirname(absolutePath);
862
808
  {
@@ -2412,6 +2358,109 @@ const cli = {
2412
2358
  };
2413
2359
  init();
2414
2360
 
2361
+ class SetupUtils {
2362
+ constructor() {
2363
+ this.enable = singleshot(() => {
2364
+ cli.loggerService.debug("SetupUtils enable");
2365
+ {
2366
+ Storage.enable();
2367
+ Notification.enable();
2368
+ }
2369
+ {
2370
+ Markdown.enable();
2371
+ Report.enable();
2372
+ Dump.enable();
2373
+ Memory.enable();
2374
+ }
2375
+ {
2376
+ Dump.useMarkdown();
2377
+ Memory.usePersist();
2378
+ }
2379
+ {
2380
+ StorageLive.usePersist();
2381
+ StorageBacktest.useMemory();
2382
+ }
2383
+ {
2384
+ NotificationLive.usePersist();
2385
+ NotificationBacktest.useMemory();
2386
+ }
2387
+ {
2388
+ Markdown.useDummy();
2389
+ Log.useJsonl();
2390
+ }
2391
+ });
2392
+ this.clear = () => {
2393
+ cli.loggerService.debug("SetupUtils clear");
2394
+ if (!this.enable.hasValue()) {
2395
+ return;
2396
+ }
2397
+ this.enable.clear();
2398
+ {
2399
+ PersistSignalAdapter.clear();
2400
+ PersistRiskAdapter.clear();
2401
+ PersistScheduleAdapter.clear();
2402
+ PersistPartialAdapter.clear();
2403
+ PersistBreakevenAdapter.clear();
2404
+ PersistCandleAdapter.clear();
2405
+ PersistStorageAdapter.clear();
2406
+ PersistNotificationAdapter.clear();
2407
+ PersistLogAdapter.clear();
2408
+ PersistMeasureAdapter.clear();
2409
+ PersistMemoryAdapter.clear();
2410
+ }
2411
+ {
2412
+ Dump.clear();
2413
+ Log.clear();
2414
+ Markdown.clear();
2415
+ Memory.clear();
2416
+ Report.clear();
2417
+ }
2418
+ {
2419
+ StorageLive.clear();
2420
+ StorageBacktest.clear();
2421
+ }
2422
+ {
2423
+ NotificationLive.clear();
2424
+ NotificationBacktest.clear();
2425
+ }
2426
+ };
2427
+ }
2428
+ }
2429
+ const Setup = new SetupUtils();
2430
+
2431
+ Setup.enable();
2432
+ setConfig({
2433
+ CC_MAX_NOTIFICATIONS: 5000,
2434
+ CC_MAX_SIGNALS: 750,
2435
+ });
2436
+ setConfig({
2437
+ CC_ENABLE_DCA_EVERYWHERE: true,
2438
+ CC_ENABLE_PPPL_EVERYWHERE: true,
2439
+ CC_ENABLE_TRAILING_EVERYWHERE: true,
2440
+ });
2441
+ setConfig({
2442
+ CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
2443
+ });
2444
+ setConfig({
2445
+ CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
2446
+ CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
2447
+ CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
2448
+ CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
2449
+ CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
2450
+ CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
2451
+ CC_MAX_RISK_MARKDOWN_ROWS: 1000,
2452
+ CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
2453
+ CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
2454
+ CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
2455
+ CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
2456
+ });
2457
+ setConfig({
2458
+ CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
2459
+ });
2460
+ setConfig({
2461
+ CC_WALKER_MARKDOWN_TOP_N: 10,
2462
+ });
2463
+
2415
2464
  const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
2416
2465
  const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
2417
2466
  const HELP_TEXT$1 = `
@@ -2427,7 +2476,7 @@ const main$b = async () => {
2427
2476
  if (MODES.some((mode) => values[mode])) {
2428
2477
  return;
2429
2478
  }
2430
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
2479
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n`);
2431
2480
  process.stdout.write("\n");
2432
2481
  process.stdout.write(`Run with --help to see available commands.\n`);
2433
2482
  process.stdout.write("\n");
@@ -2995,7 +3044,7 @@ const main$1 = async () => {
2995
3044
  if (!values.help) {
2996
3045
  return;
2997
3046
  }
2998
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n\n`);
3047
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n\n`);
2999
3048
  process.stdout.write(HELP_TEXT);
3000
3049
  process.exit(0);
3001
3050
  };
@@ -3009,7 +3058,7 @@ const main = async () => {
3009
3058
  if (!values.version) {
3010
3059
  return;
3011
3060
  }
3012
- process.stdout.write(`@backtest-kit/cli ${"6.2.1"}\n`);
3061
+ process.stdout.write(`@backtest-kit/cli ${"6.3.0"}\n`);
3013
3062
  process.exit(0);
3014
3063
  };
3015
3064
  main();
@@ -3047,4 +3096,4 @@ async function run(mode, args) {
3047
3096
  throw new Error(`Invalid mode: ${mode}`);
3048
3097
  }
3049
3098
 
3050
- export { cli, run, setLogger };
3099
+ 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.4.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.4.0",
65
+ "@backtest-kit/graph": "6.4.0",
66
+ "@backtest-kit/ollama": "6.4.0",
67
+ "@backtest-kit/pinets": "6.4.0",
68
+ "@backtest-kit/signals": "6.4.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.4.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.4.0",
92
+ "@backtest-kit/graph": "^6.4.0",
93
+ "@backtest-kit/ollama": "^6.4.0",
94
+ "@backtest-kit/pinets": "^6.4.0",
95
+ "@backtest-kit/signals": "^6.4.0",
96
+ "backtest-kit": "^6.4.0",
97
97
  "markdown-it": "^14.1.1",
98
98
  "typescript": "^5.0.0"
99
99
  },
package/types.d.ts CHANGED
@@ -1,291 +1,297 @@
1
- import * as functools_kit from 'functools-kit';
2
- import { CandleInterval, TrailingTakeCommit, TrailingStopCommit, BreakevenCommit, PartialProfitCommit, PartialLossCommit, IStrategyTickResultScheduled, IStrategyTickResultCancelled, IStrategyTickResultOpened, IStrategyTickResultClosed, RiskContract, AverageBuyCommit, SignalOpenContract, SignalCloseContract, CancelScheduledCommit, ClosePendingCommit } from 'backtest-kit';
3
- import { Input } from 'telegraf';
4
-
5
- interface ILogger {
6
- log(topic: string, ...args: any[]): void;
7
- debug(topic: string, ...args: any[]): void;
8
- info(topic: string, ...args: any[]): void;
9
- warn(topic: string, ...args: any[]): void;
10
- }
11
-
12
- declare class LoggerService implements ILogger {
13
- private _commonLogger;
14
- log: (topic: string, ...args: any[]) => Promise<void>;
15
- debug: (topic: string, ...args: any[]) => Promise<void>;
16
- info: (topic: string, ...args: any[]) => Promise<void>;
17
- warn: (topic: string, ...args: any[]) => Promise<void>;
18
- setLogger: (logger: ILogger) => void;
19
- }
20
-
21
- declare class PaperMainService {
22
- private loggerService;
23
- private resolveService;
24
- private exchangeSchemaService;
25
- private symbolSchemaService;
26
- private frontendProviderService;
27
- private telegramProviderService;
28
- private moduleConnectionService;
29
- run: ((payload: {
30
- entryPoint: string;
31
- symbol: string;
32
- strategy: string;
33
- exchange: string;
34
- verbose: boolean;
35
- }) => Promise<void>) & functools_kit.ISingleshotClearable;
36
- connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
37
- }
38
-
39
- declare class LiveMainService {
40
- private loggerService;
41
- private resolveService;
42
- private exchangeSchemaService;
43
- private symbolSchemaService;
44
- private frontendProviderService;
45
- private telegramProviderService;
46
- private moduleConnectionService;
47
- run: ((payload: {
48
- entryPoint: string;
49
- symbol: string;
50
- strategy: string;
51
- exchange: string;
52
- verbose: boolean;
53
- }) => Promise<void>) & functools_kit.ISingleshotClearable;
54
- connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
55
- }
56
-
57
- declare class BacktestMainService {
58
- private loggerService;
59
- private resolveService;
60
- private exchangeSchemaService;
61
- private frameSchemaService;
62
- private symbolSchemaService;
63
- private cacheLogicService;
64
- private frontendProviderService;
65
- private telegramProviderService;
66
- private moduleConnectionService;
67
- run: ((payload: {
68
- entryPoint: string;
69
- symbol: string;
70
- strategy: string;
71
- exchange: string;
72
- frame: string;
73
- cacheInterval: string[];
74
- verbose: boolean;
75
- noCache: boolean;
76
- }) => Promise<void>) & functools_kit.ISingleshotClearable;
77
- connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
78
- }
79
-
80
- declare class WalkerMainService {
81
- private loggerService;
82
- private resolveService;
83
- private exchangeSchemaService;
84
- private symbolSchemaService;
85
- private cacheLogicService;
86
- private moduleConnectionService;
87
- run: ((payload: {
88
- entryPoints: string[];
89
- symbol: string;
90
- output: string;
91
- cacheInterval: CandleInterval[];
92
- json: boolean;
93
- markdown: boolean;
94
- verbose: boolean;
95
- noCache: boolean;
96
- }) => Promise<void>) & functools_kit.ISingleshotClearable;
97
- connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
98
- }
99
-
100
- declare class ExchangeSchemaService {
101
- readonly loggerService: LoggerService;
102
- addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
103
- }
104
-
105
- declare class FrameSchemaService {
106
- readonly loggerService: LoggerService;
107
- addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
108
- }
109
-
110
- declare class LoaderService {
111
- private readonly babelService;
112
- private readonly loggerService;
113
- private getInstance;
114
- import: (filePath: string, basePath?: string) => any;
115
- check: (filePath: string, basePath?: string) => Promise<boolean>;
116
- }
117
-
118
- declare class ResolveService {
119
- readonly loggerService: LoggerService;
120
- readonly loaderService: LoaderService;
121
- readonly DEFAULT_TEMPLATE_DIR: string;
122
- readonly DEFAULT_MODULES_DIR: string;
123
- readonly OVERRIDE_TEMPLATE_DIR: string;
124
- readonly OVERRIDE_MODULES_DIR: string;
125
- getIsLaunched: () => boolean;
126
- attachPine: (pinePath: string) => Promise<string>;
127
- attachStrategy: (jsPath: string) => Promise<void>;
128
- attachJavascript: (jsPath: string) => Promise<void>;
129
- }
130
-
131
- declare class ErrorService {
132
- handleGlobalError: (error: Error) => Promise<void>;
133
- private _listenForError;
134
- protected init: (() => void) & functools_kit.ISingleshotClearable;
135
- }
136
-
137
- declare class SymbolSchemaService {
138
- readonly loggerService: LoggerService;
139
- addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
140
- }
141
-
142
- declare class FrontendProviderService {
143
- private readonly loggerService;
144
- enable: (() => () => void) & functools_kit.ISingleshotClearable;
145
- disable: () => void;
146
- connect: (() => Promise<() => void>) & functools_kit.ISingleshotClearable;
147
- }
148
-
149
- declare class TelegramProviderService {
150
- private readonly loggerService;
151
- private readonly telegramLogicService;
152
- enable: (() => () => void) & functools_kit.ISingleshotClearable;
153
- disable: () => void;
154
- connect: (() => Promise<() => void>) & functools_kit.ISingleshotClearable;
155
- }
156
-
157
- declare class CacheLogicService {
158
- private readonly loggerService;
159
- execute: (intervalList: CandleInterval[], dto: {
160
- symbol: string;
161
- frameName: string;
162
- exchangeName: string;
163
- }) => Promise<void>;
164
- }
165
-
166
- type InputFile = ReturnType<typeof Input.fromReadableStream>;
167
- type Image = string | InputFile;
168
- declare class TelegramApiService {
169
- publish: (channel: string, msg: string, images?: Image[]) => Promise<"Message scheduled for publication" | "Message published successfully">;
170
- }
171
-
172
- declare class QuickchartApiService {
173
- readonly loggerService: LoggerService;
174
- getChart: (symbol: string, interval: string) => Promise<Buffer<ArrayBufferLike>>;
175
- }
176
-
177
- declare class TelegramWebService {
178
- private readonly loggerService;
179
- private readonly telegramApiService;
180
- private readonly quickchartApiService;
181
- publishNotify: (dto: {
182
- symbol: string;
183
- markdown: string;
184
- }) => Promise<void>;
185
- }
186
-
187
- declare class TelegramLogicService {
188
- private readonly loggerService;
189
- private readonly telegramTemplateService;
190
- private readonly telegramWebService;
191
- private notifyTrailingTake;
192
- private notifyTrailingStop;
193
- private notifyBreakeven;
194
- private notifyPartialProfit;
195
- private notifyPartialLoss;
196
- private notifyScheduled;
197
- private notifyCancelled;
198
- private notifyOpened;
199
- private notifyClosed;
200
- private notifyRisk;
201
- private notifyAverageBuy;
202
- private notifySignalOpen;
203
- private notifySignalClose;
204
- private notifyCancelScheduled;
205
- private notifyClosePending;
206
- connect: (() => () => void) & functools_kit.ISingleshotClearable;
207
- }
208
-
209
- declare class TelegramTemplateService {
210
- readonly loggerService: LoggerService;
211
- readonly resolveService: ResolveService;
212
- getTrailingTakeMarkdown: (event: TrailingTakeCommit) => Promise<string>;
213
- getTrailingStopMarkdown: (event: TrailingStopCommit) => Promise<string>;
214
- getBreakevenMarkdown: (event: BreakevenCommit) => Promise<string>;
215
- getPartialProfitMarkdown: (event: PartialProfitCommit) => Promise<string>;
216
- getPartialLossMarkdown: (event: PartialLossCommit) => Promise<string>;
217
- getScheduledMarkdown: (event: IStrategyTickResultScheduled) => Promise<string>;
218
- getCancelledMarkdown: (event: IStrategyTickResultCancelled) => Promise<string>;
219
- getOpenedMarkdown: (event: IStrategyTickResultOpened) => Promise<string>;
220
- getClosedMarkdown: (event: IStrategyTickResultClosed) => Promise<string>;
221
- getRiskMarkdown: (event: RiskContract) => Promise<string>;
222
- getAverageBuyMarkdown: (event: AverageBuyCommit) => Promise<string>;
223
- getSignalOpenMarkdown: (event: SignalOpenContract) => Promise<string>;
224
- getSignalCloseMarkdown: (event: SignalCloseContract) => Promise<string>;
225
- getCancelScheduledMarkdown: (event: CancelScheduledCommit) => Promise<string>;
226
- getClosePendingMarkdown: (event: ClosePendingCommit) => Promise<string>;
227
- }
228
-
229
- declare class ModuleConnectionService {
230
- readonly loggerService: LoggerService;
231
- readonly resolveService: ResolveService;
232
- readonly loaderService: LoaderService;
233
- loadModule: (fileName: string) => Promise<boolean>;
234
- }
235
-
236
- interface IBabel {
237
- transpile(code: string): string;
238
- }
239
-
240
- declare class BabelService implements IBabel {
241
- readonly loggerService: LoggerService;
242
- transpile: (code: string) => any;
243
- }
244
-
245
- declare const cli: {
246
- telegramTemplateService: TelegramTemplateService;
247
- telegramWebService: TelegramWebService;
248
- frontendProviderService: FrontendProviderService;
249
- telegramProviderService: TelegramProviderService;
250
- exchangeSchemaService: ExchangeSchemaService;
251
- symbolSchemaService: SymbolSchemaService;
252
- frameSchemaService: FrameSchemaService;
253
- cacheLogicService: CacheLogicService;
254
- telegramLogicService: TelegramLogicService;
255
- backtestMainService: BacktestMainService;
256
- walkerMainService: WalkerMainService;
257
- paperMainService: PaperMainService;
258
- liveMainService: LiveMainService;
259
- moduleConnectionService: ModuleConnectionService;
260
- errorService: ErrorService;
261
- loggerService: LoggerService;
262
- resolveService: ResolveService;
263
- loaderService: LoaderService;
264
- babelService: BabelService;
265
- telegramApiService: TelegramApiService;
266
- quickchartApiService: QuickchartApiService;
267
- };
268
-
269
- interface ILoader {
270
- import(filePath: string): any;
271
- check(filePath: string): boolean;
272
- }
273
-
274
- declare enum ExchangeName {
275
- DefaultExchange = "default_exchange"
276
- }
277
-
278
- declare enum FrameName {
279
- DefaultFrame = "default_frame"
280
- }
281
-
282
- declare function setLogger(logger: ILogger): void;
283
-
284
- type PayloadBacktest = Parameters<typeof cli.backtestMainService.run>[0];
285
- type PayloadPaper = Parameters<typeof cli.paperMainService.run>[0];
286
- type PayloadLive = Parameters<typeof cli.liveMainService.run>[0];
287
- type Mode = "backtest" | "live" | "paper";
288
- type Args = Partial<PayloadBacktest> | Partial<PayloadPaper> | Partial<PayloadLive>;
289
- declare function run(mode: Mode, args: Args): Promise<void>;
290
-
291
- export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, cli, run, setLogger };
1
+ import * as functools_kit from 'functools-kit';
2
+ import { CandleInterval, TrailingTakeCommit, TrailingStopCommit, BreakevenCommit, PartialProfitCommit, PartialLossCommit, IStrategyTickResultScheduled, IStrategyTickResultCancelled, IStrategyTickResultOpened, IStrategyTickResultClosed, RiskContract, AverageBuyCommit, SignalOpenContract, SignalCloseContract, CancelScheduledCommit, ClosePendingCommit } from 'backtest-kit';
3
+ import { Input } from 'telegraf';
4
+
5
+ interface ILogger {
6
+ log(topic: string, ...args: any[]): void;
7
+ debug(topic: string, ...args: any[]): void;
8
+ info(topic: string, ...args: any[]): void;
9
+ warn(topic: string, ...args: any[]): void;
10
+ }
11
+
12
+ declare class LoggerService implements ILogger {
13
+ private _commonLogger;
14
+ log: (topic: string, ...args: any[]) => Promise<void>;
15
+ debug: (topic: string, ...args: any[]) => Promise<void>;
16
+ info: (topic: string, ...args: any[]) => Promise<void>;
17
+ warn: (topic: string, ...args: any[]) => Promise<void>;
18
+ setLogger: (logger: ILogger) => void;
19
+ }
20
+
21
+ declare class PaperMainService {
22
+ private loggerService;
23
+ private resolveService;
24
+ private exchangeSchemaService;
25
+ private symbolSchemaService;
26
+ private frontendProviderService;
27
+ private telegramProviderService;
28
+ private moduleConnectionService;
29
+ run: ((payload: {
30
+ entryPoint: string;
31
+ symbol: string;
32
+ strategy: string;
33
+ exchange: string;
34
+ verbose: boolean;
35
+ }) => Promise<void>) & functools_kit.ISingleshotClearable;
36
+ connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
37
+ }
38
+
39
+ declare class LiveMainService {
40
+ private loggerService;
41
+ private resolveService;
42
+ private exchangeSchemaService;
43
+ private symbolSchemaService;
44
+ private frontendProviderService;
45
+ private telegramProviderService;
46
+ private moduleConnectionService;
47
+ run: ((payload: {
48
+ entryPoint: string;
49
+ symbol: string;
50
+ strategy: string;
51
+ exchange: string;
52
+ verbose: boolean;
53
+ }) => Promise<void>) & functools_kit.ISingleshotClearable;
54
+ connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
55
+ }
56
+
57
+ declare class BacktestMainService {
58
+ private loggerService;
59
+ private resolveService;
60
+ private exchangeSchemaService;
61
+ private frameSchemaService;
62
+ private symbolSchemaService;
63
+ private cacheLogicService;
64
+ private frontendProviderService;
65
+ private telegramProviderService;
66
+ private moduleConnectionService;
67
+ run: ((payload: {
68
+ entryPoint: string;
69
+ symbol: string;
70
+ strategy: string;
71
+ exchange: string;
72
+ frame: string;
73
+ cacheInterval: string[];
74
+ verbose: boolean;
75
+ noCache: boolean;
76
+ }) => Promise<void>) & functools_kit.ISingleshotClearable;
77
+ connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
78
+ }
79
+
80
+ declare class WalkerMainService {
81
+ private loggerService;
82
+ private resolveService;
83
+ private exchangeSchemaService;
84
+ private symbolSchemaService;
85
+ private cacheLogicService;
86
+ private moduleConnectionService;
87
+ run: ((payload: {
88
+ entryPoints: string[];
89
+ symbol: string;
90
+ output: string;
91
+ cacheInterval: CandleInterval[];
92
+ json: boolean;
93
+ markdown: boolean;
94
+ verbose: boolean;
95
+ noCache: boolean;
96
+ }) => Promise<void>) & functools_kit.ISingleshotClearable;
97
+ connect: (() => Promise<void>) & functools_kit.ISingleshotClearable;
98
+ }
99
+
100
+ declare class ExchangeSchemaService {
101
+ readonly loggerService: LoggerService;
102
+ addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
103
+ }
104
+
105
+ declare class FrameSchemaService {
106
+ readonly loggerService: LoggerService;
107
+ addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
108
+ }
109
+
110
+ declare class LoaderService {
111
+ private readonly babelService;
112
+ private readonly loggerService;
113
+ private getInstance;
114
+ import: (filePath: string, basePath?: string) => any;
115
+ check: (filePath: string, basePath?: string) => Promise<boolean>;
116
+ }
117
+
118
+ declare class ResolveService {
119
+ readonly loggerService: LoggerService;
120
+ readonly loaderService: LoaderService;
121
+ readonly DEFAULT_TEMPLATE_DIR: string;
122
+ readonly DEFAULT_MODULES_DIR: string;
123
+ readonly OVERRIDE_TEMPLATE_DIR: string;
124
+ readonly OVERRIDE_MODULES_DIR: string;
125
+ getIsLaunched: () => boolean;
126
+ attachPine: (pinePath: string) => Promise<string>;
127
+ attachStrategy: (jsPath: string) => Promise<void>;
128
+ attachJavascript: (jsPath: string) => Promise<void>;
129
+ }
130
+
131
+ declare class ErrorService {
132
+ handleGlobalError: (error: Error) => Promise<void>;
133
+ private _listenForError;
134
+ protected init: (() => void) & functools_kit.ISingleshotClearable;
135
+ }
136
+
137
+ declare class SymbolSchemaService {
138
+ readonly loggerService: LoggerService;
139
+ addSchema: (() => Promise<void>) & functools_kit.ISingleshotClearable;
140
+ }
141
+
142
+ declare class FrontendProviderService {
143
+ private readonly loggerService;
144
+ enable: (() => () => void) & functools_kit.ISingleshotClearable;
145
+ disable: () => void;
146
+ connect: (() => Promise<() => void>) & functools_kit.ISingleshotClearable;
147
+ }
148
+
149
+ declare class TelegramProviderService {
150
+ private readonly loggerService;
151
+ private readonly telegramLogicService;
152
+ enable: (() => () => void) & functools_kit.ISingleshotClearable;
153
+ disable: () => void;
154
+ connect: (() => Promise<() => void>) & functools_kit.ISingleshotClearable;
155
+ }
156
+
157
+ declare class CacheLogicService {
158
+ private readonly loggerService;
159
+ execute: (intervalList: CandleInterval[], dto: {
160
+ symbol: string;
161
+ frameName: string;
162
+ exchangeName: string;
163
+ }) => Promise<void>;
164
+ }
165
+
166
+ type InputFile = ReturnType<typeof Input.fromReadableStream>;
167
+ type Image = string | InputFile;
168
+ declare class TelegramApiService {
169
+ publish: (channel: string, msg: string, images?: Image[]) => Promise<"Message scheduled for publication" | "Message published successfully">;
170
+ }
171
+
172
+ declare class QuickchartApiService {
173
+ readonly loggerService: LoggerService;
174
+ getChart: (symbol: string, interval: string) => Promise<Buffer<ArrayBufferLike>>;
175
+ }
176
+
177
+ declare class TelegramWebService {
178
+ private readonly loggerService;
179
+ private readonly telegramApiService;
180
+ private readonly quickchartApiService;
181
+ publishNotify: (dto: {
182
+ symbol: string;
183
+ markdown: string;
184
+ }) => Promise<void>;
185
+ }
186
+
187
+ declare class TelegramLogicService {
188
+ private readonly loggerService;
189
+ private readonly telegramTemplateService;
190
+ private readonly telegramWebService;
191
+ private notifyTrailingTake;
192
+ private notifyTrailingStop;
193
+ private notifyBreakeven;
194
+ private notifyPartialProfit;
195
+ private notifyPartialLoss;
196
+ private notifyScheduled;
197
+ private notifyCancelled;
198
+ private notifyOpened;
199
+ private notifyClosed;
200
+ private notifyRisk;
201
+ private notifyAverageBuy;
202
+ private notifySignalOpen;
203
+ private notifySignalClose;
204
+ private notifyCancelScheduled;
205
+ private notifyClosePending;
206
+ connect: (() => () => void) & functools_kit.ISingleshotClearable;
207
+ }
208
+
209
+ declare class TelegramTemplateService {
210
+ readonly loggerService: LoggerService;
211
+ readonly resolveService: ResolveService;
212
+ getTrailingTakeMarkdown: (event: TrailingTakeCommit) => Promise<string>;
213
+ getTrailingStopMarkdown: (event: TrailingStopCommit) => Promise<string>;
214
+ getBreakevenMarkdown: (event: BreakevenCommit) => Promise<string>;
215
+ getPartialProfitMarkdown: (event: PartialProfitCommit) => Promise<string>;
216
+ getPartialLossMarkdown: (event: PartialLossCommit) => Promise<string>;
217
+ getScheduledMarkdown: (event: IStrategyTickResultScheduled) => Promise<string>;
218
+ getCancelledMarkdown: (event: IStrategyTickResultCancelled) => Promise<string>;
219
+ getOpenedMarkdown: (event: IStrategyTickResultOpened) => Promise<string>;
220
+ getClosedMarkdown: (event: IStrategyTickResultClosed) => Promise<string>;
221
+ getRiskMarkdown: (event: RiskContract) => Promise<string>;
222
+ getAverageBuyMarkdown: (event: AverageBuyCommit) => Promise<string>;
223
+ getSignalOpenMarkdown: (event: SignalOpenContract) => Promise<string>;
224
+ getSignalCloseMarkdown: (event: SignalCloseContract) => Promise<string>;
225
+ getCancelScheduledMarkdown: (event: CancelScheduledCommit) => Promise<string>;
226
+ getClosePendingMarkdown: (event: ClosePendingCommit) => Promise<string>;
227
+ }
228
+
229
+ declare class ModuleConnectionService {
230
+ readonly loggerService: LoggerService;
231
+ readonly resolveService: ResolveService;
232
+ readonly loaderService: LoaderService;
233
+ loadModule: (fileName: string) => Promise<boolean>;
234
+ }
235
+
236
+ interface IBabel {
237
+ transpile(code: string): string;
238
+ }
239
+
240
+ declare class BabelService implements IBabel {
241
+ readonly loggerService: LoggerService;
242
+ transpile: (code: string) => any;
243
+ }
244
+
245
+ declare const cli: {
246
+ telegramTemplateService: TelegramTemplateService;
247
+ telegramWebService: TelegramWebService;
248
+ frontendProviderService: FrontendProviderService;
249
+ telegramProviderService: TelegramProviderService;
250
+ exchangeSchemaService: ExchangeSchemaService;
251
+ symbolSchemaService: SymbolSchemaService;
252
+ frameSchemaService: FrameSchemaService;
253
+ cacheLogicService: CacheLogicService;
254
+ telegramLogicService: TelegramLogicService;
255
+ backtestMainService: BacktestMainService;
256
+ walkerMainService: WalkerMainService;
257
+ paperMainService: PaperMainService;
258
+ liveMainService: LiveMainService;
259
+ moduleConnectionService: ModuleConnectionService;
260
+ errorService: ErrorService;
261
+ loggerService: LoggerService;
262
+ resolveService: ResolveService;
263
+ loaderService: LoaderService;
264
+ babelService: BabelService;
265
+ telegramApiService: TelegramApiService;
266
+ quickchartApiService: QuickchartApiService;
267
+ };
268
+
269
+ declare class SetupUtils {
270
+ enable: (() => void) & functools_kit.ISingleshotClearable;
271
+ clear: () => void;
272
+ }
273
+ declare const Setup: SetupUtils;
274
+
275
+ interface ILoader {
276
+ import(filePath: string): any;
277
+ check(filePath: string): boolean;
278
+ }
279
+
280
+ declare enum ExchangeName {
281
+ DefaultExchange = "default_exchange"
282
+ }
283
+
284
+ declare enum FrameName {
285
+ DefaultFrame = "default_frame"
286
+ }
287
+
288
+ declare function setLogger(logger: ILogger): void;
289
+
290
+ type PayloadBacktest = Parameters<typeof cli.backtestMainService.run>[0];
291
+ type PayloadPaper = Parameters<typeof cli.paperMainService.run>[0];
292
+ type PayloadLive = Parameters<typeof cli.liveMainService.run>[0];
293
+ type Mode = "backtest" | "live" | "paper";
294
+ type Args = Partial<PayloadBacktest> | Partial<PayloadPaper> | Partial<PayloadLive>;
295
+ declare function run(mode: Mode, args: Args): Promise<void>;
296
+
297
+ export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, Setup, cli, run, setLogger };