@xyo-network/xl1-cli 1.6.4 → 1.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/build/commands/api/runApi.d.ts +6 -1
  2. package/build/commands/api/runApi.d.ts.map +1 -1
  3. package/build/commands/producer/runProducer.d.ts +7 -1
  4. package/build/commands/producer/runProducer.d.ts.map +1 -1
  5. package/build/commands/validator/runValidator.d.ts +7 -1
  6. package/build/commands/validator/runValidator.d.ts.map +1 -1
  7. package/build/initLogger.d.ts +3 -0
  8. package/build/initLogger.d.ts.map +1 -0
  9. package/build/node/index.mjs +70 -54
  10. package/build/node/index.mjs.map +1 -1
  11. package/build/node/xl1.mjs +82 -66
  12. package/build/node/xl1.mjs.map +1 -1
  13. package/build/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +2 -1
  14. package/build/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +1 -1
  15. package/build/orchestration/actor/implementation/ProducerActor.d.ts +2 -1
  16. package/build/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
  17. package/build/orchestration/actor/model/Actor.d.ts +2 -3
  18. package/build/orchestration/actor/model/Actor.d.ts.map +1 -1
  19. package/build/orchestration/actor/model/Orchestrator.d.ts +7 -4
  20. package/build/orchestration/actor/model/Orchestrator.d.ts.map +1 -1
  21. package/build/orchestration/archivists/StakeIntentState/local.d.ts.map +1 -1
  22. package/build/orchestration/initServices.d.ts +1 -1
  23. package/build/orchestration/initServices.d.ts.map +1 -1
  24. package/build/runCLI.d.ts +7 -1
  25. package/build/runCLI.d.ts.map +1 -1
  26. package/build/start.d.ts.map +1 -1
  27. package/dist/cli-min.mjs +9 -9
  28. package/package.json +32 -32
  29. package/src/commands/api/runApi.ts +8 -4
  30. package/src/commands/producer/runProducer.ts +13 -5
  31. package/src/commands/validator/runValidator.ts +10 -1
  32. package/src/initEnv.ts +1 -1
  33. package/src/initLogger.ts +15 -0
  34. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +2 -2
  35. package/src/orchestration/actor/implementation/ProducerActor.ts +3 -3
  36. package/src/orchestration/actor/model/Actor.ts +3 -4
  37. package/src/orchestration/actor/model/Orchestrator.ts +17 -11
  38. package/src/orchestration/archivists/StakeIntentState/local.ts +0 -2
  39. package/src/orchestration/initServices.ts +6 -12
  40. package/src/runCLI.ts +16 -13
  41. package/src/start.ts +7 -5
@@ -4,7 +4,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/initEnv.ts
5
5
  import dotenv from "dotenv";
6
6
  var initEnv = /* @__PURE__ */ __name(() => {
7
- dotenv.config();
7
+ dotenv.config({
8
+ quiet: true
9
+ });
8
10
  if (process.env.ENV_FILE !== void 0) {
9
11
  dotenv.config({
10
12
  path: process.env.ENV_FILE,
@@ -13,17 +15,32 @@ var initEnv = /* @__PURE__ */ __name(() => {
13
15
  }
14
16
  }, "initEnv");
15
17
 
18
+ // src/initLogger.ts
19
+ import { Base } from "@xylabs/base";
20
+ import { ConsoleLogger, LogLevel } from "@xylabs/logger";
21
+ import { isDefined } from "@xylabs/typeof";
22
+ var initLogger = /* @__PURE__ */ __name(() => {
23
+ let level = LogLevel.info;
24
+ if (isDefined(process.env.LOG_LEVEL)) {
25
+ const parsed = LogLevel[process.env.LOG_LEVEL.toLowerCase()];
26
+ if (isDefined(parsed)) level = parsed;
27
+ }
28
+ const logger = new ConsoleLogger(level);
29
+ Base.defaultLogger = logger;
30
+ return logger;
31
+ }, "initLogger");
32
+
16
33
  // src/orchestration/actor/implementation/BalanceActor.ts
17
34
  import { assertEx } from "@xylabs/assert";
18
35
  import { PayloadBuilder } from "@xyo-network/payload-builder";
19
36
  import { Mutex } from "async-mutex";
20
37
 
21
38
  // src/orchestration/actor/model/Actor.ts
22
- import { BaseEmitter } from "@xylabs/events";
39
+ import { Base as Base2 } from "@xylabs/base";
23
40
  import { forget } from "@xylabs/forget";
24
41
  import { IdLogger } from "@xylabs/logger";
25
42
  import { span, spanAsync } from "@xylabs/telemetry";
26
- var Actor = class extends BaseEmitter {
43
+ var Actor = class extends Base2 {
27
44
  static {
28
45
  __name(this, "Actor");
29
46
  }
@@ -32,7 +49,7 @@ var Actor = class extends BaseEmitter {
32
49
  _displayName;
33
50
  _id;
34
51
  constructor(id, displayName = "Actor", params) {
35
- const logger = params.logger ?? new IdLogger(console, () => `[${displayName} (${id})] `);
52
+ const logger = params.logger ?? new IdLogger(Base2.defaultLogger ?? console, () => `[${displayName} (${id})] `);
36
53
  super({
37
54
  ...params,
38
55
  logger
@@ -114,7 +131,11 @@ var Orchestrator = class {
114
131
  }
115
132
  actors = [];
116
133
  keepAliveHandle = null;
134
+ logger;
117
135
  running = false;
136
+ constructor(logger) {
137
+ this.logger = logger;
138
+ }
118
139
  /**
119
140
  * Registers an actor.
120
141
  * (We won't activate the actor until `start()` is called.)
@@ -131,10 +152,10 @@ var Orchestrator = class {
131
152
  async start() {
132
153
  await Promise.resolve();
133
154
  if (this.running) {
134
- console.log("[Orchestrator] Already started.");
155
+ this.logger?.warn("[Orchestrator] Already started.");
135
156
  return;
136
157
  }
137
- console.log("[Orchestrator] Starting...");
158
+ this.logger?.log("[Orchestrator] Starting...");
138
159
  this.running = true;
139
160
  for (const actor of this.actors) {
140
161
  await actor.start();
@@ -148,16 +169,16 @@ var Orchestrator = class {
148
169
  async stop() {
149
170
  await Promise.resolve();
150
171
  if (!this.running) {
151
- console.log("[Orchestrator] Already stopped.");
172
+ this.logger?.log("[Orchestrator] Already stopped.");
152
173
  return;
153
174
  }
154
- console.log("[Orchestrator] Stopping...");
175
+ this.logger?.log("[Orchestrator] Stopping...");
155
176
  for (const actor of this.actors) {
156
177
  await actor.stop();
157
178
  }
158
179
  this.running = false;
159
180
  if (this.keepAliveHandle) clearInterval(this.keepAliveHandle);
160
- console.log("[Orchestrator] Stopped...");
181
+ this.logger?.log("[Orchestrator] Stopped...");
161
182
  }
162
183
  };
163
184
 
@@ -216,8 +237,7 @@ var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
216
237
  get chainIterator() {
217
238
  return assertEx2(this.params.chainIterator, () => "chainIterator not set");
218
239
  }
219
- static async create(params) {
220
- await Promise.resolve();
240
+ static create(params) {
221
241
  return new _ChainHeadUpdateActor(params);
222
242
  }
223
243
  async start() {
@@ -252,7 +272,7 @@ var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
252
272
  // src/orchestration/actor/implementation/ProducerActor.ts
253
273
  import { assertEx as assertEx3 } from "@xylabs/assert";
254
274
  import { toHex as toHex2 } from "@xylabs/hex";
255
- import { isDefined, isUndefined } from "@xylabs/typeof";
275
+ import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
256
276
  import { createDeclarationIntent } from "@xyo-network/chain-protocol";
257
277
  import { BaseBlockProducerService } from "@xyo-network/chain-services";
258
278
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
@@ -267,7 +287,7 @@ var ProducerActor = class _ProducerActor extends Actor {
267
287
  _lastProducedBlock;
268
288
  _lastRedeclarationIntent;
269
289
  constructor(params) {
270
- super(assertEx3(params.producer?.address, () => "Missing producer in params"), "Producer", params);
290
+ super(params.producer.address, "Producer", params);
271
291
  }
272
292
  get account() {
273
293
  return assertEx3(this.params.account, () => "account not set");
@@ -293,8 +313,7 @@ var ProducerActor = class _ProducerActor extends Actor {
293
313
  get stakeIntentService() {
294
314
  return assertEx3(this.params.stakeIntentService, () => "stakeIntentService not set");
295
315
  }
296
- static async create(params) {
297
- await Promise.resolve();
316
+ static create(params) {
298
317
  return new _ProducerActor(params);
299
318
  }
300
319
  async start() {
@@ -379,7 +398,7 @@ var ProducerActor = class _ProducerActor extends Actor {
379
398
  }
380
399
  async validateCurrentBalance() {
381
400
  const head = this._lastProducedBlock?.[0]._hash;
382
- if (isDefined(head)) {
401
+ if (isDefined2(head)) {
383
402
  const balances = await this.balanceService.balances(head, [
384
403
  this.account.address
385
404
  ]);
@@ -393,7 +412,7 @@ var ProducerActor = class _ProducerActor extends Actor {
393
412
  return true;
394
413
  }
395
414
  async validateCurrentStake() {
396
- const requiredMinimumStake = isDefined(process.env.XYO_PRODUCER_MIN_STAKE) ? BigInt(process.env.XYO_PRODUCER_MIN_STAKE) : 1n;
415
+ const requiredMinimumStake = isDefined2(process.env.XYO_PRODUCER_MIN_STAKE) ? BigInt(process.env.XYO_PRODUCER_MIN_STAKE) : 1n;
397
416
  const currentStake = await this.chainStakeViewer.activeByAddressStaked(this.account.address);
398
417
  if (currentStake < requiredMinimumStake) {
399
418
  this.logger?.error(`Producer ${this.account.address} has insufficient stake.`);
@@ -405,7 +424,7 @@ var ProducerActor = class _ProducerActor extends Actor {
405
424
 
406
425
  // src/orchestration/health/initHealthEndpoints.ts
407
426
  import http from "http";
408
- import { isDefined as isDefined2, isEmptyString } from "@xylabs/typeof";
427
+ import { isDefined as isDefined3, isEmptyString } from "@xylabs/typeof";
409
428
  var sendStatus = /* @__PURE__ */ __name((res, status, errorCode) => {
410
429
  const statusCode = status === "started" ? 200 : errorCode;
411
430
  res.writeHead(statusCode, {
@@ -455,7 +474,7 @@ var createHealthServer = /* @__PURE__ */ __name((port = 8080, statusMonitor) =>
455
474
  }, "createHealthServer");
456
475
  var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
457
476
  const healthCheckEnvVarPort = process.env.XYO_PRODUCER_HEALTH_CHECK_PORT;
458
- if (isDefined2(healthCheckEnvVarPort) && !isEmptyString(healthCheckEnvVarPort)) {
477
+ if (isDefined3(healthCheckEnvVarPort) && !isEmptyString(healthCheckEnvVarPort)) {
459
478
  const healthCheckPort = Number.parseInt(healthCheckEnvVarPort, 10);
460
479
  return createHealthServer(healthCheckPort, params.statusReporter);
461
480
  }
@@ -463,9 +482,8 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
463
482
 
464
483
  // src/orchestration/initServices.ts
465
484
  import { assertEx as assertEx16 } from "@xylabs/assert";
466
- import { Base } from "@xylabs/base";
467
485
  import { asAddress as asAddress2 } from "@xylabs/hex";
468
- import { isDefined as isDefined5 } from "@xylabs/typeof";
486
+ import { isDefined as isDefined6 } from "@xylabs/typeof";
469
487
  import { balanceSummaryRepositoryFromMap } from "@xyo-network/chain-modules";
470
488
  import { initTelemetry } from "@xyo-network/chain-telemetry";
471
489
  import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
@@ -708,9 +726,7 @@ var singleton11;
708
726
  var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async () => {
709
727
  return await mutex11.runExclusive(async () => {
710
728
  if (singleton11) return singleton11;
711
- console.log("[InitServices:LocalStakeIntentStateArchivist:Initializing]");
712
729
  singleton11 = await getLocalPersistentArchivist("stakeIntent", "state");
713
- console.log("[InitServices:LocalStakeIntentStateArchivist:Initialized]");
714
730
  return assertEx8(singleton11, () => new Error("Failed to initialize stake intent state archivist"));
715
731
  });
716
732
  }, "initLocalStakeIntentStateArchivist");
@@ -728,12 +744,12 @@ var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async () => {
728
744
  }, "initStakeIntentStateArchivist");
729
745
 
730
746
  // src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
731
- import { isDefined as isDefined4 } from "@xylabs/typeof";
747
+ import { isDefined as isDefined5 } from "@xylabs/typeof";
732
748
  import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
733
749
  import { Mutex as Mutex15 } from "async-mutex";
734
750
 
735
751
  // src/orchestration/map/BalanceSummary/local.ts
736
- import { isDefined as isDefined3 } from "@xylabs/typeof";
752
+ import { isDefined as isDefined4 } from "@xylabs/typeof";
737
753
  import { Mutex as Mutex14 } from "async-mutex";
738
754
 
739
755
  // src/orchestration/map/localPersistentMap.ts
@@ -821,7 +837,7 @@ var mutex13 = new Mutex14();
821
837
  var singleton13;
822
838
  var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async () => {
823
839
  return await mutex13.runExclusive(async () => {
824
- if (isDefined3(singleton13)) return singleton13;
840
+ if (isDefined4(singleton13)) return singleton13;
825
841
  singleton13 = await getLocalPersistentMap("balance", "summary");
826
842
  return singleton13;
827
843
  });
@@ -832,7 +848,7 @@ var mutex14 = new Mutex15();
832
848
  var singleton14;
833
849
  async function initBalanceSummaryMap(_traceProvider) {
834
850
  return await mutex14.runExclusive(async () => {
835
- if (isDefined4(singleton14)) return singleton14;
851
+ if (isDefined5(singleton14)) return singleton14;
836
852
  const local = await startupSpanAsync6("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap());
837
853
  singleton14 = local;
838
854
  return singleton14;
@@ -907,8 +923,8 @@ var getChainId = /* @__PURE__ */ __name(() => {
907
923
 
908
924
  // src/orchestration/services/implementation/evm/initGanacheProvider.ts
909
925
  var initJsonRpcProvider = /* @__PURE__ */ __name(() => {
910
- const config2 = getJsonRpcProviderConfig();
911
- return Promise.resolve(new JsonRpcProvider(...config2));
926
+ const config = getJsonRpcProviderConfig();
927
+ return Promise.resolve(new JsonRpcProvider(...config));
912
928
  }, "initJsonRpcProvider");
913
929
  var canUseJsonRpcProvider = /* @__PURE__ */ __name(() => {
914
930
  return canUseChainId() && process.env.XYO_JSON_RPC_URL !== void 0;
@@ -927,8 +943,8 @@ import { InfuraProvider } from "ethers/providers";
927
943
  var instance;
928
944
  var initInfuraProvider = /* @__PURE__ */ __name(() => {
929
945
  if (instance) return instance;
930
- const config2 = getInfuraProviderConfig();
931
- instance = Promise.resolve(new InfuraProvider(...config2));
946
+ const config = getInfuraProviderConfig();
947
+ instance = Promise.resolve(new InfuraProvider(...config));
932
948
  return instance;
933
949
  }, "initInfuraProvider");
934
950
  var canUseInfuraProvider = /* @__PURE__ */ __name(() => {
@@ -1197,20 +1213,19 @@ var telemetryConfig = {
1197
1213
  }
1198
1214
  };
1199
1215
  var isStartable = /* @__PURE__ */ __name((value) => {
1200
- return isDefined5(value.start) && typeof value.start === "function";
1216
+ return isDefined6(value.start) && typeof value.start === "function";
1201
1217
  }, "isStartable");
1202
1218
  var initServices = /* @__PURE__ */ __name(async (logger) => {
1203
- Base.defaultLogger = logger ?? console;
1204
- const statusReporter = new RuntimeStatusMonitor(logger ?? console);
1219
+ const statusReporter = new RuntimeStatusMonitor(logger);
1205
1220
  statusReporter.onGlobalTransition({
1206
1221
  to: "started"
1207
1222
  }, () => {
1208
- Base.defaultLogger?.log("All services started.");
1223
+ logger.log("All services started.");
1209
1224
  });
1210
1225
  statusReporter.onGlobalTransition({
1211
1226
  to: "error"
1212
1227
  }, () => {
1213
- Base.defaultLogger?.error("Producer encountered an unhandled error!");
1228
+ logger.error("Producer encountered an unhandled error!");
1214
1229
  process.exit(1);
1215
1230
  });
1216
1231
  await startupSpanAsync7("initHealthEndpoints", () => initHealthEndpoints({
@@ -1277,7 +1292,6 @@ var initServices = /* @__PURE__ */ __name(async (logger) => {
1277
1292
  chainArchivist,
1278
1293
  chainIterator,
1279
1294
  chainStakeViewer,
1280
- logger: console,
1281
1295
  stakeIntentStateArchivist,
1282
1296
  traceProvider,
1283
1297
  statusReporter
@@ -1302,7 +1316,7 @@ var initServices = /* @__PURE__ */ __name(async (logger) => {
1302
1316
  traceProvider,
1303
1317
  validateHydratedBlockState
1304
1318
  };
1305
- const rewardAddress = isDefined5(process.env.XYO_BLOCK_REWARD_ADDRESS) ? assertEx16(asAddress2(process.env.XYO_BLOCK_REWARD_ADDRESS), () => "Invalid block reward address provided") : account.address;
1319
+ const rewardAddress = isDefined6(process.env.XYO_BLOCK_REWARD_ADDRESS) ? assertEx16(asAddress2(process.env.XYO_BLOCK_REWARD_ADDRESS), () => "Invalid block reward address provided") : account.address;
1306
1320
  const producerParams = {
1307
1321
  ...validatorParams,
1308
1322
  name: "Producer",
@@ -1330,7 +1344,7 @@ var initServices = /* @__PURE__ */ __name(async (logger) => {
1330
1344
  rewardService,
1331
1345
  stakeIntentService
1332
1346
  };
1333
- Base.defaultLogger?.log("All services created. Starting...");
1347
+ logger?.log("All services created. Starting...");
1334
1348
  const startableServices = [
1335
1349
  balanceSummaryMap,
1336
1350
  ...Object.values(result)
@@ -1346,18 +1360,18 @@ import { hideBin } from "yargs/helpers";
1346
1360
 
1347
1361
  // src/commands/api/runApi.ts
1348
1362
  import { getServer } from "@xyo-network/chain-api";
1349
- import { config } from "dotenv";
1350
- function runApi() {
1351
- config();
1352
- void getServer();
1363
+ function runApi(context) {
1364
+ const { logger } = context;
1365
+ void getServer(void 0, void 0, logger);
1353
1366
  }
1354
1367
  __name(runApi, "runApi");
1355
1368
 
1356
1369
  // src/commands/producer/runProducer.ts
1357
- var runProducer = /* @__PURE__ */ __name(async (orchestrator) => {
1358
- console.log("Services: Initializing...");
1359
- const services = await initServices();
1360
- console.log("Services: Initialized");
1370
+ var runProducer = /* @__PURE__ */ __name(async (context) => {
1371
+ const { logger, orchestrator } = context;
1372
+ logger?.log("Services: Initializing...");
1373
+ const services = await initServices(logger);
1374
+ logger?.log("Services: Initialized");
1361
1375
  const chainHeadUpdate = await ChainHeadUpdateActor.create(services);
1362
1376
  const producer = await ProducerActor.create(services);
1363
1377
  const balances = await BalanceActor.create(services);
@@ -1373,7 +1387,8 @@ var runProducer = /* @__PURE__ */ __name(async (orchestrator) => {
1373
1387
  }, "runProducer");
1374
1388
 
1375
1389
  // src/commands/validator/runValidator.ts
1376
- var runValidator = /* @__PURE__ */ __name(async (orchestrator) => {
1390
+ var runValidator = /* @__PURE__ */ __name(async (context) => {
1391
+ const { orchestrator } = context;
1377
1392
  const myActor = new Actor("Validator", "Validator", {});
1378
1393
  await orchestrator.registerActor(myActor);
1379
1394
  await orchestrator.start();
@@ -1399,28 +1414,25 @@ function waitForPort(host, port) {
1399
1414
  });
1400
1415
  }
1401
1416
  __name(waitForPort, "waitForPort");
1402
- async function runCLI(orchestrator) {
1417
+ async function runCLI(context) {
1403
1418
  async function validateTransaction() {
1404
- console.log("Validating transaction...");
1405
- await Promise.resolve();
1419
+ await Promise.reject("Not implemented yet");
1406
1420
  }
1407
1421
  __name(validateTransaction, "validateTransaction");
1408
1422
  async function submitTransaction() {
1409
- console.log("Submitting transaction...");
1410
- await Promise.resolve();
1423
+ await Promise.reject("Not implemented yet");
1411
1424
  }
1412
1425
  __name(submitTransaction, "submitTransaction");
1413
1426
  async function checkBalance() {
1414
- console.log("Checking account balance...");
1415
- await Promise.resolve();
1427
+ await Promise.reject("Not implemented yet");
1416
1428
  }
1417
1429
  __name(checkBalance, "checkBalance");
1418
1430
  const argv = yargs(hideBin(process.argv)).command("validator", "Run the XL1 validator", (yargs2) => {
1419
1431
  return yargs2.command("$0", "Run as a XL1 validator node", () => {
1420
- }, () => runValidator(orchestrator));
1432
+ }, () => runValidator(context));
1421
1433
  }).command("producer", "Run the XL1 producer", (yargs2) => {
1422
1434
  return yargs2.command("$0", "Run as a XL1 producer node", () => {
1423
- }, () => runProducer(orchestrator));
1435
+ }, () => runProducer(context));
1424
1436
  }).command("client", "Client-related operations", (yargs2) => {
1425
1437
  return yargs2.command("transaction", "Transaction-related operations", (yargs3) => {
1426
1438
  return yargs3.command("validate", "Validate a transaction", () => {
@@ -1429,14 +1441,14 @@ async function runCLI(orchestrator) {
1429
1441
  });
1430
1442
  }).command("api", "Run as a api node", (yargs2) => {
1431
1443
  return yargs2.command("$0", "Run as a api node", () => {
1432
- }, () => runApi()).command("run", "Run as a api node", () => {
1433
- }, () => runApi());
1444
+ }, () => runApi(context)).command("run", "Run as a api node", () => {
1445
+ }, () => runApi(context));
1434
1446
  }).command("$0", "Run a full XL1 deployment", (yargs2) => {
1435
1447
  return yargs2.command("$0", "Start the API and a producer", () => {
1436
1448
  }, async () => {
1437
- runApi();
1449
+ runApi(context);
1438
1450
  await waitForPort("localhost", 8080);
1439
- await runProducer(orchestrator);
1451
+ await runProducer(context);
1440
1452
  });
1441
1453
  }).command("account", "Account-related operations", (yargs2) => {
1442
1454
  return yargs2.command("balance", "Check account balance", () => {
@@ -1449,21 +1461,25 @@ __name(runCLI, "runCLI");
1449
1461
  // src/start.ts
1450
1462
  var start = /* @__PURE__ */ __name(async () => {
1451
1463
  initEnv();
1452
- const orchestrator = new Orchestrator();
1464
+ const logger = initLogger();
1465
+ const orchestrator = new Orchestrator(logger);
1453
1466
  process.on("SIGINT", () => {
1454
1467
  void (async () => {
1455
1468
  try {
1456
- console.log("\nSIGINT received. Attempting graceful shutdown...");
1469
+ logger.log("\nSIGINT received. Attempting graceful shutdown...");
1457
1470
  await orchestrator?.stop();
1458
- console.log("Orchestrator stopped, exiting now.");
1471
+ logger.log("Orchestrator stopped, exiting now.");
1459
1472
  process.exit(0);
1460
1473
  } catch (err) {
1461
- console.error("Error stopping orchestrator:", err);
1474
+ logger.error("Error stopping orchestrator:", err);
1462
1475
  process.exit(1);
1463
1476
  }
1464
1477
  })();
1465
1478
  });
1466
- await runCLI(orchestrator);
1479
+ await runCLI({
1480
+ logger,
1481
+ orchestrator
1482
+ });
1467
1483
  }, "start");
1468
1484
 
1469
1485
  // src/xl1.ts