@elizaos/app-core 2.0.3-beta.3 → 2.0.3-beta.5

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 (95) 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/package.json +10 -10
  21. package/platforms/electrobun/remotes/local-model/README.md +2 -5
  22. package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +0 -16
  23. package/platforms/electrobun/remotes/local-model/src/dev/phase8-smoke.ts +0 -2
  24. package/platforms/electrobun/scripts/smoke-test.sh +8 -2
  25. package/platforms/electrobun/scripts/stage-macos-release-artifacts.sh +8 -2
  26. package/platforms/electrobun/src/bridge/electrobun-boot-config.ts +8 -0
  27. package/platforms/electrobun/src/bridge/electrobun-crypto-ready.ts +5 -1
  28. package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +5 -11
  29. package/platforms/electrobun/src/preload.js +1 -1
  30. package/platforms/ios/App/App/Base.lproj/Main.storyboard +1 -1
  31. package/platforms/ios/App/App/ElizaBridgeViewController.swift +22 -0
  32. package/platforms/ios/App/App/ElizaStartupTrace.swift +12 -0
  33. package/platforms/ios/App/App.xcodeproj/project.pbxproj +8 -0
  34. package/runtime/eliza.d.ts.map +1 -1
  35. package/runtime/eliza.js +18 -0
  36. package/runtime/voice-warmup.d.ts +4 -4
  37. package/runtime/voice-warmup.d.ts.map +1 -1
  38. package/runtime/voice-warmup.js +4 -4
  39. package/scripts/aosp/compile-libllama-paths.mjs +110 -0
  40. package/scripts/aosp/compile-libllama.mjs +35 -106
  41. package/scripts/aosp/compile-libllama.test.mjs +18 -2
  42. package/scripts/assert-required-bundled-packages.test.ts +24 -2
  43. package/scripts/build-bundled-agent-skills-artifact.mjs +32 -8
  44. package/scripts/build-bundled-orchestrator-artifact.mjs +34 -12
  45. package/scripts/build-llama-cpp-mtp.mjs +27 -3
  46. package/scripts/build-patched-electrobun-cli.mjs +30 -2
  47. package/scripts/bun-riscv64/bun-version.json +1 -1
  48. package/scripts/bun-riscv64/validate.sh +21 -8
  49. package/scripts/check-real-local-reset.ts +13 -1
  50. package/scripts/check-sms-gateway-completion-audit.mjs +96 -31
  51. package/scripts/check-sms-gateway-readiness.mjs +54 -17
  52. package/scripts/clean-repo.mjs +21 -3
  53. package/scripts/copy-runtime-node-modules.ts +68 -63
  54. package/scripts/desktop-build.mjs +46 -5
  55. package/scripts/dev-platform-no-install.test.mjs +19 -0
  56. package/scripts/dev-platform.mjs +6 -2
  57. package/scripts/disable-local-eliza-workspace.mjs +23 -1
  58. package/scripts/docker-ci-smoke.sh +6 -5
  59. package/scripts/ensure-avatars.mjs +18 -5
  60. package/scripts/ensure-bundled-workspaces.mjs +4 -15
  61. package/scripts/ensure-type-package-aliases.mjs +47 -3
  62. package/scripts/ffi-stub/Makefile +5 -2
  63. package/scripts/ios-xcframework/build-xcframework.mjs +22 -11
  64. package/scripts/ios-xcframework/run-physical-device-smoke.mjs +99 -6
  65. package/scripts/ios-xcframework/runtime-symbol-shim.c +560 -105
  66. package/scripts/lib/agent-source-watcher.test.mjs +24 -4
  67. package/scripts/lib/apple-entitlement-audit.test.mjs +19 -2
  68. package/scripts/lib/artifact-staleness.test.mts +18 -1
  69. package/scripts/lib/patch-bun-exports.mjs +20 -2
  70. package/scripts/lib/patch-bun-exports.test.mjs +108 -4
  71. package/scripts/lib/renderer-build-manifest.test.mts +18 -1
  72. package/scripts/lib/stage-android-agent.mjs +16 -3
  73. package/scripts/lib/verify-ondevice-artifact.test.mts +18 -1
  74. package/scripts/link-docker-local-app-packages.mjs +26 -1
  75. package/scripts/mas-smoke.test.mjs +25 -9
  76. package/scripts/omnivoice-fuse/prepare.mjs +27 -4
  77. package/scripts/package-electrobun-linux.mjs +22 -7
  78. package/scripts/patch-deps.mjs +18 -5
  79. package/scripts/playwright-ui-live-stack.ts +16 -3
  80. package/scripts/playwright-ui-smoke-api-stub.mjs +167 -2
  81. package/scripts/prepare-ios-cocoapods.sh +5 -1
  82. package/scripts/prune-cdn-local-assets.mjs +52 -5
  83. package/scripts/run-mobile-build-android-app-actions.test.mjs +19 -1
  84. package/scripts/run-mobile-build-mtp-staleness.test.mts +20 -4
  85. package/scripts/run-mobile-build.mjs +63 -2
  86. package/scripts/stage-android-agent.test.mjs +19 -1
  87. package/scripts/stage-desktop-fused-lib.mjs +26 -1
  88. package/scripts/sync-desktop-renderer.mjs +53 -12
  89. package/scripts/test-sms-gateway-software.mjs +20 -4
  90. package/cli/command-format.d.ts +0 -2
  91. package/cli/command-format.d.ts.map +0 -1
  92. package/cli/command-format.js +0 -20
  93. package/register-runtime-hooks.d.ts +0 -2
  94. package/register-runtime-hooks.d.ts.map +0 -1
  95. 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) {
@@ -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
- });