@elizaos/app-core 2.0.3-beta.4 → 2.0.3-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/api/i18n-locale-routes.d.ts +7 -0
  2. package/api/i18n-locale-routes.d.ts.map +1 -0
  3. package/api/i18n-locale-routes.js +58 -0
  4. package/api/ios-local-agent-transport.d.ts +3 -0
  5. package/api/ios-local-agent-transport.d.ts.map +1 -1
  6. package/api/ios-local-agent-transport.js +22 -1
  7. package/api/server.d.ts.map +1 -1
  8. package/api/server.js +5 -0
  9. package/benchmark/cerebras-autowire.d.ts.map +1 -1
  10. package/benchmark/cerebras-autowire.js +9 -2
  11. package/package.json +36 -36
  12. package/packaging/debian/rules +1 -1
  13. package/packaging/flatpak/generate-sources.sh +6 -1
  14. package/packaging/snap/snapcraft.yaml +15 -11
  15. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +2 -1
  16. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNativeBridge.java +5 -0
  17. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaStartupTrace.java +28 -0
  18. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +1 -1
  19. package/platforms/android/app/src/main/java/ai/elizaos/app/MainActivity.java +1 -0
  20. package/platforms/electrobun/electrobun.config.ts +31 -1
  21. package/platforms/electrobun/package.json +10 -10
  22. package/platforms/electrobun/remotes/local-model/README.md +2 -5
  23. package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +0 -16
  24. package/platforms/electrobun/remotes/local-model/src/dev/phase8-smoke.ts +0 -2
  25. package/platforms/electrobun/scripts/smoke-test.sh +8 -2
  26. package/platforms/electrobun/scripts/stage-macos-release-artifacts.sh +8 -2
  27. package/platforms/electrobun/scripts/sync-web-assets.mjs +31 -2
  28. package/platforms/electrobun/src/bridge/electrobun-boot-config.ts +8 -0
  29. package/platforms/electrobun/src/bridge/electrobun-crypto-ready.ts +5 -1
  30. package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +5 -11
  31. package/platforms/electrobun/src/preload.js +1 -1
  32. package/platforms/ios/App/App/Base.lproj/Main.storyboard +1 -1
  33. package/platforms/ios/App/App/ElizaBridgeViewController.swift +22 -0
  34. package/platforms/ios/App/App/ElizaStartupTrace.swift +12 -0
  35. package/platforms/ios/App/App.xcodeproj/project.pbxproj +8 -0
  36. package/runtime/eliza.d.ts.map +1 -1
  37. package/runtime/eliza.js +18 -0
  38. package/runtime/voice-warmup.d.ts +4 -4
  39. package/runtime/voice-warmup.d.ts.map +1 -1
  40. package/runtime/voice-warmup.js +4 -4
  41. package/scripts/aosp/compile-libllama.mjs +25 -5
  42. package/scripts/aosp/compile-libllama.test.mjs +17 -1
  43. package/scripts/assert-required-bundled-packages.test.ts +24 -2
  44. package/scripts/benchmark-preflight.mjs +31 -2
  45. package/scripts/build-bundled-agent-skills-artifact.mjs +32 -8
  46. package/scripts/build-bundled-orchestrator-artifact.mjs +34 -12
  47. package/scripts/build-llama-cpp-mtp.mjs +27 -3
  48. package/scripts/build-patched-electrobun-cli.mjs +30 -2
  49. package/scripts/bun-riscv64/bun-version.json +1 -1
  50. package/scripts/bun-riscv64/validate.sh +21 -8
  51. package/scripts/check-real-local-reset.ts +13 -1
  52. package/scripts/check-sms-gateway-completion-audit.mjs +96 -31
  53. package/scripts/check-sms-gateway-readiness.mjs +54 -17
  54. package/scripts/clean-repo.mjs +21 -3
  55. package/scripts/copy-runtime-node-modules.ts +68 -63
  56. package/scripts/desktop-build.mjs +46 -5
  57. package/scripts/dev-platform-no-install.test.mjs +19 -0
  58. package/scripts/dev-platform.mjs +6 -2
  59. package/scripts/disable-local-eliza-workspace.mjs +23 -1
  60. package/scripts/docker-ci-smoke.sh +6 -5
  61. package/scripts/ensure-avatars.mjs +18 -5
  62. package/scripts/ensure-bundled-workspaces.mjs +4 -15
  63. package/scripts/ensure-type-package-aliases.mjs +47 -3
  64. package/scripts/ffi-stub/Makefile +5 -2
  65. package/scripts/ios-xcframework/build-xcframework.mjs +22 -11
  66. package/scripts/ios-xcframework/run-physical-device-smoke.mjs +99 -6
  67. package/scripts/ios-xcframework/runtime-symbol-shim.c +560 -105
  68. package/scripts/lib/agent-source-watcher.test.mjs +24 -4
  69. package/scripts/lib/apple-entitlement-audit.test.mjs +19 -2
  70. package/scripts/lib/artifact-staleness.test.mts +18 -1
  71. package/scripts/lib/patch-bun-exports.mjs +20 -2
  72. package/scripts/lib/patch-bun-exports.test.mjs +108 -4
  73. package/scripts/lib/renderer-build-manifest.test.mts +18 -1
  74. package/scripts/lib/stage-android-agent.mjs +16 -3
  75. package/scripts/lib/verify-ondevice-artifact.test.mts +18 -1
  76. package/scripts/link-docker-local-app-packages.mjs +26 -1
  77. package/scripts/mas-smoke.test.mjs +25 -9
  78. package/scripts/omnivoice-fuse/prepare.mjs +27 -4
  79. package/scripts/package-electrobun-linux.mjs +22 -7
  80. package/scripts/patch-deps.mjs +18 -5
  81. package/scripts/playwright-ui-live-stack.ts +16 -3
  82. package/scripts/playwright-ui-smoke-api-stub.mjs +167 -2
  83. package/scripts/prepare-ios-cocoapods.sh +5 -1
  84. package/scripts/prune-cdn-local-assets.mjs +52 -5
  85. package/scripts/run-mobile-build-android-app-actions.test.mjs +19 -1
  86. package/scripts/run-mobile-build-mtp-staleness.test.mts +20 -4
  87. package/scripts/run-mobile-build.mjs +74 -16
  88. package/scripts/stage-android-agent.test.mjs +19 -1
  89. package/scripts/stage-desktop-fused-lib.mjs +26 -1
  90. package/scripts/sync-desktop-renderer.mjs +53 -12
  91. package/scripts/test-sms-gateway-software.mjs +20 -4
  92. package/cli/command-format.d.ts +0 -2
  93. package/cli/command-format.d.ts.map +0 -1
  94. package/cli/command-format.js +0 -20
  95. package/register-runtime-hooks.d.ts +0 -2
  96. package/register-runtime-hooks.d.ts.map +0 -1
  97. package/register-runtime-hooks.js +0 -19
@@ -199,6 +199,11 @@ const iosBunRuntimePackageRoot = path.join(
199
199
  "native",
200
200
  "bun-runtime",
201
201
  );
202
+ const RM_PATH_RECURSIVE_SCRIPT = path.join(
203
+ packagesRoot,
204
+ "scripts",
205
+ "rm-path-recursive.mjs",
206
+ );
202
207
  const defaultIosBunEngineXcframework = path.join(
203
208
  iosBunRuntimePackageRoot,
204
209
  "artifacts",
@@ -413,6 +418,28 @@ function runCaptureSync(command, args, { cwd = repoRoot, maxBuffer } = {}) {
413
418
  });
414
419
  }
415
420
 
421
+ function rmRecursive(pathToRemove) {
422
+ const result = spawnSync(
423
+ process.execPath,
424
+ [RM_PATH_RECURSIVE_SCRIPT, path.resolve(pathToRemove)],
425
+ {
426
+ cwd: repoRoot,
427
+ encoding: "utf8",
428
+ stdio: ["ignore", "pipe", "pipe"],
429
+ },
430
+ );
431
+ if (result.status !== 0) {
432
+ const reason =
433
+ result.stderr?.trim() ||
434
+ result.stdout?.trim() ||
435
+ result.error?.message ||
436
+ `exit status ${String(result.status)}`;
437
+ throw new Error(
438
+ `[mobile-build] failed to recursively remove ${pathToRemove}: ${reason}`,
439
+ );
440
+ }
441
+ }
442
+
416
443
  function resolveBunExecutable() {
417
444
  if (process.versions.bun) return process.execPath;
418
445
  return resolveExecutable("bun");
@@ -979,6 +1006,40 @@ export function resolveMobileBuildPolicy(platform) {
979
1006
  }
980
1007
 
981
1008
  async function buildWeb(platform) {
1009
+ // Auto-skip the full Vite renderer build when it is NOT explicitly forced and
1010
+ // the existing dist is already up-to-date for this variant/target (#9626).
1011
+ // This reuses the same manifest + staleness checks as the explicit-skip path
1012
+ // below, so the loud-fail-on-stale guarantee is preserved: a stale or
1013
+ // mismatched dist simply does not match here and falls through to a rebuild.
1014
+ // Explicit ELIZA_MOBILE_SKIP_WEB_BUILD=1 keeps its force-reuse semantics below.
1015
+ if (process.env.ELIZA_MOBILE_SKIP_WEB_BUILD !== "1") {
1016
+ const autoDistDir = path.join(appDir, "dist");
1017
+ if (fs.existsSync(path.join(autoDistDir, "index.html"))) {
1018
+ const autoPolicy = resolveMobileBuildPolicy(platform);
1019
+ const autoVariant =
1020
+ process.env.ELIZA_BUILD_VARIANT || autoPolicy.buildVariant;
1021
+ const autoManifest = readRendererBuildManifest(autoDistDir);
1022
+ const variantOk =
1023
+ autoManifest != null &&
1024
+ (autoManifest.variant == null || autoManifest.variant === autoVariant);
1025
+ const targetOk =
1026
+ autoManifest != null &&
1027
+ (autoManifest.capacitorTarget == null ||
1028
+ autoManifest.capacitorTarget === autoPolicy.capacitorTarget);
1029
+ if (
1030
+ autoManifest != null &&
1031
+ variantOk &&
1032
+ targetOk &&
1033
+ !viteRendererBuildNeeded(appDir, repoRoot)
1034
+ ) {
1035
+ console.log(
1036
+ "[mobile-build] Auto-skipping web build: existing dist is up-to-date " +
1037
+ `(buildId=${autoManifest.buildId.slice(0, 12)})`,
1038
+ );
1039
+ return;
1040
+ }
1041
+ }
1042
+ }
982
1043
  if (process.env.ELIZA_MOBILE_SKIP_WEB_BUILD === "1") {
983
1044
  const distDir = path.join(appDir, "dist");
984
1045
  const indexPath = path.join(distDir, "index.html");
@@ -1239,7 +1300,7 @@ function stageIosAgentRuntime({
1239
1300
  }
1240
1301
 
1241
1302
  const targetDir = path.join(iosDir, "App", "public", "agent");
1242
- fs.rmSync(targetDir, { recursive: true, force: true });
1303
+ rmRecursive(targetDir);
1243
1304
  fs.mkdirSync(targetDir, { recursive: true });
1244
1305
  const filesToStage = assetPlan.agentAssets ?? fs.readdirSync(sourceDir);
1245
1306
  for (const file of filesToStage) {
@@ -1286,7 +1347,7 @@ function removeIosLocalExecutionAssets() {
1286
1347
  let removed = 0;
1287
1348
  for (const target of targets) {
1288
1349
  if (!fs.existsSync(target)) continue;
1289
- fs.rmSync(target, { recursive: true, force: true });
1350
+ rmRecursive(target);
1290
1351
  removed += 1;
1291
1352
  }
1292
1353
  if (removed > 0) {
@@ -1408,7 +1469,7 @@ function mirrorCapacitorWebPayloadIntoAndroidDir() {
1408
1469
  fs.realpathSync(syncedAssets) === fs.realpathSync(targetAssets);
1409
1470
  if (hasSyncedPublic && !sameTree) {
1410
1471
  fs.mkdirSync(targetAssets, { recursive: true });
1411
- fs.rmSync(targetPublic, { recursive: true, force: true });
1472
+ rmRecursive(targetPublic);
1412
1473
  fs.cpSync(syncedPublic, targetPublic, { recursive: true });
1413
1474
  for (const cfg of ["capacitor.config.json", "capacitor.plugins.json"]) {
1414
1475
  const src = path.join(syncedAssets, cfg);
@@ -1447,10 +1508,7 @@ function mirrorCapacitorWebPayloadIntoAndroidDir() {
1447
1508
  fs.existsSync(targetAssets)
1448
1509
  ) {
1449
1510
  fs.mkdirSync(targetPublic, { recursive: true });
1450
- fs.rmSync(path.join(targetPublic, "assets"), {
1451
- recursive: true,
1452
- force: true,
1453
- });
1511
+ rmRecursive(path.join(targetPublic, "assets"));
1454
1512
  fs.cpSync(freshWeb, targetPublic, { recursive: true });
1455
1513
  console.log(
1456
1514
  `[mobile-build] Stale-web guard: overlaid fresh ${path.relative(repoRoot, freshWeb)} → ${path.relative(repoRoot, targetPublic)}`,
@@ -2475,7 +2533,7 @@ function removeStaleAndroidJavaSourceRoots(
2475
2533
  shouldRemoveAndroidJavaSourceRoot(candidate, dstJava, protectedRoots) &&
2476
2534
  fs.existsSync(candidate)
2477
2535
  ) {
2478
- fs.rmSync(candidate, { recursive: true, force: true });
2536
+ rmRecursive(candidate);
2479
2537
  }
2480
2538
  }
2481
2539
  }
@@ -2997,7 +3055,7 @@ function overlayAndroid({ includeAospRoleLaunchers = false } = {}) {
2997
3055
  protectedJavaRoots,
2998
3056
  )
2999
3057
  ) {
3000
- fs.rmSync(staleJava, { recursive: true, force: true });
3058
+ rmRecursive(staleJava);
3001
3059
  }
3002
3060
  }
3003
3061
  fs.mkdirSync(dstJava, { recursive: true });
@@ -3074,7 +3132,7 @@ function overlayAndroid({ includeAospRoleLaunchers = false } = {}) {
3074
3132
  path.resolve(srcJava) !== path.resolve(templateJava) &&
3075
3133
  path.resolve(srcJava) !== path.resolve(dstJava)
3076
3134
  ) {
3077
- fs.rmSync(srcJava, { recursive: true, force: true });
3135
+ rmRecursive(srcJava);
3078
3136
  }
3079
3137
  console.log("[mobile-build] Overlaid Android Java sources.");
3080
3138
  }
@@ -5105,7 +5163,7 @@ async function ensureIosLlamaCppVendoredFramework({
5105
5163
  await ensureMtpIosTarget(simulatorTarget);
5106
5164
 
5107
5165
  fs.mkdirSync(xcframeworksDir, { recursive: true });
5108
- fs.rmSync(xcframeworkDir, { recursive: true, force: true });
5166
+ rmRecursive(xcframeworkDir);
5109
5167
  await run("node", [
5110
5168
  IOS_XCFRAMEWORK_BUILD_SCRIPT,
5111
5169
  "--output",
@@ -5136,7 +5194,7 @@ async function ensureIosLlamaCppVendoredFramework({
5136
5194
  "ios",
5137
5195
  `.${path.basename(stale, ".framework")}-stock-archive`,
5138
5196
  );
5139
- fs.rmSync(archived, { recursive: true, force: true });
5197
+ rmRecursive(archived);
5140
5198
  fs.renameSync(stale, archived);
5141
5199
  console.log(
5142
5200
  `[mobile-build] Archived stock npm framework: ${stale} -> ${archived} ` +
@@ -5471,7 +5529,7 @@ function stageIosFullBunEngineForPodspec(framework) {
5471
5529
  console.log(
5472
5530
  `[mobile-build] staging external iOS full Bun engine for CocoaPods: ${resolved} -> ${defaultIosBunEngineXcframework}`,
5473
5531
  );
5474
- fs.rmSync(defaultIosBunEngineXcframework, { recursive: true, force: true });
5532
+ rmRecursive(defaultIosBunEngineXcframework);
5475
5533
  fs.mkdirSync(path.dirname(defaultIosBunEngineXcframework), {
5476
5534
  recursive: true,
5477
5535
  });
@@ -6056,7 +6114,7 @@ export function removeInactiveAndroidJavaSourceRoots(javaRoots, activeRoot) {
6056
6114
  if (resolved === active || seen.has(resolved)) continue;
6057
6115
  seen.add(resolved);
6058
6116
  if (!fs.existsSync(root)) continue;
6059
- fs.rmSync(root, { recursive: true, force: true });
6117
+ rmRecursive(root);
6060
6118
  removed += 1;
6061
6119
  }
6062
6120
  return removed;
@@ -6066,7 +6124,7 @@ function removeCloudNativeArtifacts() {
6066
6124
  const assetsRoot = path.join(androidDir, "app", "src", "main", "assets");
6067
6125
  const stagedAgentAssets = path.join(assetsRoot, "agent");
6068
6126
  if (fs.existsSync(stagedAgentAssets)) {
6069
- fs.rmSync(stagedAgentAssets, { recursive: true, force: true });
6127
+ rmRecursive(stagedAgentAssets);
6070
6128
  console.log(
6071
6129
  "[mobile-build] Removed staged on-device agent runtime under assets/agent/.",
6072
6130
  );
@@ -7417,7 +7475,7 @@ function writeAndroidSystemProvenance(apkPath) {
7417
7475
  );
7418
7476
  }
7419
7477
  } finally {
7420
- fs.rmSync(tmpDir, { recursive: true, force: true });
7478
+ rmRecursive(tmpDir);
7421
7479
  }
7422
7480
  }
7423
7481
 
@@ -1,11 +1,29 @@
1
1
  import assert from "node:assert/strict";
2
+ import { execFileSync } from "node:child_process";
2
3
  import fs from "node:fs";
3
4
  import os from "node:os";
4
5
  import path from "node:path";
5
6
  import test from "node:test";
7
+ import { fileURLToPath } from "node:url";
6
8
 
7
9
  import { __testables } from "./lib/stage-android-agent.mjs";
8
10
 
11
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
12
+ const repoRoot = path.resolve(scriptDir, "..", "..", "..");
13
+ const cleanupHelperScript = path.join(
14
+ repoRoot,
15
+ "packages",
16
+ "scripts",
17
+ "rm-path-recursive.mjs",
18
+ );
19
+
20
+ function removePathRecursive(targetPath) {
21
+ execFileSync(process.execPath, [cleanupHelperScript, targetPath], {
22
+ cwd: repoRoot,
23
+ stdio: "inherit",
24
+ });
25
+ }
26
+
9
27
  function withEnv(values, fn) {
10
28
  const prior = {};
11
29
  for (const key of Object.keys(values)) {
@@ -36,7 +54,7 @@ test("riscv64 Bun artifact path resolves from the ELIZA_BUN_RISCV64_FILE env", (
36
54
  );
37
55
  assert.equal(resolved, artifact);
38
56
  } finally {
39
- fs.rmSync(tmp, { recursive: true, force: true });
57
+ removePathRecursive(tmp);
40
58
  }
41
59
  });
42
60
 
@@ -48,6 +48,12 @@ import { fileURLToPath } from "node:url";
48
48
 
49
49
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
50
50
  const repoRoot = path.resolve(__dirname, "..", "..", "..");
51
+ const cleanupHelperScript = path.join(
52
+ repoRoot,
53
+ "packages",
54
+ "scripts",
55
+ "rm-path-recursive.mjs",
56
+ );
51
57
  const forkSrc = path.join(
52
58
  repoRoot,
53
59
  "plugins/plugin-local-inference/native/llama.cpp",
@@ -67,6 +73,25 @@ function run(cmd, args, opts = {}) {
67
73
  die(`${cmd} exited ${res.status ?? res.signal}`);
68
74
  }
69
75
  }
76
+ function removePathRecursive(targetPath) {
77
+ const res = spawnSync(
78
+ "node",
79
+ [cleanupHelperScript, path.relative(repoRoot, targetPath)],
80
+ {
81
+ cwd: repoRoot,
82
+ encoding: "utf8",
83
+ stdio: ["ignore", "pipe", "pipe"],
84
+ },
85
+ );
86
+ if (res.error) throw res.error;
87
+ if (res.status !== 0) {
88
+ die(
89
+ [`failed to remove ${targetPath}`, res.stdout.trim(), res.stderr.trim()]
90
+ .filter(Boolean)
91
+ .join("\n"),
92
+ );
93
+ }
94
+ }
70
95
  function have(cmd, args = ["--version"]) {
71
96
  try {
72
97
  const res = spawnSync(cmd, args, { stdio: "ignore" });
@@ -261,7 +286,7 @@ const outDir =
261
286
  outOverride || path.join(resolveStateDir(), "local-inference", "lib");
262
287
 
263
288
  if (force && existsSync(buildDir)) {
264
- rmSync(buildDir, { recursive: true, force: true });
289
+ removePathRecursive(buildDir);
265
290
  }
266
291
  mkdirSync(buildDir, { recursive: true });
267
292
  mkdirSync(outDir, { recursive: true });
@@ -1,23 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { spawn, spawnSync } from "node:child_process";
4
- import {
5
- cpSync,
6
- existsSync,
7
- mkdirSync,
8
- rmSync,
9
- statSync,
10
- watch,
11
- } from "node:fs";
4
+ import { cpSync, existsSync, mkdirSync, statSync, watch } from "node:fs";
12
5
  import path from "node:path";
13
6
 
7
+ import { resolveMainAppDir } from "./lib/app-dir.mjs";
14
8
  import { signalSpawnedProcessTree } from "./lib/kill-process-tree.mjs";
9
+ import { resolveRepoRootFromImportMeta } from "./lib/repo-root.mjs";
15
10
 
16
- const ROOT = process.cwd();
11
+ const ROOT = resolveRepoRootFromImportMeta(import.meta.url, {
12
+ fallbackToCwd: true,
13
+ });
17
14
  const ARGS = process.argv.slice(2);
18
15
 
19
- const APP_DIR = path.join(ROOT, "apps", "app");
16
+ const APP_DIR = resolveMainAppDir(ROOT, "app");
20
17
  const DIST_DIR = path.join(APP_DIR, "dist");
18
+ const CLEANUP_HELPER_SCRIPT = resolveCleanupHelperScript();
21
19
  const APP_PATH_ARG =
22
20
  getArgValue("app-path") || process.env.ELIZA_DESKTOP_APP_PATH || null;
23
21
  const RENDERER_PATH_ARG =
@@ -45,6 +43,43 @@ let activeBuildProcess = null;
45
43
 
46
44
  const WATCH_SYNC_DEBOUNCE_MS = 250;
47
45
 
46
+ function resolveCleanupHelperScript() {
47
+ const candidates = [
48
+ path.join(ROOT, "packages", "scripts", "rm-path-recursive.mjs"),
49
+ path.join(ROOT, "eliza", "packages", "scripts", "rm-path-recursive.mjs"),
50
+ ];
51
+ return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];
52
+ }
53
+
54
+ function removePathRecursive(targetPath) {
55
+ if (!existsSync(targetPath)) {
56
+ return;
57
+ }
58
+
59
+ const result = spawnSync(
60
+ "node",
61
+ [CLEANUP_HELPER_SCRIPT, path.relative(ROOT, targetPath)],
62
+ {
63
+ cwd: ROOT,
64
+ encoding: "utf8",
65
+ stdio: "pipe",
66
+ },
67
+ );
68
+
69
+ if (result.error) {
70
+ throw result.error;
71
+ }
72
+ if (result.status !== 0) {
73
+ const output = [result.stdout, result.stderr]
74
+ .filter(Boolean)
75
+ .join("\n")
76
+ .trim();
77
+ throw new Error(
78
+ `cleanup helper failed for ${targetPath}${output ? `:\n${output}` : ""}`,
79
+ );
80
+ }
81
+ }
82
+
48
83
  function fail(message, code = 1) {
49
84
  console.error(`[eliza-ui-sync] ${message}`);
50
85
  process.exit(code);
@@ -247,7 +282,7 @@ function syncRendererBundle() {
247
282
  // Renderer path will be created below.
248
283
  }
249
284
 
250
- rmSync(TARGET_RENDERER, { recursive: true, force: true });
285
+ removePathRecursive(TARGET_RENDERER);
251
286
  mkdirSync(TARGET_RENDERER, { recursive: true });
252
287
  cpSync(DIST_DIR, TARGET_RENDERER, { recursive: true, force: true });
253
288
  console.log(`[eliza-ui-sync] Synced ${DIST_DIR} -> ${TARGET_RENDERER}`);
@@ -301,7 +336,13 @@ function main() {
301
336
  return;
302
337
  }
303
338
 
304
- runBuild();
339
+ if (SKIP_BUILD) {
340
+ console.log(
341
+ "[eliza-ui-sync] --skip-build set: syncing existing dist folder only",
342
+ );
343
+ } else {
344
+ runBuild();
345
+ }
305
346
  syncRendererBundle();
306
347
  }
307
348
 
@@ -6,7 +6,7 @@
6
6
  * operator runs do not fail on coverage reporter output or macOS file limits.
7
7
  * It does not send SMS and does not mutate external systems.
8
8
  */
9
- import { spawnSync } from "node:child_process";
9
+ import { execFileSync, spawnSync } from "node:child_process";
10
10
  import fs from "node:fs";
11
11
  import path from "node:path";
12
12
  import { fileURLToPath } from "node:url";
@@ -14,11 +14,25 @@ import { fileURLToPath } from "node:url";
14
14
  const scriptDir = path.dirname(fileURLToPath(import.meta.url));
15
15
  const repoRoot = path.resolve(scriptDir, "..", "..", "..");
16
16
  const packagesRoot = path.join(repoRoot, "packages");
17
+ const cleanupHelperScript = path.join(
18
+ repoRoot,
19
+ "packages",
20
+ "scripts",
21
+ "rm-path-recursive.mjs",
22
+ );
23
+
24
+ function removePathRecursive(targetPath) {
25
+ execFileSync(process.execPath, [cleanupHelperScript, targetPath], {
26
+ cwd: repoRoot,
27
+ stdio: "inherit",
28
+ });
29
+ }
17
30
 
18
31
  const groups = [
19
32
  {
20
33
  key: "routing-contracts",
21
- label: "known-owner priority, friend-contact routing, and contact recording",
34
+ label:
35
+ "known-owner priority, friend-contact routing, and contact recording",
22
36
  files: [
23
37
  "cloud-shared/src/lib/services/phone-gateway-devices.test.ts",
24
38
  "cloud-shared/src/lib/services/agent-gateway-router.test.ts",
@@ -73,7 +87,9 @@ function runGroup(group) {
73
87
  const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
74
88
  const status = result.status ?? (result.error ? 1 : 0);
75
89
  if (status === 0) {
76
- const passLine = output.match(/\d+ pass\s*\n0 fail/)?.[0]?.replace(/\s+/g, " ");
90
+ const passLine = output
91
+ .match(/\d+ pass\s*\n0 fail/)?.[0]
92
+ ?.replace(/\s+/g, " ");
77
93
  console.log(
78
94
  `[sms-gateway-software] PASS ${group.key}: ${group.label}${passLine ? ` (${passLine})` : ""}`,
79
95
  );
@@ -83,7 +99,7 @@ function runGroup(group) {
83
99
  console.error(output.trim());
84
100
  return false;
85
101
  } finally {
86
- fs.rmSync(cwd, { recursive: true, force: true });
102
+ removePathRecursive(cwd);
87
103
  }
88
104
  }
89
105
 
@@ -1,2 +0,0 @@
1
- export declare function formatCliCommand(command: string, env?: Record<string, string | undefined>): string;
2
- //# sourceMappingURL=command-format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-format.d.ts","sourceRoot":"","sources":["../../../../../src/cli/command-format.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAGrC,GACA,MAAM,CAoBR"}
@@ -1,20 +0,0 @@
1
- import { CLI_PREFIX_RE, replaceCliName, resolveCliName } from "./cli-name.js";
2
- import { normalizeProfileName } from "./profile-utils.js";
3
- const PROFILE_FLAG_RE = /(?:^|\s)--profile(?:\s|=|$)/;
4
- const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/;
5
- export function formatCliCommand(command, env = process.env) {
6
- const cliName = resolveCliName();
7
- const normalizedCommand = replaceCliName(command, cliName);
8
- const profile = normalizeProfileName(env.ELIZA_PROFILE);
9
- if (!profile) {
10
- return normalizedCommand;
11
- }
12
- if (!CLI_PREFIX_RE.test(normalizedCommand)) {
13
- return normalizedCommand;
14
- }
15
- if (PROFILE_FLAG_RE.test(normalizedCommand) ||
16
- DEV_FLAG_RE.test(normalizedCommand)) {
17
- return normalizedCommand;
18
- }
19
- return normalizedCommand.replace(CLI_PREFIX_RE, (match) => `${match} --profile ${profile}`);
20
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=register-runtime-hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register-runtime-hooks.d.ts","sourceRoot":"","sources":["../../../../src/register-runtime-hooks.ts"],"names":[],"mappings":""}
@@ -1,19 +0,0 @@
1
- import { registerAppCoreRuntimeHooks } from "./runtime/app-core-runtime-hooks.js";
2
- import { hydrateWalletKeysFromNodePlatformSecureStore } from "./security/hydrate-wallet-keys-from-platform-store.js";
3
- import { applyAccountPoolApiCredentials, getDefaultAccountPool, startAccountPoolKeepAlive, } from "./services/account-pool.js";
4
- import { runVaultBootstrap } from "./services/vault-bootstrap.js";
5
- import { sharedVault } from "./services/vault-mirror.js";
6
- // Lazy wrapper: avoids static @elizaos/plugin-local-inference import at this boundary.
7
- async function ensureLocalInferenceHandler(runtime) {
8
- const { ensureLocalInferenceHandler: _fn } = await import("@elizaos/plugin-local-inference/runtime");
9
- return _fn(runtime);
10
- }
11
- registerAppCoreRuntimeHooks({
12
- applyAccountPoolApiCredentials,
13
- ensureLocalInferenceHandler,
14
- getDefaultAccountPool,
15
- hydrateWalletKeysFromNodePlatformSecureStore,
16
- runVaultBootstrap,
17
- sharedVault,
18
- startAccountPoolKeepAlive,
19
- });