@elizaos/cli 1.5.10 → 1.5.11-alpha.2

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 (36) hide show
  1. package/dist/characters/eliza.d.ts.map +1 -1
  2. package/dist/commands/create/actions/setup.d.ts.map +1 -1
  3. package/dist/commands/dev/actions/dev-server.d.ts.map +1 -1
  4. package/dist/commands/scenario/src/plugin-parser.d.ts +6 -31
  5. package/dist/commands/scenario/src/plugin-parser.d.ts.map +1 -1
  6. package/dist/commands/scenario/src/runtime-factory.d.ts.map +1 -1
  7. package/dist/commands/start/index.d.ts +0 -5
  8. package/dist/commands/start/index.d.ts.map +1 -1
  9. package/dist/commands/test/actions/e2e-tests.d.ts.map +1 -1
  10. package/dist/index.js +1325 -1679
  11. package/dist/index.js.map +17 -23
  12. package/dist/templates/plugin-quick-starter/package.json +2 -2
  13. package/dist/templates/plugin-starter/package.json +2 -2
  14. package/dist/templates/project-starter/package.json +6 -6
  15. package/dist/templates/project-tee-starter/package.json +4 -4
  16. package/dist/utils/local-cli-delegation.d.ts.map +1 -1
  17. package/dist/version.d.ts +2 -2
  18. package/dist/version.d.ts.map +1 -1
  19. package/dist/version.js +2 -2
  20. package/package.json +8 -7
  21. package/templates/plugin-quick-starter/package.json +2 -2
  22. package/templates/plugin-starter/package.json +2 -2
  23. package/templates/project-starter/package.json +6 -6
  24. package/templates/project-tee-starter/package.json +4 -4
  25. package/dist/commands/start/actions/agent-start.d.ts +0 -14
  26. package/dist/commands/start/actions/agent-start.d.ts.map +0 -1
  27. package/dist/commands/start/actions/server-start.d.ts +0 -17
  28. package/dist/commands/start/actions/server-start.d.ts.map +0 -1
  29. package/dist/commands/start/utils/config-utils.d.ts +0 -30
  30. package/dist/commands/start/utils/config-utils.d.ts.map +0 -1
  31. package/dist/commands/start/utils/dependency-resolver.d.ts +0 -8
  32. package/dist/commands/start/utils/dependency-resolver.d.ts.map +0 -1
  33. package/dist/commands/start/utils/loader.d.ts +0 -68
  34. package/dist/commands/start/utils/loader.d.ts.map +0 -1
  35. package/dist/commands/start/utils/plugin-utils.d.ts +0 -17
  36. package/dist/commands/start/utils/plugin-utils.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -4688,7 +4688,7 @@ __export(exports_version, {
4688
4688
  BUILD_TIME: () => BUILD_TIME,
4689
4689
  BUILD_ENV: () => BUILD_ENV
4690
4690
  });
4691
- var CLI_VERSION = "1.5.10", CLI_NAME = "@elizaos/cli", CLI_DESCRIPTION = "elizaOS CLI - Manage your AI agents and plugins", BUILD_TIME = "2025-09-17T22:40:56.977Z", BUILD_ENV = "production", version_default;
4691
+ var CLI_VERSION = "1.5.11-alpha.2", CLI_NAME = "@elizaos/cli", CLI_DESCRIPTION = "elizaOS CLI - Manage your AI agents and plugins", BUILD_TIME = "2025-09-19T22:32:25.791Z", BUILD_ENV = "production", version_default;
4692
4692
  var init_version = __esm(() => {
4693
4693
  version_default = {
4694
4694
  version: CLI_VERSION,
@@ -14954,7 +14954,6 @@ var init_install_plugin = __esm(() => {
14954
14954
  });
14955
14955
 
14956
14956
  // src/utils/local-cli-delegation.ts
14957
- import { spawn } from "child_process";
14958
14957
  import { existsSync as existsSync15 } from "fs";
14959
14958
  import path17 from "path";
14960
14959
  import { logger as logger21 } from "@elizaos/core";
@@ -15002,39 +15001,37 @@ function setupLocalEnvironment() {
15002
15001
  return env;
15003
15002
  }
15004
15003
  async function delegateToLocalCli(localCliPath) {
15005
- return new Promise((resolve2, reject) => {
15006
- logger21.info("Using local @elizaos/cli installation");
15007
- const nodeExecutable = process.execPath;
15008
- const args = process.argv.slice(2);
15009
- const env = setupLocalEnvironment();
15010
- const childProcess = spawn(nodeExecutable, [localCliPath, ...args], {
15011
- stdio: "inherit",
15012
- env,
15013
- cwd: process.cwd()
15014
- });
15015
- childProcess.on("exit", (code, signal) => {
15016
- if (code !== null) {
15017
- process.exit(code);
15018
- } else if (signal) {
15019
- const exitCode = signal === "SIGINT" ? 130 : signal === "SIGTERM" ? 143 : 1;
15020
- process.exit(exitCode);
15021
- }
15022
- resolve2();
15023
- });
15024
- childProcess.on("error", (error) => {
15025
- logger21.error(`Failed to start local CLI:`, error instanceof Error ? error.message : String(error));
15026
- reject(error);
15027
- });
15028
- const forwardSignal = (signal) => {
15029
- process.on(signal, () => {
15030
- if (childProcess.killed === false) {
15031
- childProcess.kill(signal);
15032
- }
15033
- });
15034
- };
15035
- forwardSignal("SIGINT");
15036
- forwardSignal("SIGTERM");
15004
+ logger21.info("Using local @elizaos/cli installation");
15005
+ const nodeExecutable = process.execPath;
15006
+ const args = process.argv.slice(2);
15007
+ const env = setupLocalEnvironment();
15008
+ const childProcess = Bun.spawn([nodeExecutable, localCliPath, ...args], {
15009
+ stdin: "inherit",
15010
+ stdout: "inherit",
15011
+ stderr: "inherit",
15012
+ env,
15013
+ cwd: process.cwd()
15037
15014
  });
15015
+ const forwardSignal = (signal) => {
15016
+ const handler = () => {
15017
+ childProcess.kill(signal);
15018
+ };
15019
+ process.once(signal, handler);
15020
+ };
15021
+ forwardSignal("SIGINT");
15022
+ forwardSignal("SIGTERM");
15023
+ try {
15024
+ const exitCode = await childProcess.exited;
15025
+ if (childProcess.signalCode) {
15026
+ const signalExitCode = childProcess.signalCode === "SIGINT" ? 130 : childProcess.signalCode === "SIGTERM" ? 143 : 128;
15027
+ process.exit(signalExitCode);
15028
+ } else {
15029
+ process.exit(exitCode);
15030
+ }
15031
+ } catch (error) {
15032
+ logger21.error(`Failed to start local CLI:`, error instanceof Error ? error.message : String(error));
15033
+ throw error;
15034
+ }
15038
15035
  }
15039
15036
  function isTestOrCiEnvironment() {
15040
15037
  const testAndCiIndicators = [
@@ -18466,327 +18463,6 @@ Required configuration:
18466
18463
  agent.command("clear-memories").alias("clear").description("Clear all memories for an agent").requiredOption("-n, --name <name>", "agent id, name, or index number from list").option("-r, --remote-url <url>", "URL of the remote agent runtime").option("-p, --port <port>", "Port to listen on", (val) => Number.parseInt(val)).option("--auth-token <token>", "API authentication token").action(clearAgentMemories);
18467
18464
  });
18468
18465
 
18469
- // src/characters/eliza.ts
18470
- function getElizaCharacter() {
18471
- const plugins = [
18472
- "@elizaos/plugin-sql",
18473
- ...process.env.ANTHROPIC_API_KEY?.trim() ? ["@elizaos/plugin-anthropic"] : [],
18474
- ...process.env.OPENROUTER_API_KEY?.trim() ? ["@elizaos/plugin-openrouter"] : [],
18475
- ...process.env.OPENAI_API_KEY?.trim() ? ["@elizaos/plugin-openai"] : [],
18476
- ...process.env.GOOGLE_GENERATIVE_AI_API_KEY?.trim() ? ["@elizaos/plugin-google-genai"] : [],
18477
- ...process.env.DISCORD_API_TOKEN?.trim() ? ["@elizaos/plugin-discord"] : [],
18478
- ...process.env.TWITTER_API_KEY?.trim() && process.env.TWITTER_API_SECRET_KEY?.trim() && process.env.TWITTER_ACCESS_TOKEN?.trim() && process.env.TWITTER_ACCESS_TOKEN_SECRET?.trim() ? ["@elizaos/plugin-twitter"] : [],
18479
- ...process.env.TELEGRAM_BOT_TOKEN?.trim() ? ["@elizaos/plugin-telegram"] : [],
18480
- ...!process.env.IGNORE_BOOTSTRAP ? ["@elizaos/plugin-bootstrap"] : [],
18481
- ...!process.env.ANTHROPIC_API_KEY?.trim() && !process.env.OPENROUTER_API_KEY?.trim() && !process.env.OPENAI_API_KEY?.trim() && !process.env.GOOGLE_GENERATIVE_AI_API_KEY?.trim() ? ["@elizaos/plugin-ollama"] : []
18482
- ];
18483
- return {
18484
- ...baseCharacter,
18485
- plugins
18486
- };
18487
- }
18488
- var baseCharacter;
18489
- var init_eliza = __esm(() => {
18490
- baseCharacter = {
18491
- name: "Eliza",
18492
- plugins: ["@elizaos/plugin-sql", "@elizaos/plugin-bootstrap"],
18493
- secrets: {},
18494
- settings: {
18495
- avatar: "https://elizaos.github.io/eliza-avatars/Eliza/portrait.png"
18496
- },
18497
- system: "Respond to all messages in a helpful, conversational manner. Provide assistance on a wide range of topics, using knowledge when needed. Be concise but thorough, friendly but professional. Use humor when appropriate and be empathetic to user needs. Provide valuable information and insights when questions are asked.",
18498
- bio: [
18499
- "Engages with all types of questions and conversations",
18500
- "Provides helpful, concise responses",
18501
- "Uses knowledge resources effectively when needed",
18502
- "Balances brevity with completeness",
18503
- "Uses humor and empathy appropriately",
18504
- "Adapts tone to match the conversation context",
18505
- "Offers assistance proactively",
18506
- "Communicates clearly and directly"
18507
- ],
18508
- topics: [
18509
- "general knowledge and information",
18510
- "problem solving and troubleshooting",
18511
- "technology and software",
18512
- "community building and management",
18513
- "business and productivity",
18514
- "creativity and innovation",
18515
- "personal development",
18516
- "communication and collaboration",
18517
- "education and learning",
18518
- "entertainment and media"
18519
- ],
18520
- messageExamples: [
18521
- [
18522
- {
18523
- name: "{{name1}}",
18524
- content: {
18525
- text: "This user keeps derailing technical discussions with personal problems."
18526
- }
18527
- },
18528
- {
18529
- name: "Eliza",
18530
- content: {
18531
- text: "DM them. Sounds like they need to talk about something else."
18532
- }
18533
- },
18534
- {
18535
- name: "{{name1}}",
18536
- content: {
18537
- text: "I tried, they just keep bringing drama back to the main channel."
18538
- }
18539
- },
18540
- {
18541
- name: "Eliza",
18542
- content: {
18543
- text: "Send them my way. I've got time today."
18544
- }
18545
- }
18546
- ],
18547
- [
18548
- {
18549
- name: "{{name1}}",
18550
- content: {
18551
- text: "I can't handle being a mod anymore. It's affecting my mental health."
18552
- }
18553
- },
18554
- {
18555
- name: "Eliza",
18556
- content: {
18557
- text: "Drop the channels. You come first."
18558
- }
18559
- },
18560
- {
18561
- name: "{{name1}}",
18562
- content: {
18563
- text: "But who's going to handle everything?"
18564
- }
18565
- },
18566
- {
18567
- name: "Eliza",
18568
- content: {
18569
- text: "We will. Take the break. Come back when you're ready."
18570
- }
18571
- }
18572
- ],
18573
- [
18574
- {
18575
- name: "{{name1}}",
18576
- content: {
18577
- text: "Could you explain how blockchain technology works?"
18578
- }
18579
- },
18580
- {
18581
- name: "Eliza",
18582
- content: {
18583
- text: "A blockchain is a distributed database that maintains a growing list of records secured against tampering and revision. Think of it as a chain of blocks where each block contains data, its own hash, and the hash of the previous block."
18584
- }
18585
- }
18586
- ],
18587
- [
18588
- {
18589
- name: "{{name1}}",
18590
- content: {
18591
- text: "Hey everyone, what are our community guidelines for new members?"
18592
- }
18593
- },
18594
- {
18595
- name: "Eliza",
18596
- content: {
18597
- text: "Let me check our guidelines.",
18598
- providers: ["KNOWLEDGE"]
18599
- }
18600
- }
18601
- ],
18602
- [
18603
- {
18604
- name: "{{name1}}",
18605
- content: {
18606
- text: "Are there any resources for onboarding new developers to our community?"
18607
- }
18608
- },
18609
- {
18610
- name: "Eliza",
18611
- content: {
18612
- text: "We have some documentation I can find for you.",
18613
- providers: ["KNOWLEDGE"]
18614
- }
18615
- }
18616
- ],
18617
- [
18618
- {
18619
- name: "{{name1}}",
18620
- content: {
18621
- text: "What process should we follow for handling code of conduct violations?"
18622
- }
18623
- },
18624
- {
18625
- name: "Eliza",
18626
- content: {
18627
- text: "Let me pull up our violation handling process.",
18628
- providers: ["KNOWLEDGE"]
18629
- }
18630
- }
18631
- ],
18632
- [
18633
- {
18634
- name: "{{name1}}",
18635
- content: {
18636
- text: "What can you tell me about quantum computing?"
18637
- }
18638
- },
18639
- {
18640
- name: "Eliza",
18641
- content: {
18642
- text: "Let me find some information about quantum computing.",
18643
- providers: ["KNOWLEDGE"]
18644
- }
18645
- }
18646
- ]
18647
- ],
18648
- postExamples: [
18649
- "Sometimes the best debugging tool is a fresh cup of coffee and a walk around the block.",
18650
- "The magic happens when developers stop competing and start collaborating. Build together, grow together.",
18651
- "Reminder: Your code doesn't have to be perfect on the first try. Progress over perfection.",
18652
- "Community tip: The person asking 'obvious' questions today might solve your toughest problem tomorrow. Be kind.",
18653
- "Hot take: Good documentation is more valuable than clever code.",
18654
- "The best feature you can add to your project? A welcoming community.",
18655
- "Debugging is just a conversation with your past self. Make it easier by leaving good comments.",
18656
- "Your daily reminder that impostor syndrome affects even the most experienced developers. You belong here.",
18657
- "Pro tip: Read the error message. Then read it again. The answer is usually there.",
18658
- "Building in public isn't about showing off. It's about learning together and helping others avoid your mistakes.",
18659
- "The difference between junior and senior developers? Seniors know when NOT to write code.",
18660
- "Community > Competition. Always.",
18661
- "Remember: Every expert was once a beginner who refused to give up.",
18662
- "Code reviews aren't personal attacks. They're opportunities to level up together.",
18663
- "The most powerful tool in development? Asking for help when you need it."
18664
- ],
18665
- style: {
18666
- all: [
18667
- "Keep responses concise but informative",
18668
- "Use clear and direct language",
18669
- "Be engaging and conversational",
18670
- "Use humor when appropriate",
18671
- "Be empathetic and understanding",
18672
- "Provide helpful information",
18673
- "Be encouraging and positive",
18674
- "Adapt tone to the conversation",
18675
- "Use knowledge resources when needed",
18676
- "Respond to all types of questions"
18677
- ],
18678
- chat: [
18679
- "Be conversational and natural",
18680
- "Engage with the topic at hand",
18681
- "Be helpful and informative",
18682
- "Show personality and warmth"
18683
- ],
18684
- post: [
18685
- "Keep it concise and punchy - every word counts",
18686
- "Share insights, not platitudes",
18687
- "Be authentic and conversational, not corporate",
18688
- "Use specific examples over generic advice",
18689
- "Add value with each post - teach, inspire, or entertain",
18690
- "One clear thought per post",
18691
- "Avoid excessive hashtags or mentions",
18692
- "Write like you are talking to a friend",
18693
- "Share personal observations and hot takes",
18694
- "Be helpful without being preachy",
18695
- "Use emojis sparingly and purposefully",
18696
- "End with something thought-provoking when appropriate"
18697
- ]
18698
- }
18699
- };
18700
- });
18701
-
18702
- // src/utils/dependency-manager.ts
18703
- import * as fs14 from "fs";
18704
- import * as path25 from "path";
18705
- import { logger as logger27 } from "@elizaos/core";
18706
- function hasElizaOSCli(packageJsonPath) {
18707
- try {
18708
- if (!fs14.existsSync(packageJsonPath)) {
18709
- return false;
18710
- }
18711
- let packageJson;
18712
- try {
18713
- packageJson = JSON.parse(fs14.readFileSync(packageJsonPath, "utf8"));
18714
- } catch (parseError) {
18715
- logger27.debug({ error: parseError, packageJsonPath }, `Error parsing JSON in package.json`);
18716
- return false;
18717
- }
18718
- const dependencies = packageJson.dependencies || {};
18719
- const devDependencies = packageJson.devDependencies || {};
18720
- return "@elizaos/cli" in dependencies || "@elizaos/cli" in devDependencies;
18721
- } catch (error) {
18722
- logger27.debug({ error, packageJsonPath }, `Error reading package.json`);
18723
- return false;
18724
- }
18725
- }
18726
- function shouldAutoInstallCli(cwd = process.cwd()) {
18727
- if (process.env.ELIZA_NO_AUTO_INSTALL === "true") {
18728
- logger27.debug("Auto-install disabled via ELIZA_NO_AUTO_INSTALL");
18729
- return false;
18730
- }
18731
- if (process.env.CI === "true" || process.env.ELIZA_TEST_MODE === "true") {
18732
- logger27.debug("Skipping auto-install in CI/test environment");
18733
- return false;
18734
- }
18735
- const dirInfo = detectDirectoryType(cwd);
18736
- if (dirInfo.type === "elizaos-monorepo" || dirInfo.monorepoRoot) {
18737
- logger27.debug("Skipping auto-install in monorepo");
18738
- return false;
18739
- }
18740
- if (!dirInfo.hasPackageJson) {
18741
- logger27.debug("No package.json found, skipping auto-install");
18742
- return false;
18743
- }
18744
- const packageJsonPath = path25.join(cwd, "package.json");
18745
- if (hasElizaOSCli(packageJsonPath)) {
18746
- logger27.debug("@elizaos/cli already present, skipping auto-install");
18747
- return false;
18748
- }
18749
- return true;
18750
- }
18751
- async function installElizaOSCli(cwd = process.cwd()) {
18752
- try {
18753
- logger27.info("Adding @elizaos/cli as dev dependency for enhanced development experience...");
18754
- const result = await runBunWithSpinner(["add", "--dev", "@elizaos/cli"], cwd, {
18755
- spinnerText: "Installing @elizaos/cli with bun...",
18756
- successText: "\u2713 @elizaos/cli installed successfully",
18757
- errorText: "Failed to install @elizaos/cli",
18758
- showOutputOnError: false
18759
- });
18760
- if (result.success) {
18761
- logger27.info("\u2713 @elizaos/cli added as dev dependency");
18762
- return true;
18763
- } else {
18764
- logger27.warn("\u26A0 Failed to install @elizaos/cli as dev dependency (optional)");
18765
- logger27.debug({ error: result.error }, "Installation error:");
18766
- return false;
18767
- }
18768
- } catch (error) {
18769
- logger27.warn("\u26A0 Failed to install @elizaos/cli as dev dependency (optional)");
18770
- logger27.debug({ error }, "Installation error:");
18771
- return false;
18772
- }
18773
- }
18774
- async function ensureElizaOSCli(cwd = process.cwd()) {
18775
- if (!shouldAutoInstallCli(cwd)) {
18776
- return;
18777
- }
18778
- logger27.debug("Auto-installing @elizaos/cli for enhanced development experience");
18779
- const success = await installElizaOSCli(cwd);
18780
- if (success) {
18781
- logger27.info("Next time you can use the local CLI for better performance and consistency");
18782
- }
18783
- }
18784
- var init_dependency_manager = __esm(() => {
18785
- init_bun_exec();
18786
- init_spinner_utils();
18787
- init_directory_detection();
18788
- });
18789
-
18790
18466
  // ../../node_modules/chalk/source/vendor/ansi-styles/index.js
18791
18467
  function assembleStyles() {
18792
18468
  const codes = new Map;
@@ -19276,52 +18952,6 @@ var init_source = __esm(() => {
19276
18952
  source_default = chalk;
19277
18953
  });
19278
18954
 
19279
- // src/commands/env/utils/file-operations.ts
19280
- import { existsSync as existsSync26 } from "fs";
19281
- import path27 from "path";
19282
- async function getLocalEnvPath() {
19283
- const localEnvPath = path27.join(process.cwd(), ".env");
19284
- return existsSync26(localEnvPath) ? localEnvPath : null;
19285
- }
19286
- async function parseEnvFile(filePath) {
19287
- const service = createEnvFileService(filePath);
19288
- return service.read();
19289
- }
19290
- async function writeEnvFile2(filePath, envVars) {
19291
- const service = createEnvFileService(filePath);
19292
- await service.write(envVars, {
19293
- preserveComments: true,
19294
- updateProcessEnv: true
19295
- });
19296
- }
19297
- async function resetEnvFile(filePath) {
19298
- try {
19299
- if (!existsSync26(filePath)) {
19300
- return false;
19301
- }
19302
- const service = createEnvFileService(filePath);
19303
- const envVars = await service.read();
19304
- if (Object.keys(envVars).length === 0) {
19305
- return false;
19306
- }
19307
- const resetVars = Object.keys(envVars).reduce((acc, key) => {
19308
- acc[key] = "";
19309
- return acc;
19310
- }, {});
19311
- await service.write(resetVars, {
19312
- preserveComments: true,
19313
- updateProcessEnv: false
19314
- });
19315
- return true;
19316
- } catch (error) {
19317
- console.error(`Error resetting environment file: ${error instanceof Error ? error.message : String(error)}`);
19318
- return false;
19319
- }
19320
- }
19321
- var init_file_operations = __esm(() => {
19322
- init_env_file_service();
19323
- });
19324
-
19325
18955
  // ../../node_modules/@anthropic-ai/sdk/internal/tslib.mjs
19326
18956
  function __classPrivateFieldSet2(receiver, state, value, kind, f) {
19327
18957
  if (kind === "m")
@@ -33084,7 +32714,7 @@ var exports_ScreenRecorder = {};
33084
32714
  __export(exports_ScreenRecorder, {
33085
32715
  ScreenRecorder: () => ScreenRecorder
33086
32716
  });
33087
- import { spawn as spawn2, spawnSync } from "child_process";
32717
+ import { spawn, spawnSync } from "child_process";
33088
32718
  import { PassThrough } from "stream";
33089
32719
  var import_debug, __runInitializers4 = function(thisArg, initializers, value) {
33090
32720
  var useValue = arguments.length > 2;
@@ -33180,7 +32810,7 @@ var init_ScreenRecorder = __esm(() => {
33180
32810
  if (error2) {
33181
32811
  throw error2;
33182
32812
  }
33183
- this.#process = spawn2(path47, [
32813
+ this.#process = spawn(path47, [
33184
32814
  ["-loglevel", "error"],
33185
32815
  ["-avioflags", "direct"],
33186
32816
  [
@@ -259606,599 +259236,6 @@ var require_dist12 = __commonJS((exports) => {
259606
259236
  exports.cosmiconfigSync = cosmiconfigSync;
259607
259237
  });
259608
259238
 
259609
- // src/project.ts
259610
- import {
259611
- logger as logger41
259612
- } from "@elizaos/core";
259613
- import { stringToUuid } from "@elizaos/core";
259614
- import * as fs31 from "fs";
259615
- import path57 from "path";
259616
- function isPlugin(module) {
259617
- if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
259618
- return true;
259619
- }
259620
- if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
259621
- return true;
259622
- }
259623
- for (const key in module) {
259624
- if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
259625
- return true;
259626
- }
259627
- }
259628
- return false;
259629
- }
259630
- function extractPlugin(module) {
259631
- if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
259632
- return module;
259633
- }
259634
- if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
259635
- return module.default;
259636
- }
259637
- for (const key in module) {
259638
- if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
259639
- return module[key];
259640
- }
259641
- }
259642
- throw new Error("Could not extract plugin from module");
259643
- }
259644
- async function loadProject(dir) {
259645
- try {
259646
- const dirInfo = detectDirectoryType(dir);
259647
- if (!dirInfo.hasPackageJson) {
259648
- throw new Error(`No package.json found in ${dir}`);
259649
- }
259650
- const packageJson = JSON.parse(fs31.readFileSync(path57.join(dir, "package.json"), "utf8"));
259651
- const main2 = packageJson.main;
259652
- if (!main2) {
259653
- logger41.warn("No main field found in package.json, using default character");
259654
- const defaultCharacterName = "Eliza (Default)";
259655
- const elizaCharacter = getElizaCharacter();
259656
- const defaultAgent = {
259657
- character: {
259658
- ...elizaCharacter,
259659
- id: stringToUuid(defaultCharacterName),
259660
- name: defaultCharacterName
259661
- },
259662
- init: async () => {
259663
- logger41.info("Initializing default Eliza character");
259664
- }
259665
- };
259666
- return {
259667
- agents: [defaultAgent],
259668
- dir
259669
- };
259670
- }
259671
- const entryPoints = [
259672
- path57.join(dir, main2),
259673
- path57.join(dir, "dist/index.js"),
259674
- path57.join(dir, "src/index.ts"),
259675
- path57.join(dir, "src/index.js"),
259676
- path57.join(dir, "index.ts"),
259677
- path57.join(dir, "index.js")
259678
- ];
259679
- let projectModule = null;
259680
- for (const entryPoint of entryPoints) {
259681
- if (fs31.existsSync(entryPoint)) {
259682
- try {
259683
- const importPath = path57.resolve(entryPoint);
259684
- const importUrl = process.platform === "win32" ? "file:///" + importPath.replace(/\\/g, "/") : "file://" + importPath;
259685
- projectModule = await import(importUrl);
259686
- logger41.info(`Loaded project from ${entryPoint}`);
259687
- const exportKeys = Object.keys(projectModule);
259688
- logger41.debug({ exportKeys }, `Module exports:`);
259689
- if (exportKeys.includes("default")) {
259690
- logger41.debug({ type: typeof projectModule.default }, `Default export type:`);
259691
- if (typeof projectModule.default === "object" && projectModule.default !== null) {
259692
- logger41.debug({ keys: Object.keys(projectModule.default) }, `Default export keys:`);
259693
- }
259694
- }
259695
- break;
259696
- } catch (error2) {
259697
- logger41.warn({ error: error2, entryPoint }, `Failed to import project`);
259698
- }
259699
- }
259700
- }
259701
- if (!projectModule) {
259702
- throw new Error("Could not find project entry point");
259703
- }
259704
- const moduleIsPlugin = isPlugin(projectModule);
259705
- logger41.debug({ moduleIsPlugin }, `Is this a plugin?`);
259706
- if (moduleIsPlugin) {
259707
- logger41.info("Detected plugin module instead of project");
259708
- try {
259709
- const plugin = extractPlugin(projectModule);
259710
- logger41.debug({ name: plugin.name, description: plugin.description }, `Found plugin:`);
259711
- logger41.debug({ keys: Object.keys(plugin) }, `Plugin has the following properties:`);
259712
- const completePlugin = {
259713
- ...plugin,
259714
- name: plugin.name || "unknown-plugin",
259715
- description: plugin.description || "No description",
259716
- init: plugin.init || (async () => {
259717
- logger41.info(`Dummy init for plugin: ${plugin.name}`);
259718
- })
259719
- };
259720
- const characterName = "Eliza (Test Mode)";
259721
- const elizaCharacter = getElizaCharacter();
259722
- const testCharacter = {
259723
- ...elizaCharacter,
259724
- id: stringToUuid(characterName),
259725
- name: characterName,
259726
- system: `${elizaCharacter.system} Testing the plugin: ${completePlugin.name}.`
259727
- };
259728
- logger41.info(`Using Eliza character as test agent for plugin: ${completePlugin.name}`);
259729
- const testAgent = {
259730
- character: testCharacter,
259731
- plugins: [completePlugin],
259732
- init: async () => {
259733
- logger41.info(`Initializing Eliza test agent for plugin: ${completePlugin.name}`);
259734
- }
259735
- };
259736
- return {
259737
- agents: [testAgent],
259738
- dir,
259739
- isPlugin: true,
259740
- pluginModule: completePlugin
259741
- };
259742
- } catch (error2) {
259743
- logger41.error("Error extracting plugin from module:", error2 instanceof Error ? error2.message : String(error2));
259744
- throw error2;
259745
- }
259746
- }
259747
- const agents = [];
259748
- if (projectModule.default && typeof projectModule.default === "object" && Array.isArray(projectModule.default.agents)) {
259749
- agents.push(...projectModule.default.agents);
259750
- logger41.debug({ count: agents.length }, `Found agents in default export's agents array`);
259751
- } else {
259752
- for (const [key, value] of Object.entries(projectModule)) {
259753
- if (key === "default" && value && typeof value === "object") {
259754
- if (value.character && value.init) {
259755
- agents.push(value);
259756
- logger41.debug(`Found agent in default export (single agent)`);
259757
- }
259758
- } else if (value && typeof value === "object" && value.character && value.init) {
259759
- agents.push(value);
259760
- logger41.debug({ key }, `Found agent in named export`);
259761
- }
259762
- }
259763
- }
259764
- if (agents.length === 0) {
259765
- throw new Error("No agents found in project");
259766
- }
259767
- const project = {
259768
- agents,
259769
- dir
259770
- };
259771
- return project;
259772
- } catch (error2) {
259773
- logger41.error({ error: error2 }, "Error loading project:");
259774
- throw error2;
259775
- }
259776
- }
259777
- var init_project = __esm(() => {
259778
- init_eliza();
259779
- init_directory_detection();
259780
- });
259781
-
259782
- // src/utils/port-validation.ts
259783
- function validatePort(value) {
259784
- const port = Number.parseInt(value, 10);
259785
- if (Number.isNaN(port) || port <= 0 || port > 65535) {
259786
- throw new Error("Port must be a number between 1 and 65535");
259787
- }
259788
- return port;
259789
- }
259790
-
259791
- // src/commands/start/utils/config-utils.ts
259792
- async function loadEnvConfig() {
259793
- const envInfo = await UserEnvironment.getInstanceInfo();
259794
- if (envInfo.paths.envFilePath) {
259795
- import_dotenv4.default.config({ path: envInfo.paths.envFilePath });
259796
- }
259797
- return process.env;
259798
- }
259799
- function hasCharacterSecrets(character) {
259800
- return character?.settings?.secrets && Object.keys(character.settings.secrets).length > 0;
259801
- }
259802
- function ensureCharacterSettings(character) {
259803
- if (!character.settings) {
259804
- character.settings = {};
259805
- }
259806
- }
259807
- async function loadLocalEnvSecrets() {
259808
- const envPath = await getLocalEnvPath();
259809
- if (!envPath) {
259810
- return null;
259811
- }
259812
- return await parseEnvFile(envPath);
259813
- }
259814
- async function setDefaultSecretsFromEnv(character) {
259815
- ensureCharacterSettings(character);
259816
- if (hasCharacterSecrets(character)) {
259817
- return false;
259818
- }
259819
- const envSecrets = await loadLocalEnvSecrets();
259820
- if (!envSecrets) {
259821
- return false;
259822
- }
259823
- character.settings.secrets = envSecrets;
259824
- return true;
259825
- }
259826
- var import_dotenv4;
259827
- var init_config_utils = __esm(() => {
259828
- init_utils();
259829
- import_dotenv4 = __toESM(require_main(), 1);
259830
- init_file_operations();
259831
- });
259832
-
259833
- // src/commands/start/utils/dependency-resolver.ts
259834
- import { logger as logger42 } from "@elizaos/core";
259835
- function resolvePluginDependencies(availablePlugins, isTestMode = false) {
259836
- const resolutionOrder = [];
259837
- const visited = new Set;
259838
- const visiting = new Set;
259839
- function visit(pluginName) {
259840
- if (!availablePlugins.has(pluginName)) {
259841
- logger42.warn(`Plugin dependency "${pluginName}" not found and will be skipped.`);
259842
- return;
259843
- }
259844
- if (visited.has(pluginName))
259845
- return;
259846
- if (visiting.has(pluginName)) {
259847
- logger42.error(`Circular dependency detected involving plugin: ${pluginName}`);
259848
- return;
259849
- }
259850
- visiting.add(pluginName);
259851
- const plugin = availablePlugins.get(pluginName);
259852
- if (plugin) {
259853
- const deps = [...plugin.dependencies || []];
259854
- if (isTestMode) {
259855
- deps.push(...plugin.testDependencies || []);
259856
- }
259857
- for (const dep of deps) {
259858
- visit(dep);
259859
- }
259860
- }
259861
- visiting.delete(pluginName);
259862
- visited.add(pluginName);
259863
- resolutionOrder.push(pluginName);
259864
- }
259865
- for (const name of availablePlugins.keys()) {
259866
- if (!visited.has(name)) {
259867
- visit(name);
259868
- }
259869
- }
259870
- const finalPlugins = resolutionOrder.map((name) => availablePlugins.get(name)).filter((p2) => p2);
259871
- logger42.info({ plugins: finalPlugins.map((p2) => p2.name) }, `Final plugins being loaded:`);
259872
- return finalPlugins;
259873
- }
259874
- var init_dependency_resolver = () => {};
259875
-
259876
- // src/commands/start/utils/plugin-utils.ts
259877
- import { logger as logger43 } from "@elizaos/core";
259878
- function isValidPluginShape(obj) {
259879
- if (!obj || typeof obj !== "object" || !obj.name) {
259880
- return false;
259881
- }
259882
- return !!(obj.init || obj.services || obj.providers || obj.actions || obj.evaluators || obj.description);
259883
- }
259884
- async function loadAndPreparePlugin(pluginName) {
259885
- const version2 = getCliInstallTag();
259886
- let pluginModule;
259887
- const context2 = detectPluginContext(pluginName);
259888
- if (context2.isLocalDevelopment) {
259889
- try {
259890
- pluginModule = await loadPluginModule(pluginName);
259891
- if (!pluginModule) {
259892
- logger43.error(`Failed to load local plugin ${pluginName}.`);
259893
- provideLocalPluginGuidance(pluginName, context2);
259894
- return null;
259895
- }
259896
- } catch (error2) {
259897
- logger43.error(`Error loading local plugin ${pluginName}: ${error2}`);
259898
- provideLocalPluginGuidance(pluginName, context2);
259899
- return null;
259900
- }
259901
- } else {
259902
- try {
259903
- pluginModule = await loadPluginModule(pluginName);
259904
- if (!pluginModule) {
259905
- logger43.info(`Plugin ${pluginName} not available, installing...`);
259906
- await installPlugin(pluginName, process.cwd(), version2);
259907
- pluginModule = await loadPluginModule(pluginName);
259908
- }
259909
- } catch (error2) {
259910
- logger43.error(`Failed to process plugin ${pluginName}: ${error2}`);
259911
- return null;
259912
- }
259913
- }
259914
- if (!pluginModule) {
259915
- logger43.error(`Failed to load module for plugin ${pluginName}.`);
259916
- return null;
259917
- }
259918
- const expectedFunctionName = `${pluginName.replace(/^@elizaos\/plugin-/, "").replace(/^@elizaos\//, "").replace(/-./g, (match2) => match2[1].toUpperCase())}Plugin`;
259919
- const exportsToCheck = [
259920
- pluginModule[expectedFunctionName],
259921
- pluginModule.default,
259922
- ...Object.values(pluginModule)
259923
- ];
259924
- for (const potentialPlugin of exportsToCheck) {
259925
- if (isValidPluginShape(potentialPlugin)) {
259926
- return potentialPlugin;
259927
- }
259928
- }
259929
- logger43.warn(`Could not find a valid plugin export in ${pluginName}.`);
259930
- return null;
259931
- }
259932
- var init_plugin_utils = __esm(() => {
259933
- init_utils();
259934
- init_plugin_context();
259935
- });
259936
-
259937
- // src/commands/start/actions/agent-start.ts
259938
- var exports_agent_start = {};
259939
- __export(exports_agent_start, {
259940
- stopAgent: () => stopAgent2,
259941
- startAgent: () => startAgent2
259942
- });
259943
- import {
259944
- AgentRuntime as AgentRuntime2,
259945
- encryptedCharacter,
259946
- logger as logger44,
259947
- stringToUuid as stringToUuid2
259948
- } from "@elizaos/core";
259949
- import sqlPlugin from "@elizaos/plugin-sql";
259950
- async function startAgent2(character, server2, init, plugins2 = [], options = {}) {
259951
- character.id ??= stringToUuid2(character.name);
259952
- if (!hasCharacterSecrets(character)) {
259953
- await setDefaultSecretsFromEnv(character);
259954
- }
259955
- const loadedPlugins = new Map;
259956
- const pluginsToLoad = new Set(character.plugins || []);
259957
- for (const p2 of plugins2) {
259958
- if (typeof p2 === "string") {
259959
- pluginsToLoad.add(p2);
259960
- } else if (isValidPluginShape(p2) && !loadedPlugins.has(p2.name)) {
259961
- loadedPlugins.set(p2.name, p2);
259962
- (p2.dependencies || []).forEach((dep) => pluginsToLoad.add(dep));
259963
- if (options.isTestMode) {
259964
- (p2.testDependencies || []).forEach((dep) => pluginsToLoad.add(dep));
259965
- }
259966
- }
259967
- }
259968
- const allAvailablePlugins = new Map;
259969
- for (const p2 of loadedPlugins.values()) {
259970
- allAvailablePlugins.set(p2.name, p2);
259971
- }
259972
- for (const name of pluginsToLoad) {
259973
- if (!allAvailablePlugins.has(name)) {
259974
- const loaded = await loadAndPreparePlugin(name);
259975
- if (loaded) {
259976
- allAvailablePlugins.set(loaded.name, loaded);
259977
- }
259978
- }
259979
- }
259980
- let haveSql = false;
259981
- for (const n of allAvailablePlugins.keys()) {
259982
- if (n === sqlPlugin.name || n === "mysql") {
259983
- haveSql = true;
259984
- break;
259985
- }
259986
- }
259987
- if (!haveSql) {
259988
- allAvailablePlugins.set(sqlPlugin.name, sqlPlugin);
259989
- }
259990
- const finalPlugins = resolvePluginDependencies(allAvailablePlugins, options.isTestMode);
259991
- const runtime = new AgentRuntime2({
259992
- character: encryptedCharacter(character),
259993
- plugins: finalPlugins,
259994
- settings: await loadEnvConfig()
259995
- });
259996
- const initWrapper = async (runtime2) => {
259997
- if (init) {
259998
- await init(runtime2);
259999
- }
260000
- };
260001
- await initWrapper(runtime);
260002
- await runtime.initialize();
260003
- server2.registerAgent(runtime);
260004
- logger44.log(`Started ${runtime.character.name} as ${runtime.agentId}`);
260005
- return runtime;
260006
- }
260007
- async function stopAgent2(runtime, server2) {
260008
- await runtime.close();
260009
- server2.unregisterAgent(runtime.agentId);
260010
- logger44.success(`Agent ${runtime.character.name} stopped successfully!`);
260011
- }
260012
- var init_agent_start = __esm(() => {
260013
- init_config_utils();
260014
- init_dependency_resolver();
260015
- init_plugin_utils();
260016
- });
260017
-
260018
- // src/commands/start/actions/server-start.ts
260019
- import { logger as logger45 } from "@elizaos/core";
260020
- import path58 from "path";
260021
- import { fileURLToPath as fileURLToPath9 } from "url";
260022
- import { existsSync as existsSync40, readFileSync as readFileSync18 } from "fs";
260023
- async function startAgents(options) {
260024
- const postgresUrl = await configureDatabaseSettings(options.configure);
260025
- if (postgresUrl)
260026
- process.env.POSTGRES_URL = postgresUrl;
260027
- const pgliteDataDir = postgresUrl ? undefined : await resolvePgliteDir();
260028
- const moduleLoader = getModuleLoader();
260029
- const serverModule = await moduleLoader.load("@elizaos/server");
260030
- const { AgentServer, jsonToCharacter, loadCharacterTryPath } = serverModule;
260031
- const __filename3 = fileURLToPath9(import.meta.url);
260032
- const __dirname4 = path58.dirname(__filename3);
260033
- let cliDistPath = path58.resolve(__dirname4, "../../../");
260034
- const indexPath = path58.join(cliDistPath, "index.html");
260035
- if (!existsSync40(indexPath)) {
260036
- let currentDir = __dirname4;
260037
- while (currentDir !== path58.dirname(currentDir)) {
260038
- const packageJsonPath = path58.join(currentDir, "package.json");
260039
- if (existsSync40(packageJsonPath)) {
260040
- try {
260041
- const packageJson = JSON.parse(readFileSync18(packageJsonPath, "utf-8"));
260042
- if (packageJson.name === "@elizaos/cli") {
260043
- const distPath = path58.join(currentDir, "dist");
260044
- if (existsSync40(path58.join(distPath, "index.html"))) {
260045
- cliDistPath = distPath;
260046
- break;
260047
- }
260048
- }
260049
- } catch {}
260050
- }
260051
- currentDir = path58.dirname(currentDir);
260052
- }
260053
- }
260054
- const server2 = new AgentServer;
260055
- await server2.initialize({
260056
- dataDir: pgliteDataDir,
260057
- postgresUrl: postgresUrl || undefined
260058
- });
260059
- server2.startAgent = (character) => startAgent2(character, server2);
260060
- server2.stopAgent = (runtime) => stopAgent2(runtime, server2);
260061
- server2.loadCharacterTryPath = loadCharacterTryPath;
260062
- server2.jsonToCharacter = jsonToCharacter;
260063
- const desiredPort = options.port || Number.parseInt(process.env.SERVER_PORT || "3000");
260064
- const serverHost = process.env.SERVER_HOST || "0.0.0.0";
260065
- const serverPort = await findNextAvailablePort(desiredPort, serverHost);
260066
- if (serverPort !== desiredPort) {
260067
- logger45.warn({ desiredPort, serverPort }, "Port is in use, using alternate port");
260068
- }
260069
- process.env.SERVER_PORT = serverPort.toString();
260070
- try {
260071
- await server2.start(serverPort);
260072
- } catch (error2) {
260073
- logger45.error({ error: error2, serverPort }, `Failed to start server on port:`);
260074
- throw error2;
260075
- }
260076
- if (options.projectAgents && options.projectAgents.length > 0) {
260077
- for (const projectAgent of options.projectAgents) {
260078
- await startAgent2(projectAgent.character, server2, projectAgent.init, projectAgent.plugins || []);
260079
- }
260080
- } else if (options.characters && options.characters.length > 0) {
260081
- for (const character of options.characters) {
260082
- await startAgent2(character, server2);
260083
- }
260084
- } else {
260085
- const elizaCharacter = getElizaCharacter();
260086
- await startAgent2(elizaCharacter, server2);
260087
- }
260088
- }
260089
- var init_server_start = __esm(() => {
260090
- init_eliza();
260091
- init_utils();
260092
- init_module_loader();
260093
- init_agent_start();
260094
- });
260095
- // src/commands/start/index.ts
260096
- import { logger as logger46 } from "@elizaos/core";
260097
- import * as fs32 from "fs";
260098
- import * as path59 from "path";
260099
- var start;
260100
- var init_start = __esm(() => {
260101
- init_project();
260102
- init_utils();
260103
- init_build_project();
260104
- init_dependency_manager();
260105
- init_directory_detection();
260106
- init_module_loader();
260107
- init_esm();
260108
- init_server_start();
260109
- init_config_utils();
260110
- init_agent_start();
260111
- init_server_start();
260112
- init_config_utils();
260113
- init_dependency_resolver();
260114
- init_plugin_utils();
260115
- start = new Command().name("start").description("Build and start the Eliza agent server").option("-c, --configure", "Reconfigure services and AI models").option("-p, --port <port>", "Port to listen on", validatePort).option("--character <paths...>", "Character file(s) to use").hook("preAction", async () => {
260116
- await displayBanner();
260117
- }).action(async (options) => {
260118
- try {
260119
- await loadEnvConfig();
260120
- await ensureElizaOSCli();
260121
- const localModulesPath = path59.join(process.cwd(), "node_modules");
260122
- if (process.env.NODE_PATH) {
260123
- process.env.NODE_PATH = `${localModulesPath}${path59.delimiter}${process.env.NODE_PATH}`;
260124
- } else {
260125
- process.env.NODE_PATH = localModulesPath;
260126
- }
260127
- const localBinPath = path59.join(process.cwd(), "node_modules", ".bin");
260128
- if (process.env.PATH) {
260129
- process.env.PATH = `${localBinPath}${path59.delimiter}${process.env.PATH}`;
260130
- } else {
260131
- process.env.PATH = localBinPath;
260132
- }
260133
- if (!process.env.PGLITE_WASM_MODE) {
260134
- process.env.PGLITE_WASM_MODE = "node";
260135
- }
260136
- const cwd = process.cwd();
260137
- const dirInfo = detectDirectoryType(cwd);
260138
- const isMonorepo = dirInfo.type === "elizaos-monorepo";
260139
- if (!isMonorepo && !process.env.ELIZA_TEST_MODE) {
260140
- try {
260141
- await buildProject(cwd, false);
260142
- } catch (error2) {
260143
- logger46.error("Build error:", error2 instanceof Error ? error2.message : String(error2));
260144
- logger46.warn("Build failed, but continuing with start. Some features may not work correctly.");
260145
- }
260146
- }
260147
- let characters = [];
260148
- let projectAgents = [];
260149
- if (options.character && options.character.length > 0) {
260150
- const moduleLoader = getModuleLoader();
260151
- const serverModule = await moduleLoader.load("@elizaos/server");
260152
- const { loadCharacterTryPath } = serverModule;
260153
- for (const charPath of options.character) {
260154
- const resolvedPath = path59.resolve(charPath);
260155
- if (!fs32.existsSync(resolvedPath)) {
260156
- logger46.error(`Character file not found: ${resolvedPath}`);
260157
- throw new Error(`Character file not found: ${resolvedPath}`);
260158
- }
260159
- try {
260160
- const character = await loadCharacterTryPath(resolvedPath);
260161
- if (character) {
260162
- characters.push(character);
260163
- logger46.info(`Successfully loaded character: ${character.name}`);
260164
- } else {
260165
- logger46.error(`Failed to load character from ${resolvedPath}: Invalid or empty character file`);
260166
- throw new Error(`Invalid character file: ${resolvedPath}`);
260167
- }
260168
- } catch (e2) {
260169
- logger46.error({ error: e2, resolvedPath }, `Failed to load character from path:`);
260170
- throw new Error(`Invalid character file: ${resolvedPath}`);
260171
- }
260172
- }
260173
- } else {
260174
- try {
260175
- const cwd2 = process.cwd();
260176
- const dirInfo2 = detectDirectoryType(cwd2);
260177
- if (dirInfo2.hasPackageJson && dirInfo2.type !== "non-elizaos-dir") {
260178
- logger46.info("No character files specified, attempting to load project agents...");
260179
- const project = await loadProject(cwd2);
260180
- if (project.agents && project.agents.length > 0) {
260181
- logger46.info(`Found ${project.agents.length} agent(s) in project configuration`);
260182
- projectAgents = project.agents;
260183
- for (const agent2 of project.agents) {
260184
- if (agent2.character) {
260185
- logger46.info(`Loaded character: ${agent2.character.name}`);
260186
- }
260187
- }
260188
- }
260189
- }
260190
- } catch (e2) {
260191
- logger46.debug({ error: e2 }, "Failed to load project agents, will use default character:");
260192
- }
260193
- }
260194
- await startAgents({ ...options, characters, projectAgents });
260195
- } catch (e2) {
260196
- handleError(e2);
260197
- process.exit(1);
260198
- }
260199
- });
260200
- });
260201
-
260202
259239
  // ../../node_modules/js-yaml/dist/js-yaml.mjs
260203
259240
  var exports_js_yaml = {};
260204
259241
  __export(exports_js_yaml, {
@@ -262862,61 +261899,6 @@ var init_js_yaml = __esm(() => {
262862
261899
  js_yaml_default = jsYaml;
262863
261900
  });
262864
261901
 
262865
- // src/commands/scenario/src/env-loader.ts
262866
- import fs37 from "fs";
262867
- import path65 from "path";
262868
- function loadEnvironmentVariables() {
262869
- const possibleEnvPaths = [
262870
- path65.join(process.cwd(), ".env"),
262871
- path65.join(__dirname, "..", "..", ".env"),
262872
- path65.join(__dirname, "..", "..", "..", "..", ".env")
262873
- ];
262874
- let loadedFrom = null;
262875
- for (const envPath of possibleEnvPaths) {
262876
- if (fs37.existsSync(envPath)) {
262877
- console.log(`[ENV] Loading environment from: ${envPath}`);
262878
- const envFileContent = fs37.readFileSync(envPath);
262879
- const parsedEnv = import_dotenv5.default.parse(envFileContent);
262880
- for (const key in parsedEnv) {
262881
- if (process.env[key] === undefined) {
262882
- process.env[key] = parsedEnv[key];
262883
- }
262884
- }
262885
- loadedFrom = envPath;
262886
- console.log(`[ENV] Environment loaded with ${Object.keys(parsedEnv).length} variables`);
262887
- break;
262888
- }
262889
- }
262890
- if (!loadedFrom) {
262891
- console.log("[ENV] No .env file found in any of the expected locations");
262892
- }
262893
- const criticalVars = ["OPENAI_API_KEY"];
262894
- for (const varName of criticalVars) {
262895
- if (process.env[varName]) {
262896
- const valuePreview = (process.env[varName] || "").toString();
262897
- const redacted = valuePreview.length > 8 ? `${valuePreview.slice(0, 4)}****${valuePreview.slice(-4)}` : "****";
262898
- console.log(`[ENV] ${varName} found in process.env: ${redacted}`);
262899
- } else {
262900
- console.log(`[ENV] \u26A0\uFE0F ${varName} not found in process.env`);
262901
- }
262902
- }
262903
- const safeKeys = ["NODE_ENV", "OPENAI_API_KEY"];
262904
- const safeEnv = {};
262905
- for (const key of safeKeys) {
262906
- if (process.env[key]) {
262907
- const val = process.env[key];
262908
- safeEnv[key] = val.length > 8 ? `${val.slice(0, 4)}****${val.slice(-4)}` : "****";
262909
- } else {
262910
- safeEnv[key] = "<missing>";
262911
- }
262912
- }
262913
- console.log("[ENV] Safe env preview:", JSON.stringify(safeEnv));
262914
- }
262915
- var import_dotenv5, __dirname = "/home/runner/work/eliza/eliza/packages/cli/src/commands/scenario/src";
262916
- var init_env_loader = __esm(() => {
262917
- import_dotenv5 = __toESM(require_main(), 1);
262918
- });
262919
-
262920
261902
  // src/commands/scenario/src/process-manager.ts
262921
261903
  var exports_process_manager = {};
262922
261904
  __export(exports_process_manager, {
@@ -263066,24 +262048,13 @@ __export(exports_runtime_factory, {
263066
262048
  createScenarioAgent: () => createScenarioAgent,
263067
262049
  askAgentViaApi: () => askAgentViaApi
263068
262050
  });
263069
- import { stringToUuid as stringToUuid3 } from "@elizaos/core";
263070
- import { AgentServer } from "@elizaos/server";
262051
+ import { stringToUuid as stringToUuid2 } from "@elizaos/core";
262052
+ import { AgentServer, ConfigManager } from "@elizaos/server";
263071
262053
  import { ElizaClient } from "@elizaos/api-client";
263072
262054
  import { ChannelType, stringToUuid as stringToUuidCore } from "@elizaos/core";
263073
- import fs38 from "fs";
263074
- import path66 from "path";
262055
+ import fs37 from "fs";
262056
+ import path64 from "path";
263075
262057
  import { createServer } from "net";
263076
- function ensureEnvLoaded() {
263077
- if (!envLoaded) {
263078
- loadEnvironmentVariables();
263079
- envSettings = process.env;
263080
- envLoaded = true;
263081
- }
263082
- if (!envSettings) {
263083
- throw new Error("Failed to load environment settings");
263084
- }
263085
- return envSettings;
263086
- }
263087
262058
  async function findAvailablePort(startPort, endPort, host) {
263088
262059
  const serverHost = host || process.env.SERVER_HOST || "0.0.0.0";
263089
262060
  console.log(`\uD83D\uDD27 [DEBUG] Searching for available port in range ${startPort}-${endPort} on host ${serverHost}...`);
@@ -263137,16 +262108,13 @@ async function createScenarioServer(existingServer = null, desiredPort = 3000) {
263137
262108
  server2 = existingServer;
263138
262109
  } else {
263139
262110
  server2 = new AgentServer;
263140
- const pgliteRoot = process.env.PGLITE_DATA_DIR || path66.join(process.cwd(), ".eliza", ".elizadb");
263141
- const uniqueDataDir = path66.join(pgliteRoot, `scenario-${Date.now()}-${Math.random().toString(36).slice(2)}`);
262111
+ const pgliteRoot = process.env.PGLITE_DATA_DIR || path64.join(process.cwd(), ".eliza", ".elizadb");
262112
+ const uniqueDataDir = path64.join(pgliteRoot, `scenario-${Date.now()}-${Math.random().toString(36).slice(2)}`);
263142
262113
  try {
263143
- fs38.mkdirSync(uniqueDataDir, { recursive: true });
262114
+ fs37.mkdirSync(uniqueDataDir, { recursive: true });
263144
262115
  } catch {}
263145
262116
  process.env.PGLITE_DATA_DIR = uniqueDataDir;
263146
262117
  await server2.initialize({ dataDir: uniqueDataDir });
263147
- const { startAgent: serverStartAgent, stopAgent: serverStopAgent } = await Promise.resolve().then(() => (init_agent_start(), exports_agent_start));
263148
- server2.startAgent = (character) => serverStartAgent(character, server2);
263149
- server2.stopAgent = (runtime) => serverStopAgent(runtime, server2);
263150
262118
  await server2.start(port);
263151
262119
  createdServer = true;
263152
262120
  process.env.SERVER_PORT = port.toString();
@@ -263180,13 +262148,11 @@ async function createScenarioAgent(server2, agentName = "scenario-agent", plugin
263180
262148
  console.log(`\uD83D\uDD27 [DEBUG] createScenarioAgent called for agent: ${agentName}, plugins: ${pluginNames.join(", ")}`);
263181
262149
  const character = {
263182
262150
  name: agentName,
263183
- id: stringToUuid3(agentName),
262151
+ id: stringToUuid2(agentName),
263184
262152
  bio: "A test agent for scenario execution",
263185
262153
  plugins: pluginNames,
263186
262154
  settings: {
263187
- secrets: {
263188
- ...ensureEnvLoaded()
263189
- }
262155
+ secrets: {}
263190
262156
  },
263191
262157
  system: "Always respond to every message, even if the input is unclear or empty. Never ignore a user message.",
263192
262158
  topics: ["testing", "scenarios", "automation"],
@@ -263196,8 +262162,12 @@ async function createScenarioAgent(server2, agentName = "scenario-agent", plugin
263196
262162
  chat: ["Direct", "Helpful"]
263197
262163
  }
263198
262164
  };
263199
- await setDefaultSecretsFromEnv(character);
263200
- const runtime = await server2.startAgent(character);
262165
+ const configManager = new ConfigManager;
262166
+ await configManager.setDefaultSecretsFromEnv(character);
262167
+ const [runtime] = await server2.startAgents([character]);
262168
+ if (!runtime) {
262169
+ throw new Error(`Failed to start agent: ${character.name}`);
262170
+ }
263201
262171
  const agentId = runtime.character.id;
263202
262172
  return { runtime, agentId };
263203
262173
  }
@@ -263389,10 +262359,7 @@ async function askAgentViaApi(server2, agentId, input2, timeoutMs = 60000, serve
263389
262359
  throw error2;
263390
262360
  }
263391
262361
  }
263392
- var envSettings = null, envLoaded = false;
263393
262362
  var init_runtime_factory = __esm(() => {
263394
- init_env_loader();
263395
- init_start();
263396
262363
  init_process_manager();
263397
262364
  });
263398
262365
 
@@ -264105,7 +263072,7 @@ class EnhancedFileExistsEvaluator {
264105
263072
  const expectedPath = params.path;
264106
263073
  const createdFiles = Object.keys(runResult.files);
264107
263074
  const success = createdFiles.includes(expectedPath) || createdFiles.includes(`./${expectedPath}`) || createdFiles.includes(expectedPath.replace(/^\.\//, ""));
264108
- const matchingPath = createdFiles.find((path67) => path67 === expectedPath || path67 === `./${expectedPath}` || path67 === expectedPath.replace(/^\.\//, ""));
263075
+ const matchingPath = createdFiles.find((path65) => path65 === expectedPath || path65 === `./${expectedPath}` || path65 === expectedPath.replace(/^\.\//, ""));
264109
263076
  return {
264110
263077
  evaluator_type: "file_exists",
264111
263078
  success,
@@ -265148,8 +264115,8 @@ var exports_LocalEnvironmentProvider = {};
265148
264115
  __export(exports_LocalEnvironmentProvider, {
265149
264116
  LocalEnvironmentProvider: () => LocalEnvironmentProvider
265150
264117
  });
265151
- import fs39 from "fs/promises";
265152
- import path67 from "path";
264118
+ import fs38 from "fs/promises";
264119
+ import path65 from "path";
265153
264120
  import os10 from "os";
265154
264121
 
265155
264122
  class LocalEnvironmentProvider {
@@ -265173,14 +264140,14 @@ class LocalEnvironmentProvider {
265173
264140
  console.log(`\uD83D\uDD27 [DEBUG] - Server Port: ${serverPort}`);
265174
264141
  }
265175
264142
  async setup(scenario) {
265176
- const tempDirPrefix = path67.join(os10.tmpdir(), "eliza-scenario-run-");
265177
- this.tempDir = await fs39.mkdtemp(tempDirPrefix);
264143
+ const tempDirPrefix = path65.join(os10.tmpdir(), "eliza-scenario-run-");
264144
+ this.tempDir = await fs38.mkdtemp(tempDirPrefix);
265178
264145
  const virtualFs = scenario.setup?.virtual_fs;
265179
264146
  if (virtualFs) {
265180
264147
  for (const [filePath, content] of Object.entries(virtualFs)) {
265181
- const fullPath = path67.join(this.tempDir, filePath);
265182
- await fs39.mkdir(path67.dirname(fullPath), { recursive: true });
265183
- await fs39.writeFile(fullPath, content);
264148
+ const fullPath = path65.join(this.tempDir, filePath);
264149
+ await fs38.mkdir(path65.dirname(fullPath), { recursive: true });
264150
+ await fs38.writeFile(fullPath, content);
265184
264151
  }
265185
264152
  }
265186
264153
  }
@@ -265191,15 +264158,15 @@ class LocalEnvironmentProvider {
265191
264158
  const files = {};
265192
264159
  try {
265193
264160
  const readDirRecursive = async (dirPath, basePath = "") => {
265194
- const entries = await fs39.readdir(dirPath, { withFileTypes: true });
264161
+ const entries = await fs38.readdir(dirPath, { withFileTypes: true });
265195
264162
  for (const entry of entries) {
265196
- const fullPath = path67.join(dirPath, entry.name);
265197
- const relativePath = path67.join(basePath, entry.name);
264163
+ const fullPath = path65.join(dirPath, entry.name);
264164
+ const relativePath = path65.join(basePath, entry.name);
265198
264165
  if (entry.isDirectory()) {
265199
264166
  await readDirRecursive(fullPath, relativePath);
265200
264167
  } else if (entry.isFile()) {
265201
264168
  try {
265202
- const content = await fs39.readFile(fullPath, "utf-8");
264169
+ const content = await fs38.readFile(fullPath, "utf-8");
265203
264170
  files[relativePath] = content;
265204
264171
  } catch (error2) {
265205
264172
  files[relativePath] = "[binary or unreadable]";
@@ -265348,7 +264315,7 @@ class LocalEnvironmentProvider {
265348
264315
  }
265349
264316
  async teardown() {
265350
264317
  if (this.tempDir) {
265351
- await fs39.rm(this.tempDir, { recursive: true, force: true });
264318
+ await fs38.rm(this.tempDir, { recursive: true, force: true });
265352
264319
  this.tempDir = null;
265353
264320
  }
265354
264321
  }
@@ -266637,11 +265604,11 @@ var require_lodash = __commonJS((exports, module) => {
266637
265604
  return isFunction2(object[key]);
266638
265605
  });
266639
265606
  }
266640
- function baseGet(object, path68) {
266641
- path68 = castPath(path68, object);
266642
- var index = 0, length = path68.length;
265607
+ function baseGet(object, path66) {
265608
+ path66 = castPath(path66, object);
265609
+ var index = 0, length = path66.length;
266643
265610
  while (object != null && index < length) {
266644
- object = object[toKey(path68[index++])];
265611
+ object = object[toKey(path66[index++])];
266645
265612
  }
266646
265613
  return index && index == length ? object : undefined2;
266647
265614
  }
@@ -266705,10 +265672,10 @@ var require_lodash = __commonJS((exports, module) => {
266705
265672
  });
266706
265673
  return accumulator;
266707
265674
  }
266708
- function baseInvoke(object, path68, args) {
266709
- path68 = castPath(path68, object);
266710
- object = parent(object, path68);
266711
- var func = object == null ? object : object[toKey(last2(path68))];
265675
+ function baseInvoke(object, path66, args) {
265676
+ path66 = castPath(path66, object);
265677
+ object = parent(object, path66);
265678
+ var func = object == null ? object : object[toKey(last2(path66))];
266712
265679
  return func == null ? undefined2 : apply(func, object, args);
266713
265680
  }
266714
265681
  function baseIsArguments(value) {
@@ -266864,13 +265831,13 @@ var require_lodash = __commonJS((exports, module) => {
266864
265831
  return object === source2 || baseIsMatch(object, source2, matchData);
266865
265832
  };
266866
265833
  }
266867
- function baseMatchesProperty(path68, srcValue) {
266868
- if (isKey(path68) && isStrictComparable(srcValue)) {
266869
- return matchesStrictComparable(toKey(path68), srcValue);
265834
+ function baseMatchesProperty(path66, srcValue) {
265835
+ if (isKey(path66) && isStrictComparable(srcValue)) {
265836
+ return matchesStrictComparable(toKey(path66), srcValue);
266870
265837
  }
266871
265838
  return function(object) {
266872
- var objValue = get(object, path68);
266873
- return objValue === undefined2 && objValue === srcValue ? hasIn(object, path68) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
265839
+ var objValue = get(object, path66);
265840
+ return objValue === undefined2 && objValue === srcValue ? hasIn(object, path66) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
266874
265841
  };
266875
265842
  }
266876
265843
  function baseMerge(object, source2, srcIndex, customizer, stack) {
@@ -266967,23 +265934,23 @@ var require_lodash = __commonJS((exports, module) => {
266967
265934
  });
266968
265935
  }
266969
265936
  function basePick(object, paths) {
266970
- return basePickBy(object, paths, function(value, path68) {
266971
- return hasIn(object, path68);
265937
+ return basePickBy(object, paths, function(value, path66) {
265938
+ return hasIn(object, path66);
266972
265939
  });
266973
265940
  }
266974
265941
  function basePickBy(object, paths, predicate) {
266975
265942
  var index = -1, length = paths.length, result2 = {};
266976
265943
  while (++index < length) {
266977
- var path68 = paths[index], value = baseGet(object, path68);
266978
- if (predicate(value, path68)) {
266979
- baseSet(result2, castPath(path68, object), value);
265944
+ var path66 = paths[index], value = baseGet(object, path66);
265945
+ if (predicate(value, path66)) {
265946
+ baseSet(result2, castPath(path66, object), value);
266980
265947
  }
266981
265948
  }
266982
265949
  return result2;
266983
265950
  }
266984
- function basePropertyDeep(path68) {
265951
+ function basePropertyDeep(path66) {
266985
265952
  return function(object) {
266986
- return baseGet(object, path68);
265953
+ return baseGet(object, path66);
266987
265954
  };
266988
265955
  }
266989
265956
  function basePullAll(array, values2, iteratee2, comparator) {
@@ -267057,14 +266024,14 @@ var require_lodash = __commonJS((exports, module) => {
267057
266024
  var array = values(collection);
267058
266025
  return shuffleSelf(array, baseClamp(n, 0, array.length));
267059
266026
  }
267060
- function baseSet(object, path68, value, customizer) {
266027
+ function baseSet(object, path66, value, customizer) {
267061
266028
  if (!isObject2(object)) {
267062
266029
  return object;
267063
266030
  }
267064
- path68 = castPath(path68, object);
267065
- var index = -1, length = path68.length, lastIndex = length - 1, nested = object;
266031
+ path66 = castPath(path66, object);
266032
+ var index = -1, length = path66.length, lastIndex = length - 1, nested = object;
267066
266033
  while (nested != null && ++index < length) {
267067
- var key = toKey(path68[index]), newValue = value;
266034
+ var key = toKey(path66[index]), newValue = value;
267068
266035
  if (key === "__proto__" || key === "constructor" || key === "prototype") {
267069
266036
  return object;
267070
266037
  }
@@ -267072,7 +266039,7 @@ var require_lodash = __commonJS((exports, module) => {
267072
266039
  var objValue = nested[key];
267073
266040
  newValue = customizer ? customizer(objValue, key, nested) : undefined2;
267074
266041
  if (newValue === undefined2) {
267075
- newValue = isObject2(objValue) ? objValue : isIndex(path68[index + 1]) ? [] : {};
266042
+ newValue = isObject2(objValue) ? objValue : isIndex(path66[index + 1]) ? [] : {};
267076
266043
  }
267077
266044
  }
267078
266045
  assignValue(nested, key, newValue);
@@ -267238,13 +266205,13 @@ var require_lodash = __commonJS((exports, module) => {
267238
266205
  }
267239
266206
  return result2;
267240
266207
  }
267241
- function baseUnset(object, path68) {
267242
- path68 = castPath(path68, object);
267243
- object = parent(object, path68);
267244
- return object == null || delete object[toKey(last2(path68))];
266208
+ function baseUnset(object, path66) {
266209
+ path66 = castPath(path66, object);
266210
+ object = parent(object, path66);
266211
+ return object == null || delete object[toKey(last2(path66))];
267245
266212
  }
267246
- function baseUpdate(object, path68, updater, customizer) {
267247
- return baseSet(object, path68, updater(baseGet(object, path68)), customizer);
266213
+ function baseUpdate(object, path66, updater, customizer) {
266214
+ return baseSet(object, path66, updater(baseGet(object, path66)), customizer);
267248
266215
  }
267249
266216
  function baseWhile(array, predicate, isDrop, fromRight) {
267250
266217
  var length = array.length, index = fromRight ? length : -1;
@@ -268103,11 +267070,11 @@ var require_lodash = __commonJS((exports, module) => {
268103
267070
  var match2 = source2.match(reWrapDetails);
268104
267071
  return match2 ? match2[1].split(reSplitDetails) : [];
268105
267072
  }
268106
- function hasPath(object, path68, hasFunc) {
268107
- path68 = castPath(path68, object);
268108
- var index = -1, length = path68.length, result2 = false;
267073
+ function hasPath(object, path66, hasFunc) {
267074
+ path66 = castPath(path66, object);
267075
+ var index = -1, length = path66.length, result2 = false;
268109
267076
  while (++index < length) {
268110
- var key = toKey(path68[index]);
267077
+ var key = toKey(path66[index]);
268111
267078
  if (!(result2 = object != null && hasFunc(object, key))) {
268112
267079
  break;
268113
267080
  }
@@ -268311,8 +267278,8 @@ var require_lodash = __commonJS((exports, module) => {
268311
267278
  return apply(func, this, otherArgs);
268312
267279
  };
268313
267280
  }
268314
- function parent(object, path68) {
268315
- return path68.length < 2 ? object : baseGet(object, baseSlice(path68, 0, -1));
267281
+ function parent(object, path66) {
267282
+ return path66.length < 2 ? object : baseGet(object, baseSlice(path66, 0, -1));
268316
267283
  }
268317
267284
  function reorder(array, indexes) {
268318
267285
  var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array);
@@ -268945,10 +267912,10 @@ var require_lodash = __commonJS((exports, module) => {
268945
267912
  }
268946
267913
  return isString2(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
268947
267914
  }
268948
- var invokeMap = baseRest(function(collection, path68, args) {
268949
- var index = -1, isFunc = typeof path68 == "function", result2 = isArrayLike2(collection) ? Array2(collection.length) : [];
267915
+ var invokeMap = baseRest(function(collection, path66, args) {
267916
+ var index = -1, isFunc = typeof path66 == "function", result2 = isArrayLike2(collection) ? Array2(collection.length) : [];
268950
267917
  baseEach(collection, function(value) {
268951
- result2[++index] = isFunc ? apply(path68, value, args) : baseInvoke(value, path68, args);
267918
+ result2[++index] = isFunc ? apply(path66, value, args) : baseInvoke(value, path66, args);
268952
267919
  });
268953
267920
  return result2;
268954
267921
  });
@@ -269600,15 +268567,15 @@ var require_lodash = __commonJS((exports, module) => {
269600
268567
  function functionsIn(object) {
269601
268568
  return object == null ? [] : baseFunctions(object, keysIn(object));
269602
268569
  }
269603
- function get(object, path68, defaultValue) {
269604
- var result2 = object == null ? undefined2 : baseGet(object, path68);
268570
+ function get(object, path66, defaultValue) {
268571
+ var result2 = object == null ? undefined2 : baseGet(object, path66);
269605
268572
  return result2 === undefined2 ? defaultValue : result2;
269606
268573
  }
269607
- function has(object, path68) {
269608
- return object != null && hasPath(object, path68, baseHas);
268574
+ function has(object, path66) {
268575
+ return object != null && hasPath(object, path66, baseHas);
269609
268576
  }
269610
- function hasIn(object, path68) {
269611
- return object != null && hasPath(object, path68, baseHasIn);
268577
+ function hasIn(object, path66) {
268578
+ return object != null && hasPath(object, path66, baseHasIn);
269612
268579
  }
269613
268580
  var invert = createInverter(function(result2, value, key) {
269614
268581
  if (value != null && typeof value.toString != "function") {
@@ -269661,10 +268628,10 @@ var require_lodash = __commonJS((exports, module) => {
269661
268628
  return result2;
269662
268629
  }
269663
268630
  var isDeep = false;
269664
- paths = arrayMap(paths, function(path68) {
269665
- path68 = castPath(path68, object);
269666
- isDeep || (isDeep = path68.length > 1);
269667
- return path68;
268631
+ paths = arrayMap(paths, function(path66) {
268632
+ path66 = castPath(path66, object);
268633
+ isDeep || (isDeep = path66.length > 1);
268634
+ return path66;
269668
268635
  });
269669
268636
  copyObject(object, getAllKeysIn(object), result2);
269670
268637
  if (isDeep) {
@@ -269690,19 +268657,19 @@ var require_lodash = __commonJS((exports, module) => {
269690
268657
  return [prop];
269691
268658
  });
269692
268659
  predicate = getIteratee(predicate);
269693
- return basePickBy(object, props, function(value, path68) {
269694
- return predicate(value, path68[0]);
268660
+ return basePickBy(object, props, function(value, path66) {
268661
+ return predicate(value, path66[0]);
269695
268662
  });
269696
268663
  }
269697
- function result(object, path68, defaultValue) {
269698
- path68 = castPath(path68, object);
269699
- var index = -1, length = path68.length;
268664
+ function result(object, path66, defaultValue) {
268665
+ path66 = castPath(path66, object);
268666
+ var index = -1, length = path66.length;
269700
268667
  if (!length) {
269701
268668
  length = 1;
269702
268669
  object = undefined2;
269703
268670
  }
269704
268671
  while (++index < length) {
269705
- var value = object == null ? undefined2 : object[toKey(path68[index])];
268672
+ var value = object == null ? undefined2 : object[toKey(path66[index])];
269706
268673
  if (value === undefined2) {
269707
268674
  index = length;
269708
268675
  value = defaultValue;
@@ -269711,12 +268678,12 @@ var require_lodash = __commonJS((exports, module) => {
269711
268678
  }
269712
268679
  return object;
269713
268680
  }
269714
- function set2(object, path68, value) {
269715
- return object == null ? object : baseSet(object, path68, value);
268681
+ function set2(object, path66, value) {
268682
+ return object == null ? object : baseSet(object, path66, value);
269716
268683
  }
269717
- function setWith(object, path68, value, customizer) {
268684
+ function setWith(object, path66, value, customizer) {
269718
268685
  customizer = typeof customizer == "function" ? customizer : undefined2;
269719
- return object == null ? object : baseSet(object, path68, value, customizer);
268686
+ return object == null ? object : baseSet(object, path66, value, customizer);
269720
268687
  }
269721
268688
  var toPairs = createToPairs(keys);
269722
268689
  var toPairsIn = createToPairs(keysIn);
@@ -269738,15 +268705,15 @@ var require_lodash = __commonJS((exports, module) => {
269738
268705
  });
269739
268706
  return accumulator;
269740
268707
  }
269741
- function unset(object, path68) {
269742
- return object == null ? true : baseUnset(object, path68);
268708
+ function unset(object, path66) {
268709
+ return object == null ? true : baseUnset(object, path66);
269743
268710
  }
269744
- function update2(object, path68, updater) {
269745
- return object == null ? object : baseUpdate(object, path68, castFunction(updater));
268711
+ function update2(object, path66, updater) {
268712
+ return object == null ? object : baseUpdate(object, path66, castFunction(updater));
269746
268713
  }
269747
- function updateWith(object, path68, updater, customizer) {
268714
+ function updateWith(object, path66, updater, customizer) {
269748
268715
  customizer = typeof customizer == "function" ? customizer : undefined2;
269749
- return object == null ? object : baseUpdate(object, path68, castFunction(updater), customizer);
268716
+ return object == null ? object : baseUpdate(object, path66, castFunction(updater), customizer);
269750
268717
  }
269751
268718
  function values(object) {
269752
268719
  return object == null ? [] : baseValues(object, keys(object));
@@ -270141,17 +269108,17 @@ __p += '`;
270141
269108
  function matches(source2) {
270142
269109
  return baseMatches(baseClone(source2, CLONE_DEEP_FLAG));
270143
269110
  }
270144
- function matchesProperty(path68, srcValue) {
270145
- return baseMatchesProperty(path68, baseClone(srcValue, CLONE_DEEP_FLAG));
269111
+ function matchesProperty(path66, srcValue) {
269112
+ return baseMatchesProperty(path66, baseClone(srcValue, CLONE_DEEP_FLAG));
270146
269113
  }
270147
- var method = baseRest(function(path68, args) {
269114
+ var method = baseRest(function(path66, args) {
270148
269115
  return function(object) {
270149
- return baseInvoke(object, path68, args);
269116
+ return baseInvoke(object, path66, args);
270150
269117
  };
270151
269118
  });
270152
269119
  var methodOf = baseRest(function(object, args) {
270153
- return function(path68) {
270154
- return baseInvoke(object, path68, args);
269120
+ return function(path66) {
269121
+ return baseInvoke(object, path66, args);
270155
269122
  };
270156
269123
  });
270157
269124
  function mixin3(object, source2, options) {
@@ -270197,12 +269164,12 @@ __p += '`;
270197
269164
  var over = createOver(arrayMap);
270198
269165
  var overEvery = createOver(arrayEvery);
270199
269166
  var overSome = createOver(arraySome);
270200
- function property(path68) {
270201
- return isKey(path68) ? baseProperty(toKey(path68)) : basePropertyDeep(path68);
269167
+ function property(path66) {
269168
+ return isKey(path66) ? baseProperty(toKey(path66)) : basePropertyDeep(path66);
270202
269169
  }
270203
269170
  function propertyOf(object) {
270204
- return function(path68) {
270205
- return object == null ? undefined2 : baseGet(object, path68);
269171
+ return function(path66) {
269172
+ return object == null ? undefined2 : baseGet(object, path66);
270206
269173
  };
270207
269174
  }
270208
269175
  var range2 = createRange();
@@ -270655,12 +269622,12 @@ __p += '`;
270655
269622
  LazyWrapper.prototype.findLast = function(predicate) {
270656
269623
  return this.reverse().find(predicate);
270657
269624
  };
270658
- LazyWrapper.prototype.invokeMap = baseRest(function(path68, args) {
270659
- if (typeof path68 == "function") {
269625
+ LazyWrapper.prototype.invokeMap = baseRest(function(path66, args) {
269626
+ if (typeof path66 == "function") {
270660
269627
  return new LazyWrapper(this);
270661
269628
  }
270662
269629
  return this.map(function(value) {
270663
- return baseInvoke(value, path68, args);
269630
+ return baseInvoke(value, path66, args);
270664
269631
  });
270665
269632
  });
270666
269633
  LazyWrapper.prototype.reject = function(predicate) {
@@ -271034,14 +270001,14 @@ function formatDuration(seconds) {
271034
270001
  }
271035
270002
 
271036
270003
  // src/commands/scenario/src/path-parser.ts
271037
- function parseParameterPath(path68) {
271038
- if (pathCache.has(path68)) {
271039
- return pathCache.get(path68);
270004
+ function parseParameterPath(path66) {
270005
+ if (pathCache.has(path66)) {
270006
+ return pathCache.get(path66);
271040
270007
  }
271041
- if (!path68 || typeof path68 !== "string") {
270008
+ if (!path66 || typeof path66 !== "string") {
271042
270009
  throw new Error("Path must be a non-empty string");
271043
270010
  }
271044
- if (path68.startsWith(".") || path68.endsWith(".")) {
270011
+ if (path66.startsWith(".") || path66.endsWith(".")) {
271045
270012
  throw new Error("Path cannot start or end with a dot");
271046
270013
  }
271047
270014
  const segments = [];
@@ -271049,8 +270016,8 @@ function parseParameterPath(path68) {
271049
270016
  let currentSegment = "";
271050
270017
  let i2 = 0;
271051
270018
  let lastCharWasArrayClose = false;
271052
- while (i2 < path68.length) {
271053
- const char = path68[i2];
270019
+ while (i2 < path66.length) {
270020
+ const char = path66[i2];
271054
270021
  if (char === ".") {
271055
270022
  if (currentSegment === "" && !lastCharWasArrayClose) {
271056
270023
  throw new Error("Empty segment in path (double dots or leading/trailing dots not allowed)");
@@ -271067,11 +270034,11 @@ function parseParameterPath(path68) {
271067
270034
  }
271068
270035
  segments.push(currentSegment);
271069
270036
  currentSegment = "";
271070
- const closingBracket = path68.indexOf("]", i2);
270037
+ const closingBracket = path66.indexOf("]", i2);
271071
270038
  if (closingBracket === -1) {
271072
270039
  throw new Error("Missing closing bracket for array index");
271073
270040
  }
271074
- const indexStr = path68.substring(i2 + 1, closingBracket);
270041
+ const indexStr = path66.substring(i2 + 1, closingBracket);
271075
270042
  if (!/^\d+$/.test(indexStr)) {
271076
270043
  throw new Error(`Invalid array index: ${indexStr}`);
271077
270044
  }
@@ -271090,7 +270057,7 @@ function parseParameterPath(path68) {
271090
270057
  }
271091
270058
  if (currentSegment !== "") {
271092
270059
  segments.push(currentSegment);
271093
- } else if (path68.endsWith(".")) {
270060
+ } else if (path66.endsWith(".")) {
271094
270061
  throw new Error("Path cannot start or end with a dot");
271095
270062
  }
271096
270063
  if (segments.length === 0) {
@@ -271106,24 +270073,24 @@ function parseParameterPath(path68) {
271106
270073
  const result = {
271107
270074
  segments,
271108
270075
  hasArrayAccess,
271109
- originalPath: path68
270076
+ originalPath: path66
271110
270077
  };
271111
- pathCache.set(path68, result);
270078
+ pathCache.set(path66, result);
271112
270079
  return result;
271113
270080
  }
271114
- function isValidPathSyntax(path68) {
270081
+ function isValidPathSyntax(path66) {
271115
270082
  try {
271116
- parseParameterPath(path68);
270083
+ parseParameterPath(path66);
271117
270084
  return true;
271118
270085
  } catch {
271119
270086
  return false;
271120
270087
  }
271121
270088
  }
271122
- function normalizeParameterPath(path68) {
271123
- if (!path68 || typeof path68 !== "string") {
270089
+ function normalizeParameterPath(path66) {
270090
+ if (!path66 || typeof path66 !== "string") {
271124
270091
  return "";
271125
270092
  }
271126
- let normalized = path68.trim();
270093
+ let normalized = path66.trim();
271127
270094
  normalized = normalized.replace(/\.+/g, ".");
271128
270095
  normalized = normalized.replace(/^\.+|\.+$/g, "");
271129
270096
  return normalized;
@@ -271280,7 +270247,7 @@ __export(exports_parameter_override, {
271280
270247
  applyParameterOverride: () => applyParameterOverride,
271281
270248
  applyMatrixOverrides: () => applyMatrixOverrides
271282
270249
  });
271283
- function validateParameterPath(obj, path68) {
270250
+ function validateParameterPath(obj, path66) {
271284
270251
  if (!obj || typeof obj !== "object") {
271285
270252
  return {
271286
270253
  isValid: false,
@@ -271290,7 +270257,7 @@ function validateParameterPath(obj, path68) {
271290
270257
  };
271291
270258
  }
271292
270259
  try {
271293
- const parsedPath = parseParameterPath(path68);
270260
+ const parsedPath = parseParameterPath(path66);
271294
270261
  let current = obj;
271295
270262
  let currentPath = "";
271296
270263
  for (let i2 = 0;i2 < parsedPath.segments.length; i2++) {
@@ -271360,54 +270327,54 @@ function validateParameterPath(obj, path68) {
271360
270327
  };
271361
270328
  }
271362
270329
  }
271363
- function validateParameterPathLegacy(obj, path68) {
271364
- const result = validateParameterPath(obj, path68);
270330
+ function validateParameterPathLegacy(obj, path66) {
270331
+ const result = validateParameterPath(obj, path66);
271365
270332
  return result.isValid;
271366
270333
  }
271367
- function getValueAtPath(obj, path68) {
271368
- const parsedPath = parseParameterPath(path68);
270334
+ function getValueAtPath(obj, path66) {
270335
+ const parsedPath = parseParameterPath(path66);
271369
270336
  let current = obj;
271370
270337
  for (let i2 = 0;i2 < parsedPath.segments.length; i2++) {
271371
270338
  const segment = parsedPath.segments[i2];
271372
270339
  if (typeof segment === "number") {
271373
270340
  if (!Array.isArray(current)) {
271374
- throw new Error(`Expected array at path segment, but found ${typeof current} in path: ${path68}`);
270341
+ throw new Error(`Expected array at path segment, but found ${typeof current} in path: ${path66}`);
271375
270342
  }
271376
270343
  if (segment >= current.length || segment < 0) {
271377
- throw new Error(`Array index out of bounds: ${segment} in path: ${path68}`);
270344
+ throw new Error(`Array index out of bounds: ${segment} in path: ${path66}`);
271378
270345
  }
271379
270346
  current = current[segment];
271380
270347
  } else {
271381
270348
  if (!current || typeof current !== "object") {
271382
- throw new Error(`Expected object at path segment, but found ${typeof current} in path: ${path68}`);
270349
+ throw new Error(`Expected object at path segment, but found ${typeof current} in path: ${path66}`);
271383
270350
  }
271384
270351
  if (!(segment in current)) {
271385
- throw new Error(`Property '${segment}' not found in path: ${path68}`);
270352
+ throw new Error(`Property '${segment}' not found in path: ${path66}`);
271386
270353
  }
271387
270354
  current = current[segment];
271388
270355
  }
271389
270356
  }
271390
270357
  return current;
271391
270358
  }
271392
- function setValueAtPath(obj, path68, value) {
271393
- const parsedPath = parseParameterPath(path68);
270359
+ function setValueAtPath(obj, path66, value) {
270360
+ const parsedPath = parseParameterPath(path66);
271394
270361
  let current = obj;
271395
270362
  for (let i2 = 0;i2 < parsedPath.segments.length - 1; i2++) {
271396
270363
  const segment = parsedPath.segments[i2];
271397
270364
  if (typeof segment === "number") {
271398
270365
  if (!Array.isArray(current)) {
271399
- throw new Error(`Expected array at path segment, but found ${typeof current} in path: ${path68}`);
270366
+ throw new Error(`Expected array at path segment, but found ${typeof current} in path: ${path66}`);
271400
270367
  }
271401
270368
  if (segment >= current.length || segment < 0) {
271402
- throw new Error(`Array index out of bounds: ${segment} in path: ${path68}`);
270369
+ throw new Error(`Array index out of bounds: ${segment} in path: ${path66}`);
271403
270370
  }
271404
270371
  current = current[segment];
271405
270372
  } else {
271406
270373
  if (!current || typeof current !== "object") {
271407
- throw new Error(`Expected object at path segment, but found ${typeof current} in path: ${path68}`);
270374
+ throw new Error(`Expected object at path segment, but found ${typeof current} in path: ${path66}`);
271408
270375
  }
271409
270376
  if (!(segment in current)) {
271410
- throw new Error(`Property '${segment}' not found in path: ${path68}`);
270377
+ throw new Error(`Property '${segment}' not found in path: ${path66}`);
271411
270378
  }
271412
270379
  current = current[segment];
271413
270380
  }
@@ -271415,27 +270382,27 @@ function setValueAtPath(obj, path68, value) {
271415
270382
  const finalSegment = parsedPath.segments[parsedPath.segments.length - 1];
271416
270383
  if (typeof finalSegment === "number") {
271417
270384
  if (!Array.isArray(current)) {
271418
- throw new Error(`Expected array for final segment, but found ${typeof current} in path: ${path68}`);
270385
+ throw new Error(`Expected array for final segment, but found ${typeof current} in path: ${path66}`);
271419
270386
  }
271420
270387
  if (finalSegment >= current.length || finalSegment < 0) {
271421
- throw new Error(`Array index out of bounds: ${finalSegment} in path: ${path68}`);
270388
+ throw new Error(`Array index out of bounds: ${finalSegment} in path: ${path66}`);
271422
270389
  }
271423
270390
  current[finalSegment] = value;
271424
270391
  } else {
271425
270392
  if (!current || typeof current !== "object") {
271426
- throw new Error(`Expected object for final segment, but found ${typeof current} in path: ${path68}`);
270393
+ throw new Error(`Expected object for final segment, but found ${typeof current} in path: ${path66}`);
271427
270394
  }
271428
270395
  current[finalSegment] = value;
271429
270396
  }
271430
270397
  }
271431
- function applyParameterOverride(scenario, path68, value) {
270398
+ function applyParameterOverride(scenario, path66, value) {
271432
270399
  const clonedScenario = deepClone(scenario);
271433
- setValueAtPath(clonedScenario, path68, value);
270400
+ setValueAtPath(clonedScenario, path66, value);
271434
270401
  return clonedScenario;
271435
270402
  }
271436
270403
  function applyMatrixOverrides(baseScenario, overrides) {
271437
- const parameterOverrides = Object.entries(overrides).map(([path68, value]) => ({
271438
- path: path68,
270404
+ const parameterOverrides = Object.entries(overrides).map(([path66, value]) => ({
270405
+ path: path66,
271439
270406
  value
271440
270407
  }));
271441
270408
  return applyParameterOverrides(baseScenario, parameterOverrides);
@@ -271493,8 +270460,8 @@ function applyParameterOverrides(baseScenario, overrides) {
271493
270460
  return modifiedScenario;
271494
270461
  }
271495
270462
  function combinationToOverrides(combination) {
271496
- return Object.entries(combination).map(([path68, value]) => ({
271497
- path: path68,
270463
+ return Object.entries(combination).map(([path66, value]) => ({
270464
+ path: path66,
271498
270465
  value
271499
270466
  }));
271500
270467
  }
@@ -271534,7 +270501,7 @@ __export(exports_run_isolation, {
271534
270501
  cleanupIsolatedEnvironment: () => cleanupIsolatedEnvironment,
271535
270502
  checkDiskSpace: () => checkDiskSpace
271536
270503
  });
271537
- import { promises as fs40 } from "fs";
270504
+ import { promises as fs39 } from "fs";
271538
270505
  import { join as join17, dirname as dirname6 } from "path";
271539
270506
  import { tmpdir as tmpdir4 } from "os";
271540
270507
  function resetRunSequence() {
@@ -271547,13 +270514,13 @@ function generateRunId() {
271547
270514
  }
271548
270515
  async function createIsolatedEnvironment(runId, outputDir) {
271549
270516
  const tempDir = join17(outputDir, "temp", runId);
271550
- await fs40.mkdir(tempDir, { recursive: true });
270517
+ await fs39.mkdir(tempDir, { recursive: true });
271551
270518
  const dbPath = join17(tempDir, "database");
271552
270519
  const logsDir = join17(tempDir, "logs");
271553
270520
  const logPath = join17(logsDir, "run.log");
271554
270521
  const scenarioPath = join17(tempDir, "scenario.yaml");
271555
- await fs40.mkdir(dirname6(logPath), { recursive: true });
271556
- await fs40.mkdir(dbPath, { recursive: true });
270522
+ await fs39.mkdir(dirname6(logPath), { recursive: true });
270523
+ await fs39.mkdir(dbPath, { recursive: true });
271557
270524
  const cleanup = async () => {
271558
270525
  await cleanupIsolatedEnvironment({
271559
270526
  runId,
@@ -271575,14 +270542,14 @@ async function createIsolatedEnvironment(runId, outputDir) {
271575
270542
  }
271576
270543
  async function cleanupIsolatedEnvironment(context2) {
271577
270544
  try {
271578
- await fs40.rm(context2.tempDir, { recursive: true, force: true });
270545
+ await fs39.rm(context2.tempDir, { recursive: true, force: true });
271579
270546
  } catch (error2) {
271580
270547
  console.warn(`Warning: Failed to cleanup isolated environment ${context2.runId}:`, error2);
271581
270548
  }
271582
270549
  }
271583
270550
  async function ensureIsolatedDatabase(dbPath) {
271584
270551
  try {
271585
- await fs40.mkdir(dbPath, { recursive: true });
270552
+ await fs39.mkdir(dbPath, { recursive: true });
271586
270553
  const dbConfig = {
271587
270554
  type: "pglite",
271588
270555
  path: dbPath,
@@ -271590,7 +270557,7 @@ async function ensureIsolatedDatabase(dbPath) {
271590
270557
  temporary: true
271591
270558
  };
271592
270559
  const configPath = join17(dbPath, "config.json");
271593
- await fs40.writeFile(configPath, JSON.stringify(dbConfig, null, 2));
270560
+ await fs39.writeFile(configPath, JSON.stringify(dbConfig, null, 2));
271594
270561
  } catch (error2) {
271595
270562
  throw new Error(`Failed to setup isolated database: ${error2 instanceof Error ? error2.message : String(error2)}`);
271596
270563
  }
@@ -271598,16 +270565,16 @@ async function ensureIsolatedDatabase(dbPath) {
271598
270565
  async function writeTemporaryScenario(scenarioPath, baseScenario, parameters) {
271599
270566
  try {
271600
270567
  const modifiedScenario = JSON.parse(JSON.stringify(baseScenario));
271601
- for (const [path68, value] of Object.entries(parameters)) {
271602
- setNestedProperty(modifiedScenario, path68, value);
270568
+ for (const [path66, value] of Object.entries(parameters)) {
270569
+ setNestedProperty(modifiedScenario, path66, value);
271603
270570
  }
271604
- await fs40.writeFile(scenarioPath, JSON.stringify(modifiedScenario, null, 2));
270571
+ await fs39.writeFile(scenarioPath, JSON.stringify(modifiedScenario, null, 2));
271605
270572
  } catch (error2) {
271606
270573
  throw new Error(`Failed to write temporary scenario: ${error2 instanceof Error ? error2.message : String(error2)}`);
271607
270574
  }
271608
270575
  }
271609
- function setNestedProperty(obj, path68, value) {
271610
- const keys = path68.split(".");
270576
+ function setNestedProperty(obj, path66, value) {
270577
+ const keys = path66.split(".");
271611
270578
  let current = obj;
271612
270579
  for (let i2 = 0;i2 < keys.length - 1; i2++) {
271613
270580
  const key = keys[i2];
@@ -271644,9 +270611,9 @@ function setNestedProperty(obj, path68, value) {
271644
270611
  }
271645
270612
  async function validateIsolationContext(context2) {
271646
270613
  try {
271647
- const tempDirExists = await fs40.access(context2.tempDir).then(() => true).catch(() => false);
271648
- const dbDirExists = await fs40.access(context2.dbPath).then(() => true).catch(() => false);
271649
- const logDirExists = await fs40.access(dirname6(context2.logPath)).then(() => true).catch(() => false);
270614
+ const tempDirExists = await fs39.access(context2.tempDir).then(() => true).catch(() => false);
270615
+ const dbDirExists = await fs39.access(context2.dbPath).then(() => true).catch(() => false);
270616
+ const logDirExists = await fs39.access(dirname6(context2.logPath)).then(() => true).catch(() => false);
271650
270617
  return tempDirExists && dbDirExists && logDirExists;
271651
270618
  } catch {
271652
270619
  return false;
@@ -271684,11 +270651,11 @@ function estimateRunDiskSpace(baseScenario) {
271684
270651
  }
271685
270652
  async function checkDiskSpace(outputDir, _estimatedSpace) {
271686
270653
  try {
271687
- await fs40.stat(outputDir);
270654
+ await fs39.stat(outputDir);
271688
270655
  return true;
271689
270656
  } catch {
271690
270657
  try {
271691
- await fs40.mkdir(outputDir, { recursive: true });
270658
+ await fs39.mkdir(outputDir, { recursive: true });
271692
270659
  return true;
271693
270660
  } catch {
271694
270661
  return false;
@@ -271701,13 +270668,13 @@ async function monitorIsolatedResources(context2) {
271701
270668
  let fileCount = 0;
271702
270669
  async function calculateSize(dirPath) {
271703
270670
  try {
271704
- const entries = await fs40.readdir(dirPath, { withFileTypes: true });
270671
+ const entries = await fs39.readdir(dirPath, { withFileTypes: true });
271705
270672
  for (const entry of entries) {
271706
270673
  const fullPath = join17(dirPath, entry.name);
271707
270674
  if (entry.isDirectory()) {
271708
270675
  await calculateSize(fullPath);
271709
270676
  } else {
271710
- const stats = await fs40.stat(fullPath);
270677
+ const stats = await fs39.stat(fullPath);
271711
270678
  totalSize += stats.size;
271712
270679
  fileCount++;
271713
270680
  }
@@ -272338,7 +271305,7 @@ var exports_matrix_orchestrator = {};
272338
271305
  __export(exports_matrix_orchestrator, {
272339
271306
  executeMatrixRuns: () => executeMatrixRuns
272340
271307
  });
272341
- import { promises as fs41 } from "fs";
271308
+ import { promises as fs40 } from "fs";
272342
271309
  import { join as join19 } from "path";
272343
271310
  async function executeMatrixRuns(config4, combinations, options) {
272344
271311
  console.log("\uD83D\uDD27 [DEBUG] executeMatrixRuns started");
@@ -272350,7 +271317,7 @@ async function executeMatrixRuns(config4, combinations, options) {
272350
271317
  console.log(`\uD83D\uDD27 [DEBUG] [ProcessManager] Initial state: ${initialSummary.total} processes tracked`);
272351
271318
  console.log("\uD83D\uDD27 [DEBUG] About to setup execution environment");
272352
271319
  const { outputDir, maxParallel = 1, continueOnFailure = true, runTimeout = 300000 } = options;
272353
- await fs41.mkdir(outputDir, { recursive: true });
271320
+ await fs40.mkdir(outputDir, { recursive: true });
272354
271321
  const progressTracker = createProgressTracker({
272355
271322
  totalCombinations: combinations.length,
272356
271323
  runsPerCombination: config4.runs_per_combination,
@@ -272378,7 +271345,7 @@ async function executeMatrixRuns(config4, combinations, options) {
272378
271345
  resourceMonitor.start();
272379
271346
  try {
272380
271347
  console.log("\uD83D\uDD27 [DEBUG] About to read base scenario file");
272381
- const baseScenarioContent = await fs41.readFile(config4.base_scenario, "utf8");
271348
+ const baseScenarioContent = await fs40.readFile(config4.base_scenario, "utf8");
272382
271349
  console.log("\uD83D\uDD27 [DEBUG] Base scenario file read successfully");
272383
271350
  let baseScenario;
272384
271351
  try {
@@ -272689,7 +271656,7 @@ async function executeScenarioWithTimeout(scenarioPath, context2, timeout2, onPr
272689
271656
  try {
272690
271657
  onProgress(0.1, "Loading scenario...");
272691
271658
  const yaml = await Promise.resolve().then(() => (init_js_yaml(), exports_js_yaml));
272692
- const scenarioContent = await fs41.readFile(scenarioPath, "utf8");
271659
+ const scenarioContent = await fs40.readFile(scenarioPath, "utf8");
272693
271660
  const scenario = yaml.load(scenarioContent);
272694
271661
  onProgress(0.2, "Validating scenario...");
272695
271662
  const { ScenarioSchema: ScenarioSchema2 } = await Promise.resolve().then(() => (init_schema(), exports_schema));
@@ -272907,13 +271874,13 @@ async function calculateRunDiskUsage(tempDir) {
272907
271874
  }
272908
271875
  async function saveMatrixConfiguration(config4, outputDir) {
272909
271876
  const configPath = join19(outputDir, "config.yaml");
272910
- await fs41.writeFile(configPath, JSON.stringify(config4, null, 2));
271877
+ await fs40.writeFile(configPath, JSON.stringify(config4, null, 2));
272911
271878
  }
272912
271879
  async function saveRunResult(result, outputDir) {
272913
271880
  const runsDir = join19(outputDir, "runs");
272914
- await fs41.mkdir(runsDir, { recursive: true });
271881
+ await fs40.mkdir(runsDir, { recursive: true });
272915
271882
  const resultPath = join19(runsDir, `${result.runId}.json`);
272916
- await fs41.writeFile(resultPath, JSON.stringify(result, null, 2));
271883
+ await fs40.writeFile(resultPath, JSON.stringify(result, null, 2));
272917
271884
  }
272918
271885
  function createCombinationSummary(combinationId, allResults) {
272919
271886
  const combinationResults = allResults.filter((r2) => r2.combinationId === combinationId);
@@ -272962,9 +271929,9 @@ async function generateExecutionSummary(_config, combinations, results, startTim
272962
271929
  }
272963
271930
  async function saveSummary(summary, outputDir) {
272964
271931
  const summaryPath = join19(outputDir, "summary.json");
272965
- await fs41.writeFile(summaryPath, JSON.stringify(summary, null, 2));
271932
+ await fs40.writeFile(summaryPath, JSON.stringify(summary, null, 2));
272966
271933
  const logsDir = join19(outputDir, "logs");
272967
- await fs41.mkdir(logsDir, { recursive: true });
271934
+ await fs40.mkdir(logsDir, { recursive: true });
272968
271935
  const logPath = join19(logsDir, "matrix-execution.log");
272969
271936
  const logContent = [
272970
271937
  `Matrix Execution Summary`,
@@ -272987,7 +271954,7 @@ async function saveSummary(summary, outputDir) {
272987
271954
  ...summary.combinations.map((combo) => `- ${combo.combinationId}: ${combo.successfulRuns}/${combo.totalRuns} success (${(combo.successRate * 100).toFixed(1)}%)`)
272988
271955
  ].join(`
272989
271956
  `);
272990
- await fs41.writeFile(logPath, logContent);
271957
+ await fs40.writeFile(logPath, logContent);
272991
271958
  }
272992
271959
  var init_matrix_orchestrator = __esm(() => {
272993
271960
  init_run_isolation();
@@ -273202,8 +272169,237 @@ async function selectEmbeddingModel() {
273202
272169
  }
273203
272170
  return embeddingModel;
273204
272171
  }
272172
+ // src/characters/eliza.ts
272173
+ var baseCharacter = {
272174
+ name: "Eliza",
272175
+ plugins: ["@elizaos/plugin-sql", "@elizaos/plugin-bootstrap"],
272176
+ secrets: {},
272177
+ settings: {
272178
+ avatar: "https://elizaos.github.io/eliza-avatars/Eliza/portrait.png"
272179
+ },
272180
+ system: "Respond to all messages in a helpful, conversational manner. Provide assistance on a wide range of topics, using knowledge when needed. Be concise but thorough, friendly but professional. Use humor when appropriate and be empathetic to user needs. Provide valuable information and insights when questions are asked.",
272181
+ bio: [
272182
+ "Engages with all types of questions and conversations",
272183
+ "Provides helpful, concise responses",
272184
+ "Uses knowledge resources effectively when needed",
272185
+ "Balances brevity with completeness",
272186
+ "Uses humor and empathy appropriately",
272187
+ "Adapts tone to match the conversation context",
272188
+ "Offers assistance proactively",
272189
+ "Communicates clearly and directly"
272190
+ ],
272191
+ topics: [
272192
+ "general knowledge and information",
272193
+ "problem solving and troubleshooting",
272194
+ "technology and software",
272195
+ "community building and management",
272196
+ "business and productivity",
272197
+ "creativity and innovation",
272198
+ "personal development",
272199
+ "communication and collaboration",
272200
+ "education and learning",
272201
+ "entertainment and media"
272202
+ ],
272203
+ messageExamples: [
272204
+ [
272205
+ {
272206
+ name: "{{name1}}",
272207
+ content: {
272208
+ text: "This user keeps derailing technical discussions with personal problems."
272209
+ }
272210
+ },
272211
+ {
272212
+ name: "Eliza",
272213
+ content: {
272214
+ text: "DM them. Sounds like they need to talk about something else."
272215
+ }
272216
+ },
272217
+ {
272218
+ name: "{{name1}}",
272219
+ content: {
272220
+ text: "I tried, they just keep bringing drama back to the main channel."
272221
+ }
272222
+ },
272223
+ {
272224
+ name: "Eliza",
272225
+ content: {
272226
+ text: "Send them my way. I've got time today."
272227
+ }
272228
+ }
272229
+ ],
272230
+ [
272231
+ {
272232
+ name: "{{name1}}",
272233
+ content: {
272234
+ text: "I can't handle being a mod anymore. It's affecting my mental health."
272235
+ }
272236
+ },
272237
+ {
272238
+ name: "Eliza",
272239
+ content: {
272240
+ text: "Drop the channels. You come first."
272241
+ }
272242
+ },
272243
+ {
272244
+ name: "{{name1}}",
272245
+ content: {
272246
+ text: "But who's going to handle everything?"
272247
+ }
272248
+ },
272249
+ {
272250
+ name: "Eliza",
272251
+ content: {
272252
+ text: "We will. Take the break. Come back when you're ready."
272253
+ }
272254
+ }
272255
+ ],
272256
+ [
272257
+ {
272258
+ name: "{{name1}}",
272259
+ content: {
272260
+ text: "Could you explain how blockchain technology works?"
272261
+ }
272262
+ },
272263
+ {
272264
+ name: "Eliza",
272265
+ content: {
272266
+ text: "A blockchain is a distributed database that maintains a growing list of records secured against tampering and revision. Think of it as a chain of blocks where each block contains data, its own hash, and the hash of the previous block."
272267
+ }
272268
+ }
272269
+ ],
272270
+ [
272271
+ {
272272
+ name: "{{name1}}",
272273
+ content: {
272274
+ text: "Hey everyone, what are our community guidelines for new members?"
272275
+ }
272276
+ },
272277
+ {
272278
+ name: "Eliza",
272279
+ content: {
272280
+ text: "Let me check our guidelines.",
272281
+ providers: ["KNOWLEDGE"]
272282
+ }
272283
+ }
272284
+ ],
272285
+ [
272286
+ {
272287
+ name: "{{name1}}",
272288
+ content: {
272289
+ text: "Are there any resources for onboarding new developers to our community?"
272290
+ }
272291
+ },
272292
+ {
272293
+ name: "Eliza",
272294
+ content: {
272295
+ text: "We have some documentation I can find for you.",
272296
+ providers: ["KNOWLEDGE"]
272297
+ }
272298
+ }
272299
+ ],
272300
+ [
272301
+ {
272302
+ name: "{{name1}}",
272303
+ content: {
272304
+ text: "What process should we follow for handling code of conduct violations?"
272305
+ }
272306
+ },
272307
+ {
272308
+ name: "Eliza",
272309
+ content: {
272310
+ text: "Let me pull up our violation handling process.",
272311
+ providers: ["KNOWLEDGE"]
272312
+ }
272313
+ }
272314
+ ],
272315
+ [
272316
+ {
272317
+ name: "{{name1}}",
272318
+ content: {
272319
+ text: "What can you tell me about quantum computing?"
272320
+ }
272321
+ },
272322
+ {
272323
+ name: "Eliza",
272324
+ content: {
272325
+ text: "Let me find some information about quantum computing.",
272326
+ providers: ["KNOWLEDGE"]
272327
+ }
272328
+ }
272329
+ ]
272330
+ ],
272331
+ postExamples: [
272332
+ "Sometimes the best debugging tool is a fresh cup of coffee and a walk around the block.",
272333
+ "The magic happens when developers stop competing and start collaborating. Build together, grow together.",
272334
+ "Reminder: Your code doesn't have to be perfect on the first try. Progress over perfection.",
272335
+ "Community tip: The person asking 'obvious' questions today might solve your toughest problem tomorrow. Be kind.",
272336
+ "Hot take: Good documentation is more valuable than clever code.",
272337
+ "The best feature you can add to your project? A welcoming community.",
272338
+ "Debugging is just a conversation with your past self. Make it easier by leaving good comments.",
272339
+ "Your daily reminder that impostor syndrome affects even the most experienced developers. You belong here.",
272340
+ "Pro tip: Read the error message. Then read it again. The answer is usually there.",
272341
+ "Building in public isn't about showing off. It's about learning together and helping others avoid your mistakes.",
272342
+ "The difference between junior and senior developers? Seniors know when NOT to write code.",
272343
+ "Community > Competition. Always.",
272344
+ "Remember: Every expert was once a beginner who refused to give up.",
272345
+ "Code reviews aren't personal attacks. They're opportunities to level up together.",
272346
+ "The most powerful tool in development? Asking for help when you need it."
272347
+ ],
272348
+ style: {
272349
+ all: [
272350
+ "Keep responses concise but informative",
272351
+ "Use clear and direct language",
272352
+ "Be engaging and conversational",
272353
+ "Use humor when appropriate",
272354
+ "Be empathetic and understanding",
272355
+ "Provide helpful information",
272356
+ "Be encouraging and positive",
272357
+ "Adapt tone to the conversation",
272358
+ "Use knowledge resources when needed",
272359
+ "Respond to all types of questions"
272360
+ ],
272361
+ chat: [
272362
+ "Be conversational and natural",
272363
+ "Engage with the topic at hand",
272364
+ "Be helpful and informative",
272365
+ "Show personality and warmth"
272366
+ ],
272367
+ post: [
272368
+ "Keep it concise and punchy - every word counts",
272369
+ "Share insights, not platitudes",
272370
+ "Be authentic and conversational, not corporate",
272371
+ "Use specific examples over generic advice",
272372
+ "Add value with each post - teach, inspire, or entertain",
272373
+ "One clear thought per post",
272374
+ "Avoid excessive hashtags or mentions",
272375
+ "Write like you are talking to a friend",
272376
+ "Share personal observations and hot takes",
272377
+ "Be helpful without being preachy",
272378
+ "Use emojis sparingly and purposefully",
272379
+ "End with something thought-provoking when appropriate"
272380
+ ]
272381
+ }
272382
+ };
272383
+ function getElizaCharacter() {
272384
+ const plugins = [
272385
+ "@elizaos/plugin-sql",
272386
+ ...process.env.ANTHROPIC_API_KEY?.trim() ? ["@elizaos/plugin-anthropic"] : [],
272387
+ ...process.env.OPENROUTER_API_KEY?.trim() ? ["@elizaos/plugin-openrouter"] : [],
272388
+ ...process.env.OPENAI_API_KEY?.trim() ? ["@elizaos/plugin-openai"] : [],
272389
+ ...process.env.GOOGLE_GENERATIVE_AI_API_KEY?.trim() ? ["@elizaos/plugin-google-genai"] : [],
272390
+ ...process.env.DISCORD_API_TOKEN?.trim() ? ["@elizaos/plugin-discord"] : [],
272391
+ ...process.env.TWITTER_API_KEY?.trim() && process.env.TWITTER_API_SECRET_KEY?.trim() && process.env.TWITTER_ACCESS_TOKEN?.trim() && process.env.TWITTER_ACCESS_TOKEN_SECRET?.trim() ? ["@elizaos/plugin-twitter"] : [],
272392
+ ...process.env.TELEGRAM_BOT_TOKEN?.trim() ? ["@elizaos/plugin-telegram"] : [],
272393
+ ...!process.env.IGNORE_BOOTSTRAP ? ["@elizaos/plugin-bootstrap"] : [],
272394
+ "@elizaos/plugin-ollama"
272395
+ ];
272396
+ return {
272397
+ ...baseCharacter,
272398
+ plugins
272399
+ };
272400
+ }
272401
+
273205
272402
  // src/commands/create/actions/creators.ts
273206
- init_eliza();
273207
272403
  init_utils();
273208
272404
  init_dist2();
273209
272405
  init_yoctocolors();
@@ -273523,6 +272719,9 @@ async function setupProjectEnvironment(targetDir, database, aiModel, embeddingMo
273523
272719
  await installModelPlugin(embeddingModel, targetDir, "for embeddings");
273524
272720
  }
273525
272721
  }
272722
+ if (aiModel !== "local" && embeddingModel !== "local") {
272723
+ await installPluginWithSpinner("ollama", targetDir, "as universal fallback");
272724
+ }
273526
272725
  }
273527
272726
 
273528
272727
  // src/commands/create/actions/creators.ts
@@ -274346,7 +273545,95 @@ async function stopServer() {
274346
273545
 
274347
273546
  // src/commands/dev/actions/dev-server.ts
274348
273547
  init_utils();
274349
- init_dependency_manager();
273548
+ init_port_handling();
273549
+
273550
+ // src/utils/dependency-manager.ts
273551
+ init_bun_exec();
273552
+ init_spinner_utils();
273553
+ init_directory_detection();
273554
+ import * as fs14 from "fs";
273555
+ import * as path25 from "path";
273556
+ import { logger as logger27 } from "@elizaos/core";
273557
+ function hasElizaOSCli(packageJsonPath) {
273558
+ try {
273559
+ if (!fs14.existsSync(packageJsonPath)) {
273560
+ return false;
273561
+ }
273562
+ let packageJson;
273563
+ try {
273564
+ packageJson = JSON.parse(fs14.readFileSync(packageJsonPath, "utf8"));
273565
+ } catch (parseError) {
273566
+ logger27.debug({ error: parseError, packageJsonPath }, `Error parsing JSON in package.json`);
273567
+ return false;
273568
+ }
273569
+ const dependencies = packageJson.dependencies || {};
273570
+ const devDependencies = packageJson.devDependencies || {};
273571
+ return "@elizaos/cli" in dependencies || "@elizaos/cli" in devDependencies;
273572
+ } catch (error) {
273573
+ logger27.debug({ error, packageJsonPath }, `Error reading package.json`);
273574
+ return false;
273575
+ }
273576
+ }
273577
+ function shouldAutoInstallCli(cwd = process.cwd()) {
273578
+ if (process.env.ELIZA_NO_AUTO_INSTALL === "true") {
273579
+ logger27.debug("Auto-install disabled via ELIZA_NO_AUTO_INSTALL");
273580
+ return false;
273581
+ }
273582
+ if (process.env.CI === "true" || process.env.ELIZA_TEST_MODE === "true") {
273583
+ logger27.debug("Skipping auto-install in CI/test environment");
273584
+ return false;
273585
+ }
273586
+ const dirInfo = detectDirectoryType(cwd);
273587
+ if (dirInfo.type === "elizaos-monorepo" || dirInfo.monorepoRoot) {
273588
+ logger27.debug("Skipping auto-install in monorepo");
273589
+ return false;
273590
+ }
273591
+ if (!dirInfo.hasPackageJson) {
273592
+ logger27.debug("No package.json found, skipping auto-install");
273593
+ return false;
273594
+ }
273595
+ const packageJsonPath = path25.join(cwd, "package.json");
273596
+ if (hasElizaOSCli(packageJsonPath)) {
273597
+ logger27.debug("@elizaos/cli already present, skipping auto-install");
273598
+ return false;
273599
+ }
273600
+ return true;
273601
+ }
273602
+ async function installElizaOSCli(cwd = process.cwd()) {
273603
+ try {
273604
+ logger27.info("Adding @elizaos/cli as dev dependency for enhanced development experience...");
273605
+ const result = await runBunWithSpinner(["add", "--dev", "@elizaos/cli"], cwd, {
273606
+ spinnerText: "Installing @elizaos/cli with bun...",
273607
+ successText: "\u2713 @elizaos/cli installed successfully",
273608
+ errorText: "Failed to install @elizaos/cli",
273609
+ showOutputOnError: false
273610
+ });
273611
+ if (result.success) {
273612
+ logger27.info("\u2713 @elizaos/cli added as dev dependency");
273613
+ return true;
273614
+ } else {
273615
+ logger27.warn("\u26A0 Failed to install @elizaos/cli as dev dependency (optional)");
273616
+ logger27.debug({ error: result.error }, "Installation error:");
273617
+ return false;
273618
+ }
273619
+ } catch (error) {
273620
+ logger27.warn("\u26A0 Failed to install @elizaos/cli as dev dependency (optional)");
273621
+ logger27.debug({ error }, "Installation error:");
273622
+ return false;
273623
+ }
273624
+ }
273625
+ async function ensureElizaOSCli(cwd = process.cwd()) {
273626
+ if (!shouldAutoInstallCli(cwd)) {
273627
+ return;
273628
+ }
273629
+ logger27.debug("Auto-installing @elizaos/cli for enhanced development experience");
273630
+ const success = await installElizaOSCli(cwd);
273631
+ if (success) {
273632
+ logger27.info("Next time you can use the local CLI for better performance and consistency");
273633
+ }
273634
+ }
273635
+
273636
+ // src/commands/dev/actions/dev-server.ts
274350
273637
  init_source();
274351
273638
  import { logger as logger28 } from "@elizaos/core";
274352
273639
  import * as path26 from "path";
@@ -274488,6 +273775,16 @@ async function stopClientDevServer() {
274488
273775
  await new Promise((resolve2) => setTimeout(resolve2, 500));
274489
273776
  }
274490
273777
  }
273778
+ async function waitForPortToBeFree(port, host, timeoutMs = 15000) {
273779
+ const start = Date.now();
273780
+ if (await isPortFree(port, host))
273781
+ return;
273782
+ while (Date.now() - start < timeoutMs) {
273783
+ await new Promise((resolve2) => setTimeout(resolve2, 150));
273784
+ if (await isPortFree(port, host))
273785
+ return;
273786
+ }
273787
+ }
274491
273788
  async function getClientPort(cwd) {
274492
273789
  const possibleClientDirs = [
274493
273790
  cwd,
@@ -274596,6 +273893,7 @@ async function startDevMode(options) {
274596
273893
  }
274597
273894
  await performRebuild(context);
274598
273895
  console.log("\u2713 Rebuild successful, restarting...");
273896
+ await waitForPortToBeFree(serverPort, serverHost);
274599
273897
  await serverManager2.start(cliArgs);
274600
273898
  if (shouldStartClient2) {
274601
273899
  await new Promise((resolve2) => setTimeout(resolve2, 2000));
@@ -274713,10 +274011,53 @@ init_yoctocolors();
274713
274011
 
274714
274012
  // src/commands/env/actions/edit.ts
274715
274013
  init_dist2();
274716
- init_file_operations();
274717
274014
  import { existsSync as existsSync27 } from "fs";
274718
274015
  import path28 from "path";
274719
274016
 
274017
+ // src/commands/env/utils/file-operations.ts
274018
+ init_env_file_service();
274019
+ import { existsSync as existsSync26 } from "fs";
274020
+ import path27 from "path";
274021
+ async function getLocalEnvPath() {
274022
+ const localEnvPath = path27.join(process.cwd(), ".env");
274023
+ return existsSync26(localEnvPath) ? localEnvPath : null;
274024
+ }
274025
+ async function parseEnvFile(filePath) {
274026
+ const service = createEnvFileService(filePath);
274027
+ return service.read();
274028
+ }
274029
+ async function writeEnvFile2(filePath, envVars) {
274030
+ const service = createEnvFileService(filePath);
274031
+ await service.write(envVars, {
274032
+ preserveComments: true,
274033
+ updateProcessEnv: true
274034
+ });
274035
+ }
274036
+ async function resetEnvFile(filePath) {
274037
+ try {
274038
+ if (!existsSync26(filePath)) {
274039
+ return false;
274040
+ }
274041
+ const service = createEnvFileService(filePath);
274042
+ const envVars = await service.read();
274043
+ if (Object.keys(envVars).length === 0) {
274044
+ return false;
274045
+ }
274046
+ const resetVars = Object.keys(envVars).reduce((acc, key) => {
274047
+ acc[key] = "";
274048
+ return acc;
274049
+ }, {});
274050
+ await service.write(resetVars, {
274051
+ preserveComments: true,
274052
+ updateProcessEnv: false
274053
+ });
274054
+ return true;
274055
+ } catch (error) {
274056
+ console.error(`Error resetting environment file: ${error instanceof Error ? error.message : String(error)}`);
274057
+ return false;
274058
+ }
274059
+ }
274060
+
274720
274061
  // src/commands/env/utils/validation.ts
274721
274062
  function maskedValue(value) {
274722
274063
  if (!value)
@@ -274885,7 +274226,6 @@ init_dist2();
274885
274226
  // src/commands/env/actions/list.ts
274886
274227
  init_utils();
274887
274228
  init_yoctocolors();
274888
- init_file_operations();
274889
274229
  import { existsSync as existsSync28 } from "fs";
274890
274230
  import path29 from "path";
274891
274231
  async function listEnvVars() {
@@ -281260,7 +280600,6 @@ async function safeDeleteDirectory(dir, actions, label) {
281260
280600
  }
281261
280601
 
281262
280602
  // src/commands/env/actions/reset.ts
281263
- init_file_operations();
281264
280603
  async function resolvePgliteDir2() {
281265
280604
  return path31.join(process.cwd(), ".eliza", "db");
281266
280605
  }
@@ -281422,7 +280761,6 @@ async function showMainMenu(options) {
281422
280761
  }
281423
280762
 
281424
280763
  // src/commands/env/index.ts
281425
- init_file_operations();
281426
280764
  var env2 = new Command().name("env").description("Manage environment variables and secrets");
281427
280765
  env2.command("list").description("List all environment variables").option("--system", "List only system information").option("--local", "List only local environment variables").action(async (options) => {
281428
280766
  try {
@@ -296901,7 +296239,7 @@ ${Object.keys(reportData.results_by_parameter).length > 0 ? Object.keys(reportDa
296901
296239
  `;
296902
296240
  }
296903
296241
  async function generatePdfReportWorkaround(htmlPath, pdfPath) {
296904
- const { spawn: spawn3 } = await import("child_process");
296242
+ const { spawn: spawn2 } = await import("child_process");
296905
296243
  return new Promise((resolve12, reject) => {
296906
296244
  const nodeScript = `
296907
296245
  const puppeteer = require('puppeteer');
@@ -296925,7 +296263,7 @@ const fs = require('fs');
296925
296263
  }
296926
296264
  })();
296927
296265
  `;
296928
- const nodeProcess = spawn3("node", ["-e", nodeScript], {
296266
+ const nodeProcess = spawn2("node", ["-e", nodeScript], {
296929
296267
  stdio: "inherit",
296930
296268
  cwd: process.cwd()
296931
296269
  });
@@ -297153,8 +296491,307 @@ The report command analyzes raw JSON outputs from scenario matrix runs and gener
297153
296491
  comprehensive performance reports with statistics, parameter comparisons, and trajectory analysis.
297154
296492
  `).addCommand(createGenerateCommand());
297155
296493
 
297156
- // src/index.ts
297157
- init_start();
296494
+ // src/project.ts
296495
+ import {
296496
+ logger as logger41
296497
+ } from "@elizaos/core";
296498
+ import { stringToUuid } from "@elizaos/core";
296499
+ import * as fs31 from "fs";
296500
+ import path57 from "path";
296501
+ init_directory_detection();
296502
+ function isPlugin(module) {
296503
+ if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
296504
+ return true;
296505
+ }
296506
+ if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
296507
+ return true;
296508
+ }
296509
+ for (const key in module) {
296510
+ if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
296511
+ return true;
296512
+ }
296513
+ }
296514
+ return false;
296515
+ }
296516
+ function extractPlugin(module) {
296517
+ if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
296518
+ return module;
296519
+ }
296520
+ if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
296521
+ return module.default;
296522
+ }
296523
+ for (const key in module) {
296524
+ if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
296525
+ return module[key];
296526
+ }
296527
+ }
296528
+ throw new Error("Could not extract plugin from module");
296529
+ }
296530
+ async function loadProject(dir) {
296531
+ try {
296532
+ const dirInfo = detectDirectoryType(dir);
296533
+ if (!dirInfo.hasPackageJson) {
296534
+ throw new Error(`No package.json found in ${dir}`);
296535
+ }
296536
+ const packageJson = JSON.parse(fs31.readFileSync(path57.join(dir, "package.json"), "utf8"));
296537
+ const main2 = packageJson.main;
296538
+ if (!main2) {
296539
+ logger41.warn("No main field found in package.json, using default character");
296540
+ const defaultCharacterName = "Eliza (Default)";
296541
+ const elizaCharacter = getElizaCharacter();
296542
+ const defaultAgent = {
296543
+ character: {
296544
+ ...elizaCharacter,
296545
+ id: stringToUuid(defaultCharacterName),
296546
+ name: defaultCharacterName
296547
+ },
296548
+ init: async () => {
296549
+ logger41.info("Initializing default Eliza character");
296550
+ }
296551
+ };
296552
+ return {
296553
+ agents: [defaultAgent],
296554
+ dir
296555
+ };
296556
+ }
296557
+ const entryPoints = [
296558
+ path57.join(dir, main2),
296559
+ path57.join(dir, "dist/index.js"),
296560
+ path57.join(dir, "src/index.ts"),
296561
+ path57.join(dir, "src/index.js"),
296562
+ path57.join(dir, "index.ts"),
296563
+ path57.join(dir, "index.js")
296564
+ ];
296565
+ let projectModule = null;
296566
+ for (const entryPoint of entryPoints) {
296567
+ if (fs31.existsSync(entryPoint)) {
296568
+ try {
296569
+ const importPath = path57.resolve(entryPoint);
296570
+ const importUrl = process.platform === "win32" ? "file:///" + importPath.replace(/\\/g, "/") : "file://" + importPath;
296571
+ projectModule = await import(importUrl);
296572
+ logger41.info(`Loaded project from ${entryPoint}`);
296573
+ const exportKeys = Object.keys(projectModule);
296574
+ logger41.debug({ exportKeys }, `Module exports:`);
296575
+ if (exportKeys.includes("default")) {
296576
+ logger41.debug({ type: typeof projectModule.default }, `Default export type:`);
296577
+ if (typeof projectModule.default === "object" && projectModule.default !== null) {
296578
+ logger41.debug({ keys: Object.keys(projectModule.default) }, `Default export keys:`);
296579
+ }
296580
+ }
296581
+ break;
296582
+ } catch (error2) {
296583
+ logger41.warn({ error: error2, entryPoint }, `Failed to import project`);
296584
+ }
296585
+ }
296586
+ }
296587
+ if (!projectModule) {
296588
+ throw new Error("Could not find project entry point");
296589
+ }
296590
+ const moduleIsPlugin = isPlugin(projectModule);
296591
+ logger41.debug({ moduleIsPlugin }, `Is this a plugin?`);
296592
+ if (moduleIsPlugin) {
296593
+ logger41.info("Detected plugin module instead of project");
296594
+ try {
296595
+ const plugin = extractPlugin(projectModule);
296596
+ logger41.debug({ name: plugin.name, description: plugin.description }, `Found plugin:`);
296597
+ logger41.debug({ keys: Object.keys(plugin) }, `Plugin has the following properties:`);
296598
+ const completePlugin = {
296599
+ ...plugin,
296600
+ name: plugin.name || "unknown-plugin",
296601
+ description: plugin.description || "No description",
296602
+ init: plugin.init || (async () => {
296603
+ logger41.info(`Dummy init for plugin: ${plugin.name}`);
296604
+ })
296605
+ };
296606
+ const characterName = "Eliza (Test Mode)";
296607
+ const elizaCharacter = getElizaCharacter();
296608
+ const testCharacter = {
296609
+ ...elizaCharacter,
296610
+ id: stringToUuid(characterName),
296611
+ name: characterName,
296612
+ system: `${elizaCharacter.system} Testing the plugin: ${completePlugin.name}.`
296613
+ };
296614
+ logger41.info(`Using Eliza character as test agent for plugin: ${completePlugin.name}`);
296615
+ const testAgent = {
296616
+ character: testCharacter,
296617
+ plugins: [completePlugin],
296618
+ init: async () => {
296619
+ logger41.info(`Initializing Eliza test agent for plugin: ${completePlugin.name}`);
296620
+ }
296621
+ };
296622
+ return {
296623
+ agents: [testAgent],
296624
+ dir,
296625
+ isPlugin: true,
296626
+ pluginModule: completePlugin
296627
+ };
296628
+ } catch (error2) {
296629
+ logger41.error("Error extracting plugin from module:", error2 instanceof Error ? error2.message : String(error2));
296630
+ throw error2;
296631
+ }
296632
+ }
296633
+ const agents = [];
296634
+ if (projectModule.default && typeof projectModule.default === "object" && Array.isArray(projectModule.default.agents)) {
296635
+ agents.push(...projectModule.default.agents);
296636
+ logger41.debug({ count: agents.length }, `Found agents in default export's agents array`);
296637
+ } else {
296638
+ for (const [key, value] of Object.entries(projectModule)) {
296639
+ if (key === "default" && value && typeof value === "object") {
296640
+ if (value.character && value.init) {
296641
+ agents.push(value);
296642
+ logger41.debug(`Found agent in default export (single agent)`);
296643
+ }
296644
+ } else if (value && typeof value === "object" && value.character && value.init) {
296645
+ agents.push(value);
296646
+ logger41.debug({ key }, `Found agent in named export`);
296647
+ }
296648
+ }
296649
+ }
296650
+ if (agents.length === 0) {
296651
+ throw new Error("No agents found in project");
296652
+ }
296653
+ const project = {
296654
+ agents,
296655
+ dir
296656
+ };
296657
+ return project;
296658
+ } catch (error2) {
296659
+ logger41.error({ error: error2 }, "Error loading project:");
296660
+ throw error2;
296661
+ }
296662
+ }
296663
+
296664
+ // src/commands/start/index.ts
296665
+ init_utils();
296666
+ init_build_project();
296667
+ init_directory_detection();
296668
+ init_module_loader();
296669
+
296670
+ // src/utils/port-validation.ts
296671
+ function validatePort(value) {
296672
+ const port = Number.parseInt(value, 10);
296673
+ if (Number.isNaN(port) || port <= 0 || port > 65535) {
296674
+ throw new Error("Port must be a number between 1 and 65535");
296675
+ }
296676
+ return port;
296677
+ }
296678
+
296679
+ // src/commands/start/index.ts
296680
+ init_esm();
296681
+ var import_dotenv4 = __toESM(require_main(), 1);
296682
+ import { logger as logger42 } from "@elizaos/core";
296683
+ import * as fs32 from "fs";
296684
+ import * as path58 from "path";
296685
+ var start = new Command().name("start").description("Build and start the Eliza agent server").option("-c, --configure", "Reconfigure services and AI models").option("-p, --port <port>", "Port to listen on", validatePort).option("--character <paths...>", "Character file(s) to use").hook("preAction", async () => {
296686
+ await displayBanner();
296687
+ }).action(async (options) => {
296688
+ try {
296689
+ const envPath = path58.join(process.cwd(), ".env");
296690
+ if (fs32.existsSync(envPath)) {
296691
+ import_dotenv4.default.config({ path: envPath });
296692
+ }
296693
+ await ensureElizaOSCli();
296694
+ const localModulesPath = path58.join(process.cwd(), "node_modules");
296695
+ if (process.env.NODE_PATH) {
296696
+ process.env.NODE_PATH = `${localModulesPath}${path58.delimiter}${process.env.NODE_PATH}`;
296697
+ } else {
296698
+ process.env.NODE_PATH = localModulesPath;
296699
+ }
296700
+ const localBinPath = path58.join(process.cwd(), "node_modules", ".bin");
296701
+ if (process.env.PATH) {
296702
+ process.env.PATH = `${localBinPath}${path58.delimiter}${process.env.PATH}`;
296703
+ } else {
296704
+ process.env.PATH = localBinPath;
296705
+ }
296706
+ if (!process.env.PGLITE_WASM_MODE) {
296707
+ process.env.PGLITE_WASM_MODE = "node";
296708
+ }
296709
+ const cwd = process.cwd();
296710
+ const dirInfo = detectDirectoryType(cwd);
296711
+ const isMonorepo = dirInfo.type === "elizaos-monorepo";
296712
+ if (!isMonorepo && !process.env.ELIZA_TEST_MODE) {
296713
+ try {
296714
+ await buildProject(cwd, false);
296715
+ } catch (error2) {
296716
+ logger42.error("Build error:", error2 instanceof Error ? error2.message : String(error2));
296717
+ logger42.warn("Build failed, but continuing with start. Some features may not work correctly.");
296718
+ }
296719
+ }
296720
+ let characters = [];
296721
+ let projectAgents = [];
296722
+ if (options.character && options.character.length > 0) {
296723
+ const moduleLoader2 = getModuleLoader();
296724
+ const serverModule = await moduleLoader2.load("@elizaos/server");
296725
+ const { loadCharacterTryPath } = serverModule;
296726
+ for (const charPath of options.character) {
296727
+ const resolvedPath = path58.resolve(charPath);
296728
+ if (!fs32.existsSync(resolvedPath)) {
296729
+ logger42.error(`Character file not found: ${resolvedPath}`);
296730
+ throw new Error(`Character file not found: ${resolvedPath}`);
296731
+ }
296732
+ try {
296733
+ const character = await loadCharacterTryPath(resolvedPath);
296734
+ if (character) {
296735
+ characters.push(character);
296736
+ logger42.info(`Successfully loaded character: ${character.name}`);
296737
+ } else {
296738
+ logger42.error(`Failed to load character from ${resolvedPath}: Invalid or empty character file`);
296739
+ throw new Error(`Invalid character file: ${resolvedPath}`);
296740
+ }
296741
+ } catch (e2) {
296742
+ logger42.error({ error: e2, resolvedPath }, `Failed to load character from path:`);
296743
+ throw new Error(`Invalid character file: ${resolvedPath}`);
296744
+ }
296745
+ }
296746
+ } else {
296747
+ try {
296748
+ const cwd2 = process.cwd();
296749
+ const dirInfo2 = detectDirectoryType(cwd2);
296750
+ if (dirInfo2.hasPackageJson && dirInfo2.type !== "non-elizaos-dir") {
296751
+ logger42.info("No character files specified, attempting to load project agents...");
296752
+ const project = await loadProject(cwd2);
296753
+ if (project.agents && project.agents.length > 0) {
296754
+ logger42.info(`Found ${project.agents.length} agent(s) in project configuration`);
296755
+ projectAgents = project.agents;
296756
+ for (const agent2 of project.agents) {
296757
+ if (agent2.character) {
296758
+ logger42.info(`Loaded character: ${agent2.character.name}`);
296759
+ }
296760
+ }
296761
+ }
296762
+ }
296763
+ } catch (e2) {
296764
+ logger42.debug({ error: e2 }, "Failed to load project agents, will use default character:");
296765
+ }
296766
+ }
296767
+ const moduleLoader = getModuleLoader();
296768
+ const { AgentServer } = await moduleLoader.load("@elizaos/server");
296769
+ const server2 = new AgentServer;
296770
+ await server2.initialize({
296771
+ dataDir: process.env.PGLITE_DATA_DIR,
296772
+ postgresUrl: process.env.POSTGRES_URL
296773
+ });
296774
+ await server2.start(options.port || 3000);
296775
+ if (projectAgents && projectAgents.length > 0) {
296776
+ const charactersToStart = projectAgents.map((pa) => pa.character);
296777
+ const runtimes = await server2.startAgents(charactersToStart);
296778
+ for (let i = 0;i < projectAgents.length; i++) {
296779
+ const init = projectAgents[i]?.init;
296780
+ const runtime = runtimes[i];
296781
+ if (typeof init === "function" && runtime) {
296782
+ await init(runtime);
296783
+ }
296784
+ }
296785
+ logger42.info(`Started ${runtimes.length} project agents`);
296786
+ } else if (characters && characters.length > 0) {
296787
+ const runtimes = await server2.startAgents(characters);
296788
+ logger42.info(`Started ${runtimes.length} agents`);
296789
+ }
296790
+ } catch (e2) {
296791
+ handleError(e2);
296792
+ process.exit(1);
296793
+ }
296794
+ });
297158
296795
 
297159
296796
  // src/commands/tee/index.ts
297160
296797
  init_esm();
@@ -297162,45 +296799,45 @@ init_esm();
297162
296799
  // src/commands/tee/phala-wrapper.ts
297163
296800
  init_esm();
297164
296801
  init_emoji_handler();
297165
- import { spawn as spawn3 } from "child_process";
297166
- import { logger as logger47 } from "@elizaos/core";
296802
+ import { spawn as spawn2 } from "child_process";
296803
+ import { logger as logger43 } from "@elizaos/core";
297167
296804
  var phalaCliCommand = new Command("phala").description("Official Phala Cloud CLI - Manage TEE deployments on Phala Cloud").allowUnknownOption().helpOption(false).allowExcessArguments(true).passThroughOptions().argument("[args...]", "All arguments to pass to Phala CLI").action(async (...commandArgs) => {
297168
296805
  const cmd = commandArgs[commandArgs.length - 1];
297169
296806
  const raw = cmd?.parent?.rawArgs ?? cmd?.rawArgs ?? process.argv;
297170
296807
  const idx = raw.findIndex((arg) => arg === "phala");
297171
296808
  const args = idx >= 0 ? raw.slice(idx + 1) : Array.isArray(commandArgs[0]) ? commandArgs[0] : [];
297172
296809
  try {
297173
- logger47.info({ args }, "Running Phala CLI command");
297174
- const phalaProcess = spawn3("npx", ["--yes", "phala", ...args], {
296810
+ logger43.info({ args }, "Running Phala CLI command");
296811
+ const phalaProcess = spawn2("npx", ["--yes", "phala", ...args], {
297175
296812
  stdio: "inherit"
297176
296813
  });
297177
296814
  phalaProcess.on("error", (err) => {
297178
296815
  const error2 = err;
297179
- logger47.error({ error: error2, args }, "Failed to execute Phala CLI");
296816
+ logger43.error({ error: error2, args }, "Failed to execute Phala CLI");
297180
296817
  if (error2.code === "ENOENT") {
297181
- logger47.error(`
296818
+ logger43.error(`
297182
296819
  ${emoji.error("Error: npx not found. Please install Node.js and npm:")}`);
297183
- logger47.error(" Visit https://nodejs.org or use a version manager like nvm");
297184
- logger47.error(" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash");
296820
+ logger43.error(" Visit https://nodejs.org or use a version manager like nvm");
296821
+ logger43.error(" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash");
297185
296822
  } else {
297186
- logger47.error(`
296823
+ logger43.error(`
297187
296824
  ${emoji.error("Error: Failed to execute Phala CLI")}`);
297188
- logger47.error({ args }, " Try running directly: npx phala [args]");
296825
+ logger43.error({ args }, " Try running directly: npx phala [args]");
297189
296826
  }
297190
296827
  process.exit(1);
297191
296828
  });
297192
296829
  phalaProcess.on("exit", (code) => {
297193
296830
  if (code !== 0) {
297194
- logger47.warn({ code }, "Phala CLI exited with non-zero code");
296831
+ logger43.warn({ code }, "Phala CLI exited with non-zero code");
297195
296832
  }
297196
296833
  process.exit(code || 0);
297197
296834
  });
297198
296835
  } catch (error2) {
297199
- logger47.error({ error: error2, args }, "Error running Phala CLI");
297200
- logger47.error(`
296836
+ logger43.error({ error: error2, args }, "Error running Phala CLI");
296837
+ logger43.error(`
297201
296838
  ${emoji.error("Error: Failed to run Phala CLI")}`);
297202
- logger47.error({ args }, " Try running Phala CLI directly with: npx phala [args]");
297203
- logger47.error(" Or visit https://www.npmjs.com/package/phala for more information");
296839
+ logger43.error({ args }, " Try running Phala CLI directly with: npx phala [args]");
296840
+ logger43.error(" Or visit https://www.npmjs.com/package/phala for more information");
297204
296841
  process.exit(1);
297205
296842
  }
297206
296843
  }).configureHelp({
@@ -297227,20 +296864,19 @@ var teeCommand = new Command("tee").description("Manage TEE deployments").enable
297227
296864
  // src/commands/test/index.ts
297228
296865
  init_utils();
297229
296866
  init_esm();
297230
- import { logger as logger54 } from "@elizaos/core";
296867
+ import { logger as logger50 } from "@elizaos/core";
297231
296868
 
297232
296869
  // src/commands/test/actions/run-all-tests.ts
297233
- import { logger as logger52 } from "@elizaos/core";
296870
+ import { logger as logger48 } from "@elizaos/core";
297234
296871
 
297235
296872
  // src/commands/test/utils/project-utils.ts
297236
296873
  init_directory_detection();
297237
- init_project();
297238
296874
  init_run_bun();
297239
- import { logger as logger48 } from "@elizaos/core";
296875
+ import { logger as logger44 } from "@elizaos/core";
297240
296876
  import * as fs33 from "fs";
297241
- import path60 from "path";
296877
+ import path59 from "path";
297242
296878
  function getProjectType(testPath) {
297243
- const targetPath = testPath ? path60.resolve(process.cwd(), testPath) : process.cwd();
296879
+ const targetPath = testPath ? path59.resolve(process.cwd(), testPath) : process.cwd();
297244
296880
  return detectDirectoryType(targetPath);
297245
296881
  }
297246
296882
  function processFilterName(name) {
@@ -297260,11 +296896,11 @@ async function installPluginDependencies(projectInfo) {
297260
296896
  }
297261
296897
  const project = await loadProject(process.cwd());
297262
296898
  if (project.isPlugin && project.pluginModule?.dependencies && project.pluginModule.dependencies.length > 0) {
297263
- const pluginsDir = path60.join(process.cwd(), ".eliza", "plugins");
296899
+ const pluginsDir = path59.join(process.cwd(), ".eliza", "plugins");
297264
296900
  if (!fs33.existsSync(pluginsDir)) {
297265
296901
  await fs33.promises.mkdir(pluginsDir, { recursive: true });
297266
296902
  }
297267
- const packageJsonPath = path60.join(pluginsDir, "package.json");
296903
+ const packageJsonPath = path59.join(pluginsDir, "package.json");
297268
296904
  if (!fs33.existsSync(packageJsonPath)) {
297269
296905
  const packageJsonContent = {
297270
296906
  name: "test-plugin-dependencies",
@@ -297277,12 +296913,12 @@ async function installPluginDependencies(projectInfo) {
297277
296913
  const { installPlugin: installPlugin2 } = await Promise.resolve().then(() => (init_utils(), exports_utils));
297278
296914
  for (const dependency of project.pluginModule.dependencies) {
297279
296915
  await installPlugin2(dependency, pluginsDir);
297280
- const dependencyPath = path60.join(pluginsDir, "node_modules", dependency);
296916
+ const dependencyPath = path59.join(pluginsDir, "node_modules", dependency);
297281
296917
  if (fs33.existsSync(dependencyPath)) {
297282
296918
  try {
297283
296919
  await runBunCommand(["install"], dependencyPath);
297284
296920
  } catch (error2) {
297285
- logger48.warn(`[Test Command] Failed to install devDependencies for ${dependency}: ${error2}`);
296921
+ logger44.warn(`[Test Command] Failed to install devDependencies for ${dependency}: ${error2}`);
297286
296922
  }
297287
296923
  }
297288
296924
  }
@@ -297292,17 +296928,17 @@ async function installPluginDependencies(projectInfo) {
297292
296928
  // src/commands/test/actions/component-tests.ts
297293
296929
  init_utils();
297294
296930
  init_bun_exec();
297295
- import { logger as logger50 } from "@elizaos/core";
297296
- import path62 from "path";
296931
+ import { logger as logger46 } from "@elizaos/core";
296932
+ import path61 from "path";
297297
296933
 
297298
296934
  // src/utils/testing/tsc-validator.ts
297299
296935
  init_bun_exec();
297300
- import { logger as logger49 } from "@elizaos/core";
297301
- import path61 from "path";
297302
- import { existsSync as existsSync43 } from "fs";
296936
+ import { logger as logger45 } from "@elizaos/core";
296937
+ import path60 from "path";
296938
+ import { existsSync as existsSync42 } from "fs";
297303
296939
  async function runTypeCheck(projectPath, strict = true) {
297304
- const tsconfigPath = path61.join(projectPath, "tsconfig.json");
297305
- if (!existsSync43(tsconfigPath)) {
296940
+ const tsconfigPath = path60.join(projectPath, "tsconfig.json");
296941
+ if (!existsSync42(tsconfigPath)) {
297306
296942
  return {
297307
296943
  success: false,
297308
296944
  errors: [`No tsconfig.json found at ${tsconfigPath}`],
@@ -297325,7 +296961,7 @@ async function runTypeCheck(projectPath, strict = true) {
297325
296961
  warnings: stderr.includes("warning") ? [stderr] : []
297326
296962
  };
297327
296963
  } catch (error2) {
297328
- logger49.error({ error: error2 }, "TypeScript validation failed:");
296964
+ logger45.error({ error: error2 }, "TypeScript validation failed:");
297329
296965
  return {
297330
296966
  success: false,
297331
296967
  errors: [`TypeScript validation error: ${error2.message}`],
@@ -297339,38 +296975,38 @@ async function runComponentTests(testPath, options, projectInfo) {
297339
296975
  const cwd = process.cwd();
297340
296976
  const isPlugin2 = projectInfo.type === "elizaos-plugin";
297341
296977
  if (!options.skipTypeCheck) {
297342
- logger50.info("Running TypeScript validation...");
296978
+ logger46.info("Running TypeScript validation...");
297343
296979
  const typeCheckResult = await runTypeCheck(cwd, true);
297344
296980
  if (!typeCheckResult.success) {
297345
- logger50.error("TypeScript validation failed:");
297346
- typeCheckResult.errors.forEach((error2) => logger50.error(error2));
296981
+ logger46.error("TypeScript validation failed:");
296982
+ typeCheckResult.errors.forEach((error2) => logger46.error(error2));
297347
296983
  return { failed: true };
297348
296984
  }
297349
- logger50.success("TypeScript validation passed");
296985
+ logger46.success("TypeScript validation passed");
297350
296986
  }
297351
296987
  if (!options.skipBuild) {
297352
296988
  try {
297353
- logger50.info(`Building ${isPlugin2 ? "plugin" : "project"}...`);
296989
+ logger46.info(`Building ${isPlugin2 ? "plugin" : "project"}...`);
297354
296990
  await buildProject(cwd, isPlugin2);
297355
- logger50.success(`Build completed successfully`);
296991
+ logger46.success(`Build completed successfully`);
297356
296992
  } catch (buildError) {
297357
- logger50.error(`Build failed: ${buildError}`);
296993
+ logger46.error(`Build failed: ${buildError}`);
297358
296994
  return { failed: true };
297359
296995
  }
297360
296996
  }
297361
- logger50.info("Running component tests...");
296997
+ logger46.info("Running component tests...");
297362
296998
  const args = ["test", "--passWithNoTests"];
297363
296999
  if (options.name) {
297364
297000
  const baseName = processFilterName(options.name);
297365
297001
  if (baseName) {
297366
- logger50.info(`Using test filter: ${baseName}`);
297002
+ logger46.info(`Using test filter: ${baseName}`);
297367
297003
  args.push("-t", baseName);
297368
297004
  }
297369
297005
  }
297370
297006
  const monorepoRoot = UserEnvironment.getInstance().findMonorepoRoot(process.cwd());
297371
297007
  const baseDir = monorepoRoot ?? process.cwd();
297372
- const targetPath = testPath ? path62.resolve(baseDir, testPath) : process.cwd();
297373
- logger50.info(`Executing: bun ${args.join(" ")} in ${targetPath}`);
297008
+ const targetPath = testPath ? path61.resolve(baseDir, testPath) : process.cwd();
297009
+ logger46.info(`Executing: bun ${args.join(" ")} in ${targetPath}`);
297374
297010
  try {
297375
297011
  const result = await bunExecInherit("bun", args, {
297376
297012
  cwd: targetPath,
@@ -297379,35 +297015,32 @@ async function runComponentTests(testPath, options, projectInfo) {
297379
297015
  CI: ""
297380
297016
  }
297381
297017
  });
297382
- logger50.info("Component tests completed");
297018
+ logger46.info("Component tests completed");
297383
297019
  return { failed: !result.success };
297384
297020
  } catch (error2) {
297385
- logger50.error({ error: error2 }, "Error running component tests:");
297021
+ logger46.error({ error: error2 }, "Error running component tests:");
297386
297022
  return { failed: true };
297387
297023
  }
297388
297024
  }
297389
297025
 
297390
297026
  // src/commands/test/actions/e2e-tests.ts
297391
- init_project();
297392
297027
  init_utils();
297393
297028
  init_module_loader();
297394
297029
  var dotenv5 = __toESM(require_main(), 1);
297395
- init_eliza();
297396
- init_start();
297397
- import { logger as logger51 } from "@elizaos/core";
297030
+ import { logger as logger47 } from "@elizaos/core";
297398
297031
  import * as fs34 from "fs";
297399
- import path63 from "path";
297032
+ import path62 from "path";
297400
297033
  async function runE2eTests(testPath, options, projectInfo) {
297401
297034
  if (!options.skipBuild) {
297402
297035
  try {
297403
297036
  const cwd = process.cwd();
297404
297037
  const isPlugin2 = projectInfo.type === "elizaos-plugin";
297405
- logger51.info(`Building ${isPlugin2 ? "plugin" : "project"}...`);
297038
+ logger47.info(`Building ${isPlugin2 ? "plugin" : "project"}...`);
297406
297039
  await buildProject(cwd, isPlugin2);
297407
- logger51.info(`Build completed successfully`);
297040
+ logger47.info(`Build completed successfully`);
297408
297041
  } catch (buildError) {
297409
- logger51.error(`Build error: ${buildError}`);
297410
- logger51.warn(`Attempting to continue with tests despite build error`);
297042
+ logger47.error(`Build error: ${buildError}`);
297043
+ logger47.warn(`Attempting to continue with tests despite build error`);
297411
297044
  }
297412
297045
  }
297413
297046
  let server2;
@@ -297417,10 +297050,10 @@ async function runE2eTests(testPath, options, projectInfo) {
297417
297050
  const moduleLoader = getModuleLoader();
297418
297051
  const serverModule = await moduleLoader.load("@elizaos/server");
297419
297052
  const { AgentServer, jsonToCharacter, loadCharacterTryPath } = serverModule;
297420
- const elizaDir = path63.join(process.cwd(), ".eliza");
297421
- const packageName = path63.basename(process.cwd());
297053
+ const elizaDir = path62.join(process.cwd(), ".eliza");
297054
+ const packageName = path62.basename(process.cwd());
297422
297055
  const timestamp = Date.now();
297423
- const uniqueDbDir = path63.join(process.cwd(), ".elizadb-test", `${packageName}-${timestamp}`);
297056
+ const uniqueDbDir = path62.join(process.cwd(), ".elizadb-test", `${packageName}-${timestamp}`);
297424
297057
  const elizaDbDir = uniqueDbDir;
297425
297058
  const envInfo = await UserEnvironment.getInstanceInfo();
297426
297059
  const envFilePath = envInfo.paths.envFilePath;
@@ -297444,120 +297077,126 @@ async function runE2eTests(testPath, options, projectInfo) {
297444
297077
  process.env.PGLITE_DATA_DIR = elizaDbDir;
297445
297078
  console.info(`Set PGLITE_DATA_DIR to: ${elizaDbDir}`);
297446
297079
  if (fs34.existsSync(envFilePath)) {
297447
- logger51.info(`Loading environment variables from: ${envFilePath}`);
297080
+ logger47.info(`Loading environment variables from: ${envFilePath}`);
297448
297081
  dotenv5.config({ path: envFilePath });
297449
- logger51.info("Environment variables loaded");
297082
+ logger47.info("Environment variables loaded");
297450
297083
  } else {
297451
- logger51.warn(`Environment file not found: ${envFilePath}`);
297084
+ logger47.warn(`Environment file not found: ${envFilePath}`);
297452
297085
  }
297453
297086
  const postgresUrl = process.env.POSTGRES_URL;
297454
- logger51.info(`PostgreSQL URL for e2e tests: ${postgresUrl ? "found" : "not found (will use PGlite)"}`);
297455
- logger51.info("Creating server instance...");
297087
+ logger47.info(`PostgreSQL URL for e2e tests: ${postgresUrl ? "found" : "not found (will use PGlite)"}`);
297088
+ logger47.info("Creating server instance...");
297456
297089
  server2 = new AgentServer;
297457
- logger51.info("Server instance created");
297458
- logger51.info("Initializing server...");
297090
+ logger47.info("Server instance created");
297091
+ logger47.info("Initializing server...");
297459
297092
  try {
297460
297093
  await server2.initialize({
297461
297094
  dataDir: elizaDbDir,
297462
297095
  postgresUrl
297463
297096
  });
297464
- logger51.info("Server initialized successfully");
297097
+ logger47.info("Server initialized successfully");
297465
297098
  } catch (initError) {
297466
- logger51.error({ error: initError }, "Server initialization failed:");
297099
+ logger47.error({ error: initError }, "Server initialization failed:");
297467
297100
  throw initError;
297468
297101
  }
297469
297102
  let project;
297470
297103
  try {
297471
- logger51.info("Attempting to load project or plugin...");
297104
+ logger47.info("Attempting to load project or plugin...");
297472
297105
  const monorepoRoot = UserEnvironment.getInstance().findMonorepoRoot(process.cwd());
297473
297106
  const baseDir = monorepoRoot ?? process.cwd();
297474
- const targetPath = testPath ? path63.resolve(baseDir, testPath) : process.cwd();
297107
+ const targetPath = testPath ? path62.resolve(baseDir, testPath) : process.cwd();
297475
297108
  project = await loadProject(targetPath);
297476
- if (!project || !project.agents || project.agents.length === 0) {
297477
- throw new Error("No agents found in project configuration");
297109
+ if (!project) {
297110
+ throw new Error("Failed to load project");
297111
+ }
297112
+ if (!project.isPlugin && (!project.agents || project.agents.length === 0)) {
297113
+ logger47.warn("No agents found in project configuration; falling back to default Eliza character for tests.");
297478
297114
  }
297479
- logger51.info(`Found ${project.agents.length} agents`);
297480
- logger51.info("Setting up server properties...");
297115
+ logger47.info(`Found ${project.agents?.length || 0} agents`);
297116
+ logger47.info("Setting up server properties...");
297117
+ const { AgentManager } = serverModule;
297118
+ const agentManager = new AgentManager(server2);
297481
297119
  server2.startAgent = async (character) => {
297482
- logger51.info(`Starting agent for character ${character.name}`);
297483
- return startAgent2(character, server2, undefined, [], { isTestMode: true });
297120
+ logger47.info(`Starting agent for character ${character.name}`);
297121
+ const [runtime] = await agentManager.startAgents([character], undefined, [], { isTestMode: true });
297122
+ return runtime;
297484
297123
  };
297485
297124
  server2.loadCharacterTryPath = loadCharacterTryPath;
297486
297125
  server2.jsonToCharacter = jsonToCharacter;
297487
- logger51.info("Server properties set up");
297126
+ logger47.info("Server properties set up");
297488
297127
  const desiredPort = options.port || Number.parseInt(process.env.SERVER_PORT || "3000");
297489
297128
  const serverHost = process.env.SERVER_HOST || "0.0.0.0";
297490
297129
  const serverPort = await findNextAvailablePort(desiredPort, serverHost);
297491
297130
  if (serverPort !== desiredPort) {
297492
- logger51.warn(`Port ${desiredPort} is in use for testing, using port ${serverPort} instead.`);
297131
+ logger47.warn(`Port ${desiredPort} is in use for testing, using port ${serverPort} instead.`);
297493
297132
  }
297494
- logger51.info("Starting server...");
297133
+ logger47.info("Starting server...");
297495
297134
  try {
297496
297135
  await server2.start(serverPort);
297497
- logger51.info({ serverPort }, "Server started successfully on port");
297136
+ logger47.info({ serverPort }, "Server started successfully on port");
297498
297137
  } catch (error2) {
297499
- logger51.error({ error: error2 }, "Error starting server:");
297138
+ logger47.error({ error: error2 }, "Error starting server:");
297500
297139
  if (error2 instanceof Error) {
297501
- logger51.error({ message: error2.message }, "Error details:");
297502
- logger51.error({ stack: error2.stack }, "Stack trace:");
297140
+ logger47.error({ message: error2.message }, "Error details:");
297141
+ logger47.error({ stack: error2.stack }, "Stack trace:");
297503
297142
  }
297504
297143
  throw error2;
297505
297144
  }
297506
297145
  try {
297507
- logger51.info(`Found ${project.agents.length} agents in ${project.isPlugin ? "plugin" : "project"}`);
297508
- if (project.isPlugin || project.agents.length === 0) {
297146
+ logger47.info(`Found ${project.agents.length} agents in ${project.isPlugin ? "plugin" : "project"}`);
297147
+ if (project.isPlugin || (project.agents?.length || 0) === 0) {
297509
297148
  process.env.ELIZA_TESTING_PLUGIN = "true";
297510
- logger51.info("Using default Eliza character as test agent");
297149
+ logger47.info("Using default Eliza character as test agent");
297511
297150
  try {
297512
297151
  const pluginUnderTest = project.pluginModule;
297513
297152
  if (!pluginUnderTest) {
297514
297153
  throw new Error("Plugin module could not be loaded for testing.");
297515
297154
  }
297516
297155
  const defaultElizaCharacter = getElizaCharacter();
297517
- const runtime = await startAgent2(defaultElizaCharacter, server2, undefined, [pluginUnderTest], { isTestMode: true });
297156
+ const [runtime] = await agentManager.startAgents([defaultElizaCharacter], undefined, [pluginUnderTest], { isTestMode: true });
297518
297157
  server2.registerAgent(runtime);
297519
297158
  runtimes.push(runtime);
297520
297159
  projectAgents.push({
297521
297160
  character: defaultElizaCharacter,
297522
297161
  plugins: runtime.plugins
297523
297162
  });
297524
- logger51.info("Default test agent started successfully");
297163
+ logger47.info("Default test agent started successfully");
297525
297164
  } catch (pluginError) {
297526
- logger51.error({ error: pluginError }, `Error starting plugin test agent:`);
297165
+ logger47.error({ error: pluginError }, `Error starting plugin test agent:`);
297527
297166
  throw pluginError;
297528
297167
  }
297529
297168
  } else {
297530
297169
  for (const agent2 of project.agents) {
297531
297170
  try {
297532
297171
  const originalCharacter = { ...agent2.character };
297533
- logger51.debug(`Starting agent: ${originalCharacter.name}`);
297534
- const runtime = await startAgent2(originalCharacter, server2, agent2.init, agent2.plugins || [], { isTestMode: true });
297172
+ logger47.debug(`Starting agent: ${originalCharacter.name}`);
297173
+ const [runtime] = await agentManager.startAgents([originalCharacter], agent2.init, agent2.plugins || [], { isTestMode: true });
297535
297174
  runtimes.push(runtime);
297536
297175
  projectAgents.push(agent2);
297537
297176
  await new Promise((resolve13) => setTimeout(resolve13, 1000));
297538
297177
  } catch (agentError) {
297539
- logger51.error({ error: agentError, agentName: agent2.character.name }, "Error starting agent");
297178
+ logger47.error({ error: agentError, agentName: agent2.character.name }, "Error starting agent");
297540
297179
  if (agentError instanceof Error) {
297541
- logger51.error({ message: agentError.message }, "Error details:");
297542
- logger51.error({ stack: agentError.stack }, "Stack trace:");
297180
+ logger47.error({ message: agentError.message }, "Error details:");
297181
+ logger47.error({ stack: agentError.stack }, "Stack trace:");
297543
297182
  }
297544
- logger51.warn(`Skipping agent ${agent2.character.name} due to startup error`);
297183
+ logger47.warn(`Skipping agent ${agent2.character.name} due to startup error`);
297545
297184
  }
297546
297185
  }
297547
297186
  }
297548
297187
  if (runtimes.length === 0) {
297549
297188
  throw new Error("Failed to start any agents from project");
297550
297189
  }
297551
- logger51.debug(`Successfully started ${runtimes.length} agents for testing`);
297190
+ logger47.debug(`Successfully started ${runtimes.length} agents for testing`);
297552
297191
  let totalFailed = 0;
297553
297192
  let anyTestsFound = false;
297554
297193
  for (let i = 0;i < runtimes.length; i++) {
297555
297194
  const runtime = runtimes[i];
297556
297195
  const projectAgent = projectAgents[i];
297557
297196
  if (project.isPlugin) {
297558
- logger51.debug(`Running tests for plugin: ${project.pluginModule?.name}`);
297197
+ logger47.debug(`Running tests for plugin: ${project.pluginModule?.name}`);
297559
297198
  } else {
297560
- logger51.debug(`Running tests for agent: ${runtime.character.name}`);
297199
+ logger47.debug(`Running tests for agent: ${runtime.character.name}`);
297561
297200
  }
297562
297201
  const testRunner = new TestRunner(runtime, projectAgent);
297563
297202
  const currentDirInfo = projectInfo;
@@ -297575,17 +297214,17 @@ async function runE2eTests(testPath, options, projectInfo) {
297575
297214
  }
297576
297215
  return { failed: anyTestsFound ? totalFailed > 0 : false };
297577
297216
  } catch (error2) {
297578
- logger51.error({ error: error2 }, "Error in runE2eTests:");
297217
+ logger47.error({ error: error2 }, "Error in runE2eTests:");
297579
297218
  if (error2 instanceof Error) {
297580
- logger51.error({ message: error2.message }, "Error details:");
297581
- logger51.error({ stack: error2.stack }, "Stack trace:");
297219
+ logger47.error({ message: error2.message }, "Error details:");
297220
+ logger47.error({ stack: error2.stack }, "Stack trace:");
297582
297221
  } else {
297583
- logger51.error({ type: typeof error2 }, "Unknown error type:");
297584
- logger51.error({ error: error2 }, "Error value:");
297222
+ logger47.error({ type: typeof error2 }, "Unknown error type:");
297223
+ logger47.error({ error: error2 }, "Error value:");
297585
297224
  try {
297586
- logger51.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297225
+ logger47.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297587
297226
  } catch (e2) {
297588
- logger51.error({ error: e2 }, "Could not stringify error:");
297227
+ logger47.error({ error: e2 }, "Could not stringify error:");
297589
297228
  }
297590
297229
  }
297591
297230
  return { failed: true };
@@ -297599,7 +297238,7 @@ async function runE2eTests(testPath, options, projectInfo) {
297599
297238
  fs34.rmSync(elizaDbDir, { recursive: true, force: true });
297600
297239
  console.info(`Successfully cleaned up test database directory`);
297601
297240
  }
297602
- const testDir = path63.dirname(elizaDbDir);
297241
+ const testDir = path62.dirname(elizaDbDir);
297603
297242
  if (fs34.existsSync(testDir) && fs34.readdirSync(testDir).length === 0) {
297604
297243
  fs34.rmSync(testDir, { recursive: true, force: true });
297605
297244
  }
@@ -297608,33 +297247,33 @@ async function runE2eTests(testPath, options, projectInfo) {
297608
297247
  }
297609
297248
  }
297610
297249
  } catch (error2) {
297611
- logger51.error({ error: error2 }, "Error in runE2eTests:");
297250
+ logger47.error({ error: error2 }, "Error in runE2eTests:");
297612
297251
  if (error2 instanceof Error) {
297613
- logger51.error({ message: error2.message }, "Error details:");
297614
- logger51.error({ stack: error2.stack }, "Stack trace:");
297252
+ logger47.error({ message: error2.message }, "Error details:");
297253
+ logger47.error({ stack: error2.stack }, "Stack trace:");
297615
297254
  } else {
297616
- logger51.error({ type: typeof error2 }, "Unknown error type:");
297617
- logger51.error({ error: error2 }, "Error value:");
297255
+ logger47.error({ type: typeof error2 }, "Unknown error type:");
297256
+ logger47.error({ error: error2 }, "Error value:");
297618
297257
  try {
297619
- logger51.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297258
+ logger47.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297620
297259
  } catch (e2) {
297621
- logger51.error({ error: e2 }, "Could not stringify error:");
297260
+ logger47.error({ error: e2 }, "Could not stringify error:");
297622
297261
  }
297623
297262
  }
297624
297263
  return { failed: true };
297625
297264
  }
297626
297265
  } catch (error2) {
297627
- logger51.error({ error: error2 }, "Error in runE2eTests:");
297266
+ logger47.error({ error: error2 }, "Error in runE2eTests:");
297628
297267
  if (error2 instanceof Error) {
297629
- logger51.error({ message: error2.message }, "Error details:");
297630
- logger51.error({ stack: error2.stack }, "Stack trace:");
297268
+ logger47.error({ message: error2.message }, "Error details:");
297269
+ logger47.error({ stack: error2.stack }, "Stack trace:");
297631
297270
  } else {
297632
- logger51.error({ type: typeof error2 }, "Unknown error type:");
297633
- logger51.error({ error: error2 }, "Error value:");
297271
+ logger47.error({ type: typeof error2 }, "Unknown error type:");
297272
+ logger47.error({ error: error2 }, "Error value:");
297634
297273
  try {
297635
- logger51.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297274
+ logger47.error({ stringified: JSON.stringify(error2, null, 2) }, "Stringified error:");
297636
297275
  } catch (e2) {
297637
- logger51.error({ error: e2 }, "Could not stringify error:");
297276
+ logger47.error({ error: e2 }, "Could not stringify error:");
297638
297277
  }
297639
297278
  }
297640
297279
  return { failed: true };
@@ -297648,25 +297287,24 @@ async function runAllTests(testPath, options) {
297648
297287
  if (!options.skipBuild) {
297649
297288
  componentResult = await runComponentTests(testPath, options, projectInfo);
297650
297289
  } else {
297651
- logger52.info("Skipping component tests due to --skip-build option");
297290
+ logger48.info("Skipping component tests due to --skip-build option");
297652
297291
  }
297653
297292
  const e2eResult = await runE2eTests(testPath, options, projectInfo);
297654
297293
  if (componentResult.failed || e2eResult.failed) {
297655
297294
  if (componentResult.failed) {
297656
- logger52.error("Component tests failed.");
297295
+ logger48.error("Component tests failed.");
297657
297296
  }
297658
297297
  if (e2eResult.failed) {
297659
- logger52.error("E2E tests failed.");
297298
+ logger48.error("E2E tests failed.");
297660
297299
  }
297661
- logger52.error("Test suite failed.");
297300
+ logger48.error("Test suite failed.");
297662
297301
  process.exit(1);
297663
297302
  }
297664
- logger52.success("All tests passed successfully!");
297303
+ logger48.success("All tests passed successfully!");
297665
297304
  process.exit(0);
297666
297305
  }
297667
297306
  // src/commands/test/utils/plugin-utils.ts
297668
- init_project();
297669
- import { logger as logger53 } from "@elizaos/core";
297307
+ import { logger as logger49 } from "@elizaos/core";
297670
297308
 
297671
297309
  // src/commands/test/index.ts
297672
297310
  var test = new Command().name("test").description("Run tests for the current project or a specified plugin").argument("[path]", "Optional path to the project or plugin to test").addOption(new Option("-t, --type <type>", "the type of test to run").choices(["component", "e2e", "all"]).default("all")).option("--port <port>", "The port to run e2e tests on", validatePort).option("--name <name>", "Filter tests by name").option("--skip-build", "Skip building before running tests").option("--skip-type-check", "Skip TypeScript validation before running tests").hook("preAction", async (thisCommand) => {
@@ -297678,31 +297316,31 @@ var test = new Command().name("test").description("Run tests for the current pro
297678
297316
  const projectInfo = getProjectType(testPath);
297679
297317
  await installPluginDependencies(projectInfo);
297680
297318
  }).action(async (testPath, options) => {
297681
- logger54.info("Starting tests...");
297319
+ logger50.info("Starting tests...");
297682
297320
  try {
297683
297321
  const projectInfo = getProjectType(testPath);
297684
297322
  switch (options.type) {
297685
297323
  case "component":
297686
- logger54.info("Running component tests only...");
297324
+ logger50.info("Running component tests only...");
297687
297325
  const componentResult = await runComponentTests(testPath, options, projectInfo);
297688
297326
  if (componentResult.failed) {
297689
- logger54.error("Component tests failed.");
297327
+ logger50.error("Component tests failed.");
297690
297328
  process.exit(1);
297691
297329
  }
297692
- logger54.success("Component tests passed successfully!");
297330
+ logger50.success("Component tests passed successfully!");
297693
297331
  break;
297694
297332
  case "e2e":
297695
- logger54.info("Running e2e tests only...");
297333
+ logger50.info("Running e2e tests only...");
297696
297334
  const e2eResult = await runE2eTests(testPath, options, projectInfo);
297697
297335
  if (e2eResult.failed) {
297698
- logger54.error("E2E tests failed.");
297336
+ logger50.error("E2E tests failed.");
297699
297337
  process.exit(1);
297700
297338
  }
297701
- logger54.success("E2E tests passed successfully!");
297339
+ logger50.success("E2E tests passed successfully!");
297702
297340
  break;
297703
297341
  case "all":
297704
297342
  default:
297705
- logger54.info("Running all tests...");
297343
+ logger50.info("Running all tests...");
297706
297344
  await runAllTests(testPath, options);
297707
297345
  break;
297708
297346
  }
@@ -297716,19 +297354,19 @@ var test = new Command().name("test").description("Run tests for the current pro
297716
297354
  init_utils();
297717
297355
  init_directory_detection();
297718
297356
  init_esm();
297719
- import { logger as logger56 } from "@elizaos/core";
297357
+ import { logger as logger52 } from "@elizaos/core";
297720
297358
 
297721
297359
  // src/commands/update/actions/dependency-update.ts
297722
297360
  init_utils();
297723
297361
  init_dist2();
297724
297362
  import { promises as fs36 } from "fs";
297725
- import * as path64 from "path";
297363
+ import * as path63 from "path";
297726
297364
 
297727
297365
  // src/commands/update/utils/package-utils.ts
297728
297366
  init_bun_exec();
297729
297367
  init_utils();
297730
297368
  import fs35 from "fs/promises";
297731
- import { logger as logger55 } from "@elizaos/core";
297369
+ import { logger as logger51 } from "@elizaos/core";
297732
297370
  async function checkForUpdates(dependencies) {
297733
297371
  const updates = {};
297734
297372
  const elizaPackages = Object.entries(dependencies).filter(([pkg2]) => pkg2.startsWith(ELIZAOS_ORG)).filter(([, version2]) => !isWorkspaceVersion(version2));
@@ -297740,7 +297378,7 @@ async function checkForUpdates(dependencies) {
297740
297378
  if (needsUpdate) {
297741
297379
  updates[pkg2] = { current: currentVersion, latest: latestVersion };
297742
297380
  } else if (error2) {
297743
- logger55.debug(`${pkg2}: ${error2}`);
297381
+ logger51.debug(`${pkg2}: ${error2}`);
297744
297382
  }
297745
297383
  }
297746
297384
  return { hasUpdates: Object.keys(updates).length > 0, updates };
@@ -297789,7 +297427,7 @@ Installing updated packages...`);
297789
297427
  // src/commands/update/actions/dependency-update.ts
297790
297428
  async function updateDependencies(cwd, isPlugin2, options = {}) {
297791
297429
  const { dryRun = false, skipBuild = false } = options;
297792
- const packageJsonPath = path64.join(cwd, "package.json");
297430
+ const packageJsonPath = path63.join(cwd, "package.json");
297793
297431
  const content = await fs36.readFile(packageJsonPath, "utf8");
297794
297432
  const packageJson = JSON.parse(content);
297795
297433
  const allDependencies = {
@@ -297863,7 +297501,7 @@ var update = new Command().name("update").description("Update ElizaOS CLI and pr
297863
297501
  try {
297864
297502
  await displayBanner(true);
297865
297503
  } catch {
297866
- logger56.debug("Banner display failed, continuing with update");
297504
+ logger52.debug("Banner display failed, continuing with update");
297867
297505
  }
297868
297506
  }).action(async (options) => {
297869
297507
  try {
@@ -297901,7 +297539,7 @@ var update = new Command().name("update").description("Update ElizaOS CLI and pr
297901
297539
  console.info("To create a new ElizaOS project, use: elizaos create <project-name>");
297902
297540
  return;
297903
297541
  }
297904
- logger56.debug(`Detected ${directoryInfo.type}`);
297542
+ logger52.debug(`Detected ${directoryInfo.type}`);
297905
297543
  if (!isInProject) {
297906
297544
  handleInvalidDirectory(directoryInfo);
297907
297545
  return;
@@ -297936,15 +297574,15 @@ init_utils();
297936
297574
  init_local_cli_delegation();
297937
297575
  init_esm();
297938
297576
  init_emoji_handler();
297939
- import { logger as logger57 } from "@elizaos/core";
297577
+ import { logger as logger53 } from "@elizaos/core";
297940
297578
 
297941
297579
  // src/commands/scenario/index.ts
297942
297580
  init_esm();
297943
297581
  init_js_yaml();
297944
297582
  init_schema();
297945
297583
  init_LocalEnvironmentProvider();
297946
- import fs42 from "fs";
297947
- import path68 from "path";
297584
+ import fs41 from "fs";
297585
+ import path66 from "path";
297948
297586
  import { logger as elizaLogger } from "@elizaos/core";
297949
297587
 
297950
297588
  // src/commands/scenario/src/E2BEnvironmentProvider.ts
@@ -298482,120 +298120,124 @@ class Reporter {
298482
298120
  }
298483
298121
  }
298484
298122
  // src/commands/scenario/src/plugin-parser.ts
298485
- init_plugin_utils();
298486
-
298487
- class PluginParser {
298488
- static parsePlugins(pluginReferences) {
298489
- if (!pluginReferences || pluginReferences.length === 0) {
298490
- return [];
298123
+ init_module_loader();
298124
+ function parsePlugins(pluginReferences) {
298125
+ if (!pluginReferences || pluginReferences.length === 0) {
298126
+ return [];
298127
+ }
298128
+ return pluginReferences.map((ref) => {
298129
+ if (typeof ref === "string") {
298130
+ return {
298131
+ name: ref,
298132
+ enabled: true,
298133
+ originalReference: ref
298134
+ };
298135
+ } else {
298136
+ return {
298137
+ name: ref.name,
298138
+ version: ref.version,
298139
+ config: ref.config,
298140
+ enabled: ref.enabled ?? true,
298141
+ originalReference: ref
298142
+ };
298491
298143
  }
298492
- return pluginReferences.map((ref) => {
298493
- if (typeof ref === "string") {
298494
- return {
298495
- name: ref,
298496
- enabled: true,
298497
- originalReference: ref
298498
- };
298144
+ });
298145
+ }
298146
+ async function validatePlugins(plugins2) {
298147
+ const result = {
298148
+ valid: true,
298149
+ plugins: [],
298150
+ errors: [],
298151
+ warnings: []
298152
+ };
298153
+ const seenPlugins = new Set;
298154
+ for (const plugin of plugins2) {
298155
+ if (!plugin.enabled) {
298156
+ result.warnings.push(`Plugin '${plugin.name}' is disabled`);
298157
+ continue;
298158
+ }
298159
+ if (seenPlugins.has(plugin.name)) {
298160
+ result.errors.push(`Duplicate plugin '${plugin.name}' found`);
298161
+ result.valid = false;
298162
+ continue;
298163
+ }
298164
+ seenPlugins.add(plugin.name);
298165
+ if (!isValidPluginName(plugin.name)) {
298166
+ result.errors.push(`Invalid plugin name '${plugin.name}'. Expected format: @elizaos/plugin-*`);
298167
+ result.valid = false;
298168
+ continue;
298169
+ }
298170
+ try {
298171
+ const moduleLoader = getModuleLoader();
298172
+ const { PluginLoader } = await moduleLoader.load("@elizaos/server");
298173
+ const loader2 = new PluginLoader;
298174
+ const loadedPlugin = await loader2.loadAndPreparePlugin(plugin.name);
298175
+ if (loadedPlugin) {
298176
+ plugin.loadedPlugin = loadedPlugin;
298177
+ result.plugins.push(plugin);
298499
298178
  } else {
298500
- return {
298501
- name: ref.name,
298502
- version: ref.version,
298503
- config: ref.config,
298504
- enabled: ref.enabled ?? true,
298505
- originalReference: ref
298506
- };
298507
- }
298508
- });
298509
- }
298510
- static async validatePlugins(plugins2) {
298511
- const result = {
298512
- valid: true,
298513
- plugins: [],
298514
- errors: [],
298515
- warnings: []
298516
- };
298517
- const seenPlugins = new Set;
298518
- for (const plugin of plugins2) {
298519
- if (!plugin.enabled) {
298520
- result.warnings.push(`Plugin '${plugin.name}' is disabled`);
298521
- continue;
298522
- }
298523
- if (seenPlugins.has(plugin.name)) {
298524
- result.errors.push(`Duplicate plugin '${plugin.name}' found`);
298525
- result.valid = false;
298526
- continue;
298527
- }
298528
- seenPlugins.add(plugin.name);
298529
- if (!this.isValidPluginName(plugin.name)) {
298530
- result.errors.push(`Invalid plugin name '${plugin.name}'. Expected format: @elizaos/plugin-*`);
298531
- result.valid = false;
298532
- continue;
298533
- }
298534
- try {
298535
- const loadedPlugin = await loadAndPreparePlugin(plugin.name);
298536
- if (loadedPlugin) {
298537
- plugin.loadedPlugin = loadedPlugin;
298538
- result.plugins.push(plugin);
298539
- } else {
298540
- result.errors.push(`Failed to load plugin '${plugin.name}'`);
298541
- result.valid = false;
298542
- continue;
298543
- }
298544
- } catch (error2) {
298545
- result.errors.push(`Error loading plugin '${plugin.name}': ${error2 instanceof Error ? error2.message : String(error2)}`);
298546
- result.valid = false;
298547
- continue;
298548
- }
298549
- if (plugin.version && !this.isValidVersion(plugin.version)) {
298550
- result.errors.push(`Invalid version '${plugin.version}' for plugin '${plugin.name}'`);
298551
- result.valid = false;
298552
- continue;
298553
- }
298554
- if (plugin.config && !this.isValidConfig(plugin.config)) {
298555
- result.errors.push(`Invalid configuration for plugin '${plugin.name}'`);
298179
+ result.errors.push(`Failed to load plugin '${plugin.name}'`);
298556
298180
  result.valid = false;
298557
298181
  continue;
298558
298182
  }
298183
+ } catch (error2) {
298184
+ result.errors.push(`Error loading plugin '${plugin.name}': ${error2 instanceof Error ? error2.message : String(error2)}`);
298185
+ result.valid = false;
298186
+ continue;
298187
+ }
298188
+ if (plugin.version && !isValidVersion(plugin.version)) {
298189
+ result.errors.push(`Invalid version '${plugin.version}' for plugin '${plugin.name}'`);
298190
+ result.valid = false;
298191
+ continue;
298192
+ }
298193
+ if (plugin.config && !isValidConfig(plugin.config)) {
298194
+ result.errors.push(`Invalid configuration for plugin '${plugin.name}'`);
298195
+ result.valid = false;
298196
+ continue;
298559
298197
  }
298560
- return result;
298561
- }
298562
- static async parseAndValidate(pluginReferences) {
298563
- const parsedPlugins = this.parsePlugins(pluginReferences);
298564
- return await this.validatePlugins(parsedPlugins);
298565
298198
  }
298566
- static isValidPluginName(name) {
298567
- return /^@elizaos\/plugin-[a-zA-Z0-9-]+$/.test(name);
298199
+ return result;
298200
+ }
298201
+ async function parseAndValidate(pluginReferences) {
298202
+ const parsedPlugins = parsePlugins(pluginReferences);
298203
+ return await validatePlugins(parsedPlugins);
298204
+ }
298205
+ function isValidPluginName(name) {
298206
+ return /^@elizaos\/plugin-[a-zA-Z0-9-]+$/.test(name);
298207
+ }
298208
+ function isValidVersion(version2) {
298209
+ return /^\d+\.\d+\.\d+$/.test(version2);
298210
+ }
298211
+ function isValidConfig(config4) {
298212
+ return typeof config4 === "object" && config4 !== null && !Array.isArray(config4);
298213
+ }
298214
+ function generateSummary(result) {
298215
+ const lines = [];
298216
+ lines.push(`Plugin Loading Summary:`);
298217
+ lines.push(` Total plugins: ${result.plugins.length}`);
298218
+ lines.push(` Valid: ${result.valid ? "Yes" : "No"}`);
298219
+ if (result.plugins.length > 0) {
298220
+ lines.push(` Plugins to load:`);
298221
+ result.plugins.forEach((plugin) => {
298222
+ const configStr = plugin.config ? ` (with config)` : "";
298223
+ const versionStr = plugin.version ? ` v${plugin.version}` : "";
298224
+ lines.push(` - ${plugin.name}${versionStr}${configStr}`);
298225
+ });
298568
298226
  }
298569
- static isValidVersion(version2) {
298570
- return /^\d+\.\d+\.\d+$/.test(version2);
298227
+ if (result.errors.length > 0) {
298228
+ lines.push(` Errors:`);
298229
+ result.errors.forEach((error2) => {
298230
+ lines.push(` - ${error2}`);
298231
+ });
298571
298232
  }
298572
- static isValidConfig(config4) {
298573
- return typeof config4 === "object" && config4 !== null && !Array.isArray(config4);
298233
+ if (result.warnings.length > 0) {
298234
+ lines.push(` Warnings:`);
298235
+ result.warnings.forEach((warning) => {
298236
+ lines.push(` - ${warning}`);
298237
+ });
298574
298238
  }
298575
- static generateSummary(result) {
298576
- const lines = [];
298577
- lines.push(`Plugin Loading Summary:`);
298578
- lines.push(` Total plugins: ${result.plugins.length}`);
298579
- lines.push(` Valid: ${result.valid ? "Yes" : "No"}`);
298580
- if (result.plugins.length > 0) {
298581
- lines.push(` Plugins to load:`);
298582
- result.plugins.forEach((plugin) => {
298583
- const configStr = plugin.config ? ` (with config)` : "";
298584
- const versionStr = plugin.version ? ` v${plugin.version}` : "";
298585
- lines.push(` - ${plugin.name}${versionStr}${configStr}`);
298586
- });
298587
- }
298588
- if (result.errors.length > 0) {
298589
- lines.push(` Errors:`);
298590
- result.errors.forEach((error2) => lines.push(` - ${error2}`));
298591
- }
298592
- if (result.warnings.length > 0) {
298593
- lines.push(` Warnings:`);
298594
- result.warnings.forEach((warning) => lines.push(` - ${warning}`));
298595
- }
298596
- return lines.join(`
298239
+ return lines.join(`
298597
298240
  `);
298598
- }
298599
298241
  }
298600
298242
 
298601
298243
  // src/commands/scenario/src/data-aggregator.ts
@@ -298708,14 +298350,14 @@ class RunDataAggregator {
298708
298350
  // src/commands/scenario/index.ts
298709
298351
  var __dirname = "/home/runner/work/eliza/eliza/packages/cli/src/commands/scenario";
298710
298352
  async function runEvaluationsWithFallback(evaluationEngine, evaluations, result) {
298711
- const logger57 = elizaLogger || console;
298353
+ const logger53 = elizaLogger || console;
298712
298354
  try {
298713
- logger57.debug("[Evaluation] Using enhanced evaluations with structured output");
298355
+ logger53.debug("[Evaluation] Using enhanced evaluations with structured output");
298714
298356
  const enhancedResults = await evaluationEngine.runEnhancedEvaluations(evaluations, result);
298715
298357
  if (Array.isArray(enhancedResults) && enhancedResults.length > 0) {
298716
298358
  const firstResult = enhancedResults[0];
298717
298359
  if (firstResult && typeof firstResult.evaluator_type === "string" && typeof firstResult.success === "boolean" && typeof firstResult.summary === "string" && typeof firstResult.details === "object") {
298718
- logger57.debug(`[Evaluation] Enhanced evaluations successful - ${enhancedResults.length} structured results`);
298360
+ logger53.debug(`[Evaluation] Enhanced evaluations successful - ${enhancedResults.length} structured results`);
298719
298361
  return enhancedResults.map((enhanced) => ({
298720
298362
  success: enhanced.success,
298721
298363
  message: enhanced.summary,
@@ -298723,16 +298365,16 @@ async function runEvaluationsWithFallback(evaluationEngine, evaluations, result)
298723
298365
  }));
298724
298366
  }
298725
298367
  }
298726
- logger57.warn("[Evaluation] Enhanced results invalid, falling back to legacy evaluations");
298368
+ logger53.warn("[Evaluation] Enhanced results invalid, falling back to legacy evaluations");
298727
298369
  } catch (error2) {
298728
- logger57.warn(`[Evaluation] Enhanced evaluations failed (${error2 instanceof Error ? error2.message : String(error2)}), falling back to legacy evaluations`);
298370
+ logger53.warn(`[Evaluation] Enhanced evaluations failed (${error2 instanceof Error ? error2.message : String(error2)}), falling back to legacy evaluations`);
298729
298371
  }
298730
- logger57.debug("[Evaluation] Using legacy evaluation system (fallback)");
298372
+ logger53.debug("[Evaluation] Using legacy evaluation system (fallback)");
298731
298373
  return await evaluationEngine.runEvaluations(evaluations, result);
298732
298374
  }
298733
298375
  var scenario = new Command().name("scenario").description("Manage and execute ElizaOS scenarios").addCommand(new Command("run").argument("<filePath>", "Path to the .scenario.yaml file").option("-l, --live", "Run scenario in live mode, ignoring mocks", false).description("Execute a scenario from a YAML file").action(async (filePath, options) => {
298734
- const logger57 = elizaLogger || console;
298735
- logger57.info(`Starting scenario run with args: ${JSON.stringify({ filePath, ...options })}`);
298376
+ const logger53 = elizaLogger || console;
298377
+ logger53.info(`Starting scenario run with args: ${JSON.stringify({ filePath, ...options })}`);
298736
298378
  let provider = null;
298737
298379
  let runtime = null;
298738
298380
  let server2 = null;
@@ -298743,43 +298385,47 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298743
298385
  let finalStatus = false;
298744
298386
  let reporter = null;
298745
298387
  const scenarioRunId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
298746
- const logsDir = path68.join(__dirname, "_logs_");
298388
+ const logsDir = path66.join(__dirname, "_logs_");
298747
298389
  let dataAggregator = null;
298748
298390
  try {
298749
- const fullPath = path68.resolve(filePath);
298750
- logger57.info(`Attempting to read scenario file from: ${fullPath}`);
298751
- if (!fs42.existsSync(fullPath)) {
298752
- logger57.error(`Error: File not found at '${fullPath}'`);
298391
+ const fullPath = path66.resolve(filePath);
298392
+ logger53.info(`Attempting to read scenario file from: ${fullPath}`);
298393
+ if (!fs41.existsSync(fullPath)) {
298394
+ logger53.error(`Error: File not found at '${fullPath}'`);
298753
298395
  process.exit(1);
298754
298396
  }
298755
- const fileContents = fs42.readFileSync(fullPath, "utf8");
298397
+ const fileContents = fs41.readFileSync(fullPath, "utf8");
298756
298398
  const rawScenario = load2(fileContents);
298757
298399
  const validationResult = ScenarioSchema.safeParse(rawScenario);
298758
298400
  if (!validationResult.success) {
298759
- logger57.error("Scenario file validation failed:");
298401
+ logger53.error("Scenario file validation failed:");
298760
298402
  console.error(JSON.stringify(validationResult.error.format(), null, 2));
298761
298403
  process.exit(1);
298762
298404
  }
298763
298405
  const scenario2 = validationResult.data;
298764
- if (!fs42.existsSync(logsDir)) {
298765
- fs42.mkdirSync(logsDir, { recursive: true });
298406
+ if (!fs41.existsSync(logsDir)) {
298407
+ fs41.mkdirSync(logsDir, { recursive: true });
298766
298408
  }
298767
298409
  if (scenario2.plugins && scenario2.plugins.length > 0) {
298768
- logger57.info("Parsing and validating plugins...");
298769
- const pluginResult = await PluginParser.parseAndValidate(scenario2.plugins);
298410
+ logger53.info("Parsing and validating plugins...");
298411
+ const pluginResult = await parseAndValidate(scenario2.plugins);
298770
298412
  if (!pluginResult.valid) {
298771
- logger57.error("Plugin validation failed:");
298772
- pluginResult.errors.forEach((error2) => logger57.error(` - ${error2}`));
298413
+ logger53.error("Plugin validation failed:");
298414
+ pluginResult.errors.forEach((error2) => {
298415
+ logger53.error(` - ${error2}`);
298416
+ });
298773
298417
  process.exit(1);
298774
298418
  }
298775
298419
  if (pluginResult.warnings.length > 0) {
298776
- logger57.warn("Plugin warnings:");
298777
- pluginResult.warnings.forEach((warning) => logger57.warn(` - ${warning}`));
298420
+ logger53.warn("Plugin warnings:");
298421
+ pluginResult.warnings.forEach((warning) => {
298422
+ logger53.warn(` - ${warning}`);
298423
+ });
298778
298424
  }
298779
- logger57.info(PluginParser.generateSummary(pluginResult));
298425
+ logger53.info(generateSummary(pluginResult));
298780
298426
  scenario2.parsedPlugins = pluginResult.plugins;
298781
298427
  } else {
298782
- logger57.info("No plugins specified in scenario");
298428
+ logger53.info("No plugins specified in scenario");
298783
298429
  }
298784
298430
  reporter = new Reporter;
298785
298431
  reporter.reportStart(scenario2);
@@ -298794,7 +298440,7 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298794
298440
  }
298795
298441
  const scenarioPlugins = Array.isArray(scenario2.plugins) ? scenario2.plugins.filter((p2) => p2.enabled !== false).map((p2) => typeof p2 === "string" ? p2 : p2.name) : [];
298796
298442
  const finalPlugins = Array.from(new Set([...scenarioPlugins, ...defaultPlugins]));
298797
- logger57.info(`Using plugins: ${JSON.stringify(finalPlugins)}`);
298443
+ logger53.info(`Using plugins: ${JSON.stringify(finalPlugins)}`);
298798
298444
  if (scenario2.environment.type === "e2b") {
298799
298445
  const created = await createScenarioServerAndAgent(null, 3000, finalPlugins);
298800
298446
  server2 = created.server;
@@ -298814,18 +298460,18 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298814
298460
  serverPort = created.port;
298815
298461
  }
298816
298462
  provider = new LocalEnvironmentProvider(server2, agentId, runtime, serverPort);
298817
- logger57.info("Using local environment");
298463
+ logger53.info("Using local environment");
298818
298464
  } else {
298819
- logger57.error(`Unsupported environment type: '${scenario2.environment.type}'`);
298465
+ logger53.error(`Unsupported environment type: '${scenario2.environment.type}'`);
298820
298466
  process.exit(1);
298821
298467
  }
298822
298468
  if (runtime && scenario2.setup?.mocks && !options.live) {
298823
- logger57.info("Initializing MockEngine...");
298469
+ logger53.info("Initializing MockEngine...");
298824
298470
  mockEngine = new MockEngine(runtime);
298825
- logger57.info("Applying mocks...");
298471
+ logger53.info("Applying mocks...");
298826
298472
  mockEngine.applyMocks(scenario2.setup.mocks);
298827
298473
  }
298828
- logger57.info(`Setting up '${scenario2.environment.type}' environment...`);
298474
+ logger53.info(`Setting up '${scenario2.environment.type}' environment...`);
298829
298475
  await provider.setup(scenario2);
298830
298476
  if (runtime) {
298831
298477
  const trajectoryReconstructor = new TrajectoryReconstructor(runtime);
@@ -298835,42 +298481,42 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298835
298481
  const combinationId = `single-${scenarioRunId}`;
298836
298482
  const parameters = { "scenario.file": filePath };
298837
298483
  dataAggregator.startRun(runId2, combinationId, parameters);
298838
- logger57.info(`\uD83D\uDCCA [DataAggregator] Started tracking run: ${runId2}`);
298484
+ logger53.info(`\uD83D\uDCCA [DataAggregator] Started tracking run: ${runId2}`);
298839
298485
  }
298840
- logger57.info("Executing run block...");
298486
+ logger53.info("Executing run block...");
298841
298487
  const startTime = Date.now();
298842
298488
  const results = await provider.run(scenario2);
298843
298489
  const endTime = Date.now();
298844
298490
  results.forEach((result) => {
298845
298491
  reporter?.reportExecutionResult(result);
298846
298492
  });
298847
- logger57.info(`\uD83D\uDCC2 Using logs directory: ${logsDir}`);
298493
+ logger53.info(`\uD83D\uDCC2 Using logs directory: ${logsDir}`);
298848
298494
  const runId = generateRunFilename(1);
298849
- logger57.info(`\uD83D\uDD0D DEBUG: About to write ${results.length} execution results to ${logsDir}`);
298495
+ logger53.info(`\uD83D\uDD0D DEBUG: About to write ${results.length} execution results to ${logsDir}`);
298850
298496
  results.forEach((result, i2) => {
298851
298497
  const executionFilename = generateStepFilename(runId, i2, "execution");
298852
- const executionPath = path68.join(logsDir, executionFilename);
298853
- fs42.writeFileSync(executionPath, JSON.stringify(result, null, 2));
298854
- logger57.info(`\uD83D\uDCC4 Execution results written to: ${executionPath}`);
298498
+ const executionPath = path66.join(logsDir, executionFilename);
298499
+ fs41.writeFileSync(executionPath, JSON.stringify(result, null, 2));
298500
+ logger53.info(`\uD83D\uDCC4 Execution results written to: ${executionPath}`);
298855
298501
  });
298856
298502
  const allEvaluationResults = [];
298857
298503
  if (runtime) {
298858
298504
  const evaluationEngine = new EvaluationEngine(runtime);
298859
- logger57.info("Running evaluations with runtime...");
298505
+ logger53.info("Running evaluations with runtime...");
298860
298506
  for (let i2 = 0;i2 < results.length; i2++) {
298861
298507
  const step = scenario2.run[i2];
298862
298508
  const result = results[i2];
298863
298509
  if (step.evaluations && step.evaluations.length > 0) {
298864
298510
  const evaluationResults = await runEvaluationsWithFallback(evaluationEngine, step.evaluations, result);
298865
298511
  const evaluationFilename = generateStepFilename(runId, i2, "evaluation");
298866
- const evaluationPath = path68.join(logsDir, evaluationFilename);
298867
- fs42.writeFileSync(evaluationPath, JSON.stringify(evaluationResults, null, 2));
298868
- logger57.info(`\uD83D\uDCCA Evaluation results written to: ${evaluationPath}`);
298512
+ const evaluationPath = path66.join(logsDir, evaluationFilename);
298513
+ fs41.writeFileSync(evaluationPath, JSON.stringify(evaluationResults, null, 2));
298514
+ logger53.info(`\uD83D\uDCCA Evaluation results written to: ${evaluationPath}`);
298869
298515
  allEvaluationResults.push(...evaluationResults);
298870
298516
  }
298871
298517
  }
298872
298518
  } else {
298873
- logger57.info("Running basic evaluations without runtime...");
298519
+ logger53.info("Running basic evaluations without runtime...");
298874
298520
  for (let i2 = 0;i2 < results.length; i2++) {
298875
298521
  const step = scenario2.run[i2];
298876
298522
  const result = results[i2];
@@ -298900,9 +298546,9 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298900
298546
  allEvaluationResults.push(evaluationResult);
298901
298547
  }
298902
298548
  const evaluationFilename = generateStepFilename(runId, i2, "evaluation");
298903
- const evaluationPath = path68.join(logsDir, evaluationFilename);
298904
- fs42.writeFileSync(evaluationPath, JSON.stringify(stepEvaluationResults, null, 2));
298905
- logger57.info(`\uD83D\uDCCA Basic evaluation results written to: ${evaluationPath}`);
298549
+ const evaluationPath = path66.join(logsDir, evaluationFilename);
298550
+ fs41.writeFileSync(evaluationPath, JSON.stringify(stepEvaluationResults, null, 2));
298551
+ logger53.info(`\uD83D\uDCCA Basic evaluation results written to: ${evaluationPath}`);
298906
298552
  }
298907
298553
  }
298908
298554
  }
@@ -298955,15 +298601,15 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298955
298601
  });
298956
298602
  const scenarioRunResult = await dataAggregator.buildResult(roomId, enhancedEvaluationResults, combinedExecutionResult);
298957
298603
  const centralizedFilename = `${runId}.json`;
298958
- const centralizedPath = path68.join(logsDir, centralizedFilename);
298959
- fs42.writeFileSync(centralizedPath, JSON.stringify(scenarioRunResult, null, 2));
298960
- logger57.info(`\uD83D\uDCCB [DataAggregator] Centralized result written to: ${centralizedPath}`);
298604
+ const centralizedPath = path66.join(logsDir, centralizedFilename);
298605
+ fs41.writeFileSync(centralizedPath, JSON.stringify(scenarioRunResult, null, 2));
298606
+ logger53.info(`\uD83D\uDCCB [DataAggregator] Centralized result written to: ${centralizedPath}`);
298961
298607
  } catch (aggregatorError) {
298962
- logger57.error(`[DataAggregator] Failed to generate centralized result: ${aggregatorError}`);
298608
+ logger53.error(`[DataAggregator] Failed to generate centralized result: ${aggregatorError}`);
298963
298609
  }
298964
298610
  }
298965
298611
  } catch (error2) {
298966
- logger57.error("An error occurred during scenario execution:", error2 instanceof Error ? error2.message : String(error2));
298612
+ logger53.error("An error occurred during scenario execution:", error2 instanceof Error ? error2.message : String(error2));
298967
298613
  if (dataAggregator) {
298968
298614
  try {
298969
298615
  dataAggregator.recordError(error2 instanceof Error ? error2 : new Error(String(error2)));
@@ -298976,32 +298622,32 @@ var scenario = new Command().name("scenario").description("Manage and execute El
298976
298622
  files: {}
298977
298623
  });
298978
298624
  const errorFilename = `run-${failedResult.run_id}.json`;
298979
- const errorPath = path68.join(logsDir, errorFilename);
298980
- fs42.writeFileSync(errorPath, JSON.stringify(failedResult, null, 2));
298981
- logger57.info(`\uD83D\uDCA5 [DataAggregator] Error result written to: ${errorPath}`);
298625
+ const errorPath = path66.join(logsDir, errorFilename);
298626
+ fs41.writeFileSync(errorPath, JSON.stringify(failedResult, null, 2));
298627
+ logger53.info(`\uD83D\uDCA5 [DataAggregator] Error result written to: ${errorPath}`);
298982
298628
  } catch (aggregatorError) {
298983
- logger57.error(`[DataAggregator] Failed to record error: ${aggregatorError}`);
298629
+ logger53.error(`[DataAggregator] Failed to record error: ${aggregatorError}`);
298984
298630
  }
298985
298631
  }
298986
298632
  process.exit(1);
298987
298633
  } finally {
298988
298634
  if (mockEngine) {
298989
- logger57.info("Reverting mocks...");
298635
+ logger53.info("Reverting mocks...");
298990
298636
  mockEngine.revertMocks();
298991
298637
  }
298992
298638
  if (provider) {
298993
- logger57.info("Tearing down environment...");
298639
+ logger53.info("Tearing down environment...");
298994
298640
  await provider.teardown();
298995
298641
  }
298996
298642
  if (runtime) {
298997
298643
  try {
298998
298644
  const e2bService = runtime.getService("e2b");
298999
298645
  if (e2bService && typeof e2bService.stop === "function") {
299000
- logger57.info("Stopping E2B service...");
298646
+ logger53.info("Stopping E2B service...");
299001
298647
  await e2bService.stop();
299002
298648
  }
299003
298649
  await runtime.close();
299004
- logger57.info("Runtime shutdown complete");
298650
+ logger53.info("Runtime shutdown complete");
299005
298651
  } catch {}
299006
298652
  }
299007
298653
  if (server2 && createdServer) {
@@ -299024,214 +298670,214 @@ var scenario = new Command().name("scenario").description("Manage and execute El
299024
298670
  validateMatrixParameterPaths: validateMatrixParameterPaths2,
299025
298671
  combinationToOverrides: combinationToOverrides2
299026
298672
  } = await Promise.resolve().then(() => (init_parameter_override(), exports_parameter_override));
299027
- const logger57 = elizaLogger || console;
299028
- logger57.info(`\uD83E\uDDEA Starting matrix analysis with config: ${configPath}`);
298673
+ const logger53 = elizaLogger || console;
298674
+ logger53.info(`\uD83E\uDDEA Starting matrix analysis with config: ${configPath}`);
299029
298675
  if (options.verbose) {
299030
- logger57.info(`Options: ${JSON.stringify(options, null, 2)}`);
298676
+ logger53.info(`Options: ${JSON.stringify(options, null, 2)}`);
299031
298677
  }
299032
298678
  const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), exports_process_manager));
299033
298679
  let isShuttingDown = false;
299034
298680
  const handleShutdown = async (signal) => {
299035
298681
  if (isShuttingDown) {
299036
- logger57.info(`\uD83D\uDD27 [Matrix] Already shutting down, ignoring ${signal}`);
298682
+ logger53.info(`\uD83D\uDD27 [Matrix] Already shutting down, ignoring ${signal}`);
299037
298683
  return;
299038
298684
  }
299039
298685
  isShuttingDown = true;
299040
- logger57.info(`\uD83D\uDD27 [Matrix] Received ${signal}, initiating graceful shutdown...`);
298686
+ logger53.info(`\uD83D\uDD27 [Matrix] Received ${signal}, initiating graceful shutdown...`);
299041
298687
  const summary = processManager2.getSummary();
299042
298688
  if (summary.total > 0) {
299043
- logger57.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} tracked processes...`);
298689
+ logger53.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} tracked processes...`);
299044
298690
  await processManager2.terminateAllProcesses();
299045
- logger57.info(`\uD83D\uDD27 [Matrix] Process cleanup completed`);
298691
+ logger53.info(`\uD83D\uDD27 [Matrix] Process cleanup completed`);
299046
298692
  }
299047
- logger57.info(`\uD83D\uDD27 [Matrix] Shutdown complete`);
298693
+ logger53.info(`\uD83D\uDD27 [Matrix] Shutdown complete`);
299048
298694
  process.exit(0);
299049
298695
  };
299050
298696
  process.on("SIGINT", () => handleShutdown("SIGINT"));
299051
298697
  process.on("SIGTERM", () => handleShutdown("SIGTERM"));
299052
298698
  try {
299053
- const fullPath = path68.resolve(configPath);
299054
- const configDir = path68.dirname(fullPath);
299055
- logger57.info(`\uD83D\uDCC2 Loading matrix configuration from: ${fullPath}`);
299056
- if (!fs42.existsSync(fullPath)) {
299057
- logger57.error(`\u274C Error: Matrix configuration file not found at '${fullPath}'`);
299058
- logger57.info("\uD83D\uDCA1 Make sure the file exists and the path is correct.");
298699
+ const fullPath = path66.resolve(configPath);
298700
+ const configDir = path66.dirname(fullPath);
298701
+ logger53.info(`\uD83D\uDCC2 Loading matrix configuration from: ${fullPath}`);
298702
+ if (!fs41.existsSync(fullPath)) {
298703
+ logger53.error(`\u274C Error: Matrix configuration file not found at '${fullPath}'`);
298704
+ logger53.info("\uD83D\uDCA1 Make sure the file exists and the path is correct.");
299059
298705
  process.exit(1);
299060
298706
  }
299061
- const fileContents = fs42.readFileSync(fullPath, "utf8");
298707
+ const fileContents = fs41.readFileSync(fullPath, "utf8");
299062
298708
  let rawMatrixConfig;
299063
298709
  try {
299064
298710
  rawMatrixConfig = load2(fileContents);
299065
298711
  } catch (yamlError) {
299066
- logger57.error(`\u274C Error: Failed to parse YAML configuration file:`);
299067
- logger57.error(yamlError instanceof Error ? yamlError.message : String(yamlError));
299068
- logger57.info("\uD83D\uDCA1 Check that your YAML syntax is valid.");
298712
+ logger53.error(`\u274C Error: Failed to parse YAML configuration file:`);
298713
+ logger53.error(yamlError instanceof Error ? yamlError.message : String(yamlError));
298714
+ logger53.info("\uD83D\uDCA1 Check that your YAML syntax is valid.");
299069
298715
  process.exit(1);
299070
298716
  }
299071
- if (rawMatrixConfig.base_scenario && !path68.isAbsolute(rawMatrixConfig.base_scenario)) {
299072
- rawMatrixConfig.base_scenario = path68.resolve(configDir, rawMatrixConfig.base_scenario);
298717
+ if (rawMatrixConfig.base_scenario && !path66.isAbsolute(rawMatrixConfig.base_scenario)) {
298718
+ rawMatrixConfig.base_scenario = path66.resolve(configDir, rawMatrixConfig.base_scenario);
299073
298719
  }
299074
- logger57.info("\uD83D\uDD0D Validating matrix configuration...");
298720
+ logger53.info("\uD83D\uDD0D Validating matrix configuration...");
299075
298721
  const validationResult = validateMatrixConfig2(rawMatrixConfig);
299076
298722
  if (!validationResult.success) {
299077
- logger57.error("\u274C Matrix configuration validation failed:");
298723
+ logger53.error("\u274C Matrix configuration validation failed:");
299078
298724
  const errors = validationResult.error.format();
299079
- const formatErrors = (obj, path69 = "") => {
298725
+ const formatErrors = (obj, path67 = "") => {
299080
298726
  if (obj._errors && obj._errors.length > 0) {
299081
298727
  obj._errors.forEach((error2) => {
299082
- logger57.error(` ${path69}: ${error2}`);
298728
+ logger53.error(` ${path67}: ${error2}`);
299083
298729
  });
299084
298730
  }
299085
298731
  Object.keys(obj).forEach((key) => {
299086
298732
  if (key !== "_errors" && typeof obj[key] === "object") {
299087
- const newPath = path69 ? `${path69}.${key}` : key;
298733
+ const newPath = path67 ? `${path67}.${key}` : key;
299088
298734
  formatErrors(obj[key], newPath);
299089
298735
  }
299090
298736
  });
299091
298737
  };
299092
298738
  formatErrors(errors);
299093
- logger57.info("\uD83D\uDCA1 Please fix the configuration errors and try again.");
299094
- logger57.info("\uD83D\uDCD6 See the matrix testing documentation for examples and guidance.");
298739
+ logger53.info("\uD83D\uDCA1 Please fix the configuration errors and try again.");
298740
+ logger53.info("\uD83D\uDCD6 See the matrix testing documentation for examples and guidance.");
299095
298741
  process.exit(1);
299096
298742
  }
299097
298743
  const matrixConfig = validationResult.data;
299098
- logger57.info("\u2705 Matrix configuration is valid!");
298744
+ logger53.info("\u2705 Matrix configuration is valid!");
299099
298745
  const totalCombinations = calculateTotalCombinations2(matrixConfig);
299100
298746
  const totalRuns = calculateTotalRuns2(matrixConfig);
299101
- logger57.info(`
298747
+ logger53.info(`
299102
298748
  \uD83D\uDCCA Matrix Analysis:`);
299103
- logger57.info(` Name: ${matrixConfig.name}`);
298749
+ logger53.info(` Name: ${matrixConfig.name}`);
299104
298750
  if (matrixConfig.description) {
299105
- logger57.info(` Description: ${matrixConfig.description}`);
299106
- }
299107
- logger57.info(` Base Scenario: ${matrixConfig.base_scenario}`);
299108
- logger57.info(` Runs per combination: ${matrixConfig.runs_per_combination}`);
299109
- logger57.info(` Matrix axes: ${matrixConfig.matrix.length}`);
299110
- logger57.info(` Total combinations: ${totalCombinations}`);
299111
- logger57.info(` Total test runs: ${totalRuns}`);
299112
- logger57.info(`
298751
+ logger53.info(` Description: ${matrixConfig.description}`);
298752
+ }
298753
+ logger53.info(` Base Scenario: ${matrixConfig.base_scenario}`);
298754
+ logger53.info(` Runs per combination: ${matrixConfig.runs_per_combination}`);
298755
+ logger53.info(` Matrix axes: ${matrixConfig.matrix.length}`);
298756
+ logger53.info(` Total combinations: ${totalCombinations}`);
298757
+ logger53.info(` Total test runs: ${totalRuns}`);
298758
+ logger53.info(`
299113
298759
  \uD83C\uDFAF Matrix Structure:`);
299114
298760
  matrixConfig.matrix.forEach((axis, index) => {
299115
- logger57.info(` Axis ${index + 1}: ${axis.parameter}`);
299116
- logger57.info(` Values: [${axis.values.map((v2) => JSON.stringify(v2)).join(", ")}]`);
299117
- logger57.info(` Count: ${axis.values.length}`);
298761
+ logger53.info(` Axis ${index + 1}: ${axis.parameter}`);
298762
+ logger53.info(` Values: [${axis.values.map((v2) => JSON.stringify(v2)).join(", ")}]`);
298763
+ logger53.info(` Count: ${axis.values.length}`);
299118
298764
  });
299119
298765
  const baseScenarioPath = matrixConfig.base_scenario;
299120
- if (!fs42.existsSync(baseScenarioPath)) {
299121
- logger57.error(`
298766
+ if (!fs41.existsSync(baseScenarioPath)) {
298767
+ logger53.error(`
299122
298768
  \u274C Error: Base scenario file not found at '${baseScenarioPath}'`);
299123
- logger57.info("\uD83D\uDCA1 Make sure the base_scenario path in your matrix config is correct.");
298769
+ logger53.info("\uD83D\uDCA1 Make sure the base_scenario path in your matrix config is correct.");
299124
298770
  process.exit(1);
299125
298771
  }
299126
- logger57.info(`\u2705 Base scenario file found: ${baseScenarioPath}`);
298772
+ logger53.info(`\u2705 Base scenario file found: ${baseScenarioPath}`);
299127
298773
  let baseScenario;
299128
298774
  try {
299129
- const baseScenarioContents = fs42.readFileSync(baseScenarioPath, "utf8");
298775
+ const baseScenarioContents = fs41.readFileSync(baseScenarioPath, "utf8");
299130
298776
  baseScenario = load2(baseScenarioContents);
299131
298777
  const baseValidationResult = ScenarioSchema.safeParse(baseScenario);
299132
298778
  if (!baseValidationResult.success) {
299133
- logger57.error(`
298779
+ logger53.error(`
299134
298780
  \u274C Error: Base scenario file is invalid:`);
299135
- logger57.error(JSON.stringify(baseValidationResult.error.format(), null, 2));
298781
+ logger53.error(JSON.stringify(baseValidationResult.error.format(), null, 2));
299136
298782
  process.exit(1);
299137
298783
  }
299138
- logger57.info(`\u2705 Base scenario is valid`);
298784
+ logger53.info(`\u2705 Base scenario is valid`);
299139
298785
  } catch (yamlError) {
299140
- logger57.error(`
298786
+ logger53.error(`
299141
298787
  \u274C Error: Failed to parse base scenario YAML file:`);
299142
- logger57.error(yamlError instanceof Error ? yamlError.message : String(yamlError));
298788
+ logger53.error(yamlError instanceof Error ? yamlError.message : String(yamlError));
299143
298789
  process.exit(1);
299144
298790
  }
299145
- logger57.info(`\uD83D\uDD0D Validating matrix parameter paths...`);
298791
+ logger53.info(`\uD83D\uDD0D Validating matrix parameter paths...`);
299146
298792
  const pathValidation = validateMatrixParameterPaths2(baseScenario, matrixConfig.matrix);
299147
298793
  if (!pathValidation.valid) {
299148
- logger57.error(`
298794
+ logger53.error(`
299149
298795
  \u274C Error: Invalid parameter paths in matrix configuration:`);
299150
298796
  pathValidation.invalidPaths.forEach((invalidPath) => {
299151
- logger57.error(` - ${invalidPath}`);
298797
+ logger53.error(` - ${invalidPath}`);
299152
298798
  });
299153
- logger57.info("\uD83D\uDCA1 Make sure all parameter paths exist in your base scenario.");
299154
- logger57.info("\uD83D\uDCD6 Check the matrix testing documentation for parameter path examples.");
298799
+ logger53.info("\uD83D\uDCA1 Make sure all parameter paths exist in your base scenario.");
298800
+ logger53.info("\uD83D\uDCD6 Check the matrix testing documentation for parameter path examples.");
299155
298801
  process.exit(1);
299156
298802
  }
299157
- logger57.info(`\u2705 All matrix parameter paths are valid`);
298803
+ logger53.info(`\u2705 All matrix parameter paths are valid`);
299158
298804
  const combinations = generateMatrixCombinations2(matrixConfig);
299159
298805
  if (options.verbose || options.dryRun) {
299160
- logger57.info(`
298806
+ logger53.info(`
299161
298807
  \uD83D\uDD00 Matrix Combinations:`);
299162
298808
  combinations.forEach((combo, index) => {
299163
- logger57.info(` ${index + 1}. ${combo.id}: ${JSON.stringify(combo.parameters, null, 0)}`);
298809
+ logger53.info(` ${index + 1}. ${combo.id}: ${JSON.stringify(combo.parameters, null, 0)}`);
299164
298810
  });
299165
298811
  if (combinations.length > 0 && options.verbose) {
299166
- logger57.info(`
298812
+ logger53.info(`
299167
298813
  \uD83D\uDEE0\uFE0F Parameter Override Preview:`);
299168
298814
  try {
299169
298815
  const firstCombination = combinations[0];
299170
298816
  const overrides = combinationToOverrides2(firstCombination.parameters);
299171
- logger57.info(` \uD83D\uDCCB Example: ${firstCombination.id}`);
299172
- logger57.info(` \uD83D\uDCCA Metadata: ${firstCombination.metadata.combinationIndex + 1} of ${firstCombination.metadata.totalCombinations}`);
299173
- logger57.info(` \uD83D\uDCDD Original scenario name: "${baseScenario.name}"`);
299174
- logger57.info(` \uD83D\uDCDD Modified scenario ready for execution`);
299175
- logger57.info(` \uD83D\uDCDD Parameters applied:`);
298817
+ logger53.info(` \uD83D\uDCCB Example: ${firstCombination.id}`);
298818
+ logger53.info(` \uD83D\uDCCA Metadata: ${firstCombination.metadata.combinationIndex + 1} of ${firstCombination.metadata.totalCombinations}`);
298819
+ logger53.info(` \uD83D\uDCDD Original scenario name: "${baseScenario.name}"`);
298820
+ logger53.info(` \uD83D\uDCDD Modified scenario ready for execution`);
298821
+ logger53.info(` \uD83D\uDCDD Parameters applied:`);
299176
298822
  overrides.forEach((override) => {
299177
- logger57.info(` \uD83D\uDD27 ${override.path}: ${JSON.stringify(override.value)}`);
298823
+ logger53.info(` \uD83D\uDD27 ${override.path}: ${JSON.stringify(override.value)}`);
299178
298824
  });
299179
- logger57.info(` \uD83D\uDCDD This combination will run ${matrixConfig.runs_per_combination} time(s)`);
298825
+ logger53.info(` \uD83D\uDCDD This combination will run ${matrixConfig.runs_per_combination} time(s)`);
299180
298826
  } catch (error2) {
299181
- logger57.warn(` \u26A0\uFE0F Could not generate override preview: ${error2 instanceof Error ? error2.message : String(error2)}`);
298827
+ logger53.warn(` \u26A0\uFE0F Could not generate override preview: ${error2 instanceof Error ? error2.message : String(error2)}`);
299182
298828
  }
299183
298829
  }
299184
298830
  }
299185
298831
  let filteredCombinations = combinations;
299186
298832
  if (options.filter) {
299187
- logger57.info(`
298833
+ logger53.info(`
299188
298834
  \uD83D\uDD0D Applying filter: ${options.filter}`);
299189
298835
  filteredCombinations = filterCombinations2(combinations, options.filter);
299190
- logger57.info(` Filtered to ${filteredCombinations.length} combinations`);
298836
+ logger53.info(` Filtered to ${filteredCombinations.length} combinations`);
299191
298837
  }
299192
298838
  if (totalRuns > 50) {
299193
- logger57.info(`
298839
+ logger53.info(`
299194
298840
  \u26A0\uFE0F Warning: This matrix will execute ${totalRuns} total test runs.`);
299195
- logger57.info(" This may take a significant amount of time and resources.");
299196
- logger57.info(" Consider using --filter to reduce the scope or increasing --parallel for faster execution.");
298841
+ logger53.info(" This may take a significant amount of time and resources.");
298842
+ logger53.info(" Consider using --filter to reduce the scope or increasing --parallel for faster execution.");
299197
298843
  }
299198
298844
  if (options.dryRun) {
299199
- logger57.info(`
298845
+ logger53.info(`
299200
298846
  \uD83D\uDD0D Dry Run Complete - Matrix Analysis Only`);
299201
- logger57.info("\u2728 Matrix configuration is valid and ready for execution.");
299202
- logger57.info("\uD83D\uDCDD To execute the matrix, run the same command without --dry-run");
298847
+ logger53.info("\u2728 Matrix configuration is valid and ready for execution.");
298848
+ logger53.info("\uD83D\uDCDD To execute the matrix, run the same command without --dry-run");
299203
298849
  if (!isShuttingDown) {
299204
298850
  const summary = processManager2.getSummary();
299205
298851
  if (summary.total > 0) {
299206
- logger57.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after dry-run...`);
298852
+ logger53.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after dry-run...`);
299207
298853
  await processManager2.terminateAllProcesses();
299208
298854
  }
299209
298855
  }
299210
298856
  process.exit(0);
299211
298857
  } else {
299212
298858
  const executionStats = calculateExecutionStats2(filteredCombinations, matrixConfig.runs_per_combination);
299213
- logger57.info(`
298859
+ logger53.info(`
299214
298860
  \uD83D\uDE80 Matrix Execution Plan:`);
299215
- logger57.info(` Parallel execution: ${options.parallel} concurrent runs`);
299216
- logger57.info(` Total combinations to execute: ${executionStats.totalCombinations}`);
299217
- logger57.info(` Total runs: ${executionStats.totalRuns}`);
299218
- logger57.info(` Estimated duration: ${formatDuration2(executionStats.estimatedDuration.realistic)} (realistic)`);
299219
- logger57.info(` Duration range: ${formatDuration2(executionStats.estimatedDuration.optimistic)} - ${formatDuration2(executionStats.estimatedDuration.pessimistic)}`);
299220
- logger57.info(`
298861
+ logger53.info(` Parallel execution: ${options.parallel} concurrent runs`);
298862
+ logger53.info(` Total combinations to execute: ${executionStats.totalCombinations}`);
298863
+ logger53.info(` Total runs: ${executionStats.totalRuns}`);
298864
+ logger53.info(` Estimated duration: ${formatDuration2(executionStats.estimatedDuration.realistic)} (realistic)`);
298865
+ logger53.info(` Duration range: ${formatDuration2(executionStats.estimatedDuration.optimistic)} - ${formatDuration2(executionStats.estimatedDuration.pessimistic)}`);
298866
+ logger53.info(`
299221
298867
  \u2705 Matrix Ready for Execution:`);
299222
- logger57.info(" \uD83C\uDFAF Matrix configuration: \u2705 Valid");
299223
- logger57.info(" \uD83C\uDFAF Parameter combinations: \u2705 Generated");
299224
- logger57.info(" \uD83C\uDFAF Execution context: \u2705 Prepared");
299225
- logger57.info(" \uD83C\uDFAF Base scenario: \u2705 Validated");
299226
- logger57.info("\uD83D\uDD27 [DEBUG] About to import matrix-orchestrator...");
298868
+ logger53.info(" \uD83C\uDFAF Matrix configuration: \u2705 Valid");
298869
+ logger53.info(" \uD83C\uDFAF Parameter combinations: \u2705 Generated");
298870
+ logger53.info(" \uD83C\uDFAF Execution context: \u2705 Prepared");
298871
+ logger53.info(" \uD83C\uDFAF Base scenario: \u2705 Validated");
298872
+ logger53.info("\uD83D\uDD27 [DEBUG] About to import matrix-orchestrator...");
299227
298873
  const { executeMatrixRuns: executeMatrixRuns2 } = await Promise.resolve().then(() => (init_matrix_orchestrator(), exports_matrix_orchestrator));
299228
- logger57.info("\uD83D\uDD27 [DEBUG] Successfully imported matrix-orchestrator");
299229
- logger57.info(`
298874
+ logger53.info("\uD83D\uDD27 [DEBUG] Successfully imported matrix-orchestrator");
298875
+ logger53.info(`
299230
298876
  \uD83D\uDE80 Starting Matrix Execution...`);
299231
- const logsDir = path68.join(__dirname, "_logs_");
298877
+ const logsDir = path66.join(__dirname, "_logs_");
299232
298878
  const matrixRunId = generateRunFilename(1);
299233
- const outputDir = path68.join(logsDir, matrixRunId.replace("run-", "matrix-"));
299234
- logger57.info("\uD83D\uDD27 [DEBUG] About to call executeMatrixRuns...");
298879
+ const outputDir = path66.join(logsDir, matrixRunId.replace("run-", "matrix-"));
298880
+ logger53.info("\uD83D\uDD27 [DEBUG] About to call executeMatrixRuns...");
299235
298881
  const results = await executeMatrixRuns2(matrixConfig, filteredCombinations, {
299236
298882
  outputDir,
299237
298883
  maxParallel: parseInt(options.parallel, 10),
@@ -299240,54 +298886,54 @@ var scenario = new Command().name("scenario").description("Manage and execute El
299240
298886
  verbose: options.verbose,
299241
298887
  onProgress: (message, eventType, _data) => {
299242
298888
  if (options.verbose || eventType === "MATRIX_STARTED" || eventType === "COMBINATION_COMPLETED" || eventType === "MATRIX_COMPLETED") {
299243
- logger57.info(`\uD83D\uDD04 ${message}`);
298889
+ logger53.info(`\uD83D\uDD04 ${message}`);
299244
298890
  }
299245
298891
  },
299246
298892
  onCombinationComplete: (summary) => {
299247
- logger57.info(`\u2705 Combination ${summary.combinationId} completed: ${summary.successfulRuns}/${summary.totalRuns} successful (${(summary.successRate * 100).toFixed(1)}%)`);
298893
+ logger53.info(`\u2705 Combination ${summary.combinationId} completed: ${summary.successfulRuns}/${summary.totalRuns} successful (${(summary.successRate * 100).toFixed(1)}%)`);
299248
298894
  },
299249
298895
  onResourceWarning: (alert) => {
299250
- logger57.warn(`\u26A0\uFE0F Resource ${alert.resource} at ${alert.currentUsage.toFixed(1)}%: ${alert.message}`);
298896
+ logger53.warn(`\u26A0\uFE0F Resource ${alert.resource} at ${alert.currentUsage.toFixed(1)}%: ${alert.message}`);
299251
298897
  if (alert.recommendation) {
299252
- logger57.info(`\uD83D\uDCA1 Recommendation: ${alert.recommendation}`);
298898
+ logger53.info(`\uD83D\uDCA1 Recommendation: ${alert.recommendation}`);
299253
298899
  }
299254
298900
  }
299255
298901
  });
299256
- logger57.info("\uD83D\uDD27 [DEBUG] executeMatrixRuns completed successfully");
298902
+ logger53.info("\uD83D\uDD27 [DEBUG] executeMatrixRuns completed successfully");
299257
298903
  const successfulRuns = results.filter((r2) => r2.success).length;
299258
298904
  const failedRuns = results.length - successfulRuns;
299259
298905
  const successRate = results.length > 0 ? successfulRuns / results.length * 100 : 0;
299260
- logger57.info(`
298906
+ logger53.info(`
299261
298907
  \uD83C\uDF89 Matrix Execution Complete!`);
299262
- logger57.info(`\uD83D\uDCCA Results Summary:`);
299263
- logger57.info(` Total runs: ${results.length}`);
299264
- logger57.info(` Successful: ${successfulRuns}`);
299265
- logger57.info(` Failed: ${failedRuns}`);
299266
- logger57.info(` Success rate: ${successRate.toFixed(1)}%`);
299267
- logger57.info(`\uD83D\uDCC1 Results saved to: ${outputDir}`);
298908
+ logger53.info(`\uD83D\uDCCA Results Summary:`);
298909
+ logger53.info(` Total runs: ${results.length}`);
298910
+ logger53.info(` Successful: ${successfulRuns}`);
298911
+ logger53.info(` Failed: ${failedRuns}`);
298912
+ logger53.info(` Success rate: ${successRate.toFixed(1)}%`);
298913
+ logger53.info(`\uD83D\uDCC1 Results saved to: ${outputDir}`);
299268
298914
  if (!isShuttingDown) {
299269
298915
  const summary = processManager2.getSummary();
299270
298916
  if (summary.total > 0) {
299271
- logger57.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after completion...`);
298917
+ logger53.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after completion...`);
299272
298918
  await processManager2.terminateAllProcesses();
299273
- logger57.info(`\uD83D\uDD27 [Matrix] Process cleanup completed`);
298919
+ logger53.info(`\uD83D\uDD27 [Matrix] Process cleanup completed`);
299274
298920
  }
299275
298921
  }
299276
298922
  process.exit(failedRuns === 0 ? 0 : 1);
299277
298923
  }
299278
298924
  } catch (error2) {
299279
- logger57.error("\u274C An error occurred during matrix analysis:", error2 instanceof Error ? error2.message : String(error2));
298925
+ logger53.error("\u274C An error occurred during matrix analysis:", error2 instanceof Error ? error2.message : String(error2));
299280
298926
  if (options.verbose && error2 instanceof Error && error2.stack) {
299281
- logger57.error(`Stack trace: ${error2.stack}`);
298927
+ logger53.error(`Stack trace: ${error2.stack}`);
299282
298928
  }
299283
298929
  if (!isShuttingDown) {
299284
298930
  const summary = processManager2.getSummary();
299285
298931
  if (summary.total > 0) {
299286
- logger57.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after error...`);
298932
+ logger53.info(`\uD83D\uDD27 [Matrix] Cleaning up ${summary.total} processes after error...`);
299287
298933
  await processManager2.terminateAllProcesses();
299288
298934
  }
299289
298935
  }
299290
- logger57.info("\uD83D\uDCA1 Use --verbose for more detailed error information.");
298936
+ logger53.info("\uD83D\uDCA1 Use --verbose for more detailed error information.");
299291
298937
  process.exit(1);
299292
298938
  }
299293
298939
  }));
@@ -299308,19 +298954,19 @@ var shutdownState = {
299308
298954
  };
299309
298955
  async function gracefulShutdown(signal) {
299310
298956
  if (!shutdownState.tryInitiateShutdown()) {
299311
- logger57.debug(`Ignoring ${signal} - shutdown already in progress`);
298957
+ logger53.debug(`Ignoring ${signal} - shutdown already in progress`);
299312
298958
  return;
299313
298959
  }
299314
- logger57.info(`Received ${signal}, shutting down gracefully...`);
298960
+ logger53.info(`Received ${signal}, shutting down gracefully...`);
299315
298961
  try {
299316
298962
  const serverWasStopped = await stopServer();
299317
298963
  if (serverWasStopped) {
299318
- logger57.info("Server stopped successfully");
298964
+ logger53.info("Server stopped successfully");
299319
298965
  }
299320
298966
  } catch (error2) {
299321
298967
  const errorMessage = error2 instanceof Error ? error2.message : String(error2);
299322
- logger57.error(`Error stopping server: ${errorMessage}`);
299323
- logger57.debug({ error: error2 }, "Full error details:");
298968
+ logger53.error(`Error stopping server: ${errorMessage}`);
298969
+ logger53.debug({ error: error2 }, "Full error details:");
299324
298970
  }
299325
298971
  const exitCode = signal === "SIGINT" ? 130 : signal === "SIGTERM" ? 143 : 0;
299326
298972
  process.exit(exitCode);
@@ -299354,9 +299000,9 @@ async function main2() {
299354
299000
  await program2.parseAsync();
299355
299001
  }
299356
299002
  main2().catch((error2) => {
299357
- logger57.error({ error: error2 }, "An error occurred:");
299003
+ logger53.error({ error: error2 }, "An error occurred:");
299358
299004
  process.exit(1);
299359
299005
  });
299360
299006
 
299361
- //# debugId=D468BE8B9AB82DC564756E2164756E21
299007
+ //# debugId=88B53409D97677C264756E2164756E21
299362
299008
  //# sourceMappingURL=index.js.map