@elizaos/app-core 2.0.0-beta.2 → 2.0.11-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 (1534) hide show
  1. package/agent-bridge.d.ts +27 -0
  2. package/agent-bridge.d.ts.map +1 -0
  3. package/agent-bridge.js +26 -0
  4. package/api/__tests__/sandbox-test-helpers.js +1 -1
  5. package/api/auth/audit.js +1 -1
  6. package/api/auth/auth-context.js +1 -1
  7. package/api/auth/bootstrap-token.js +2 -2
  8. package/api/auth/index.d.ts +9 -10
  9. package/api/auth/index.d.ts.map +1 -1
  10. package/api/auth/index.js +9 -10
  11. package/api/auth/passwords.js +2 -2
  12. package/api/auth/sensitive-rate-limit.d.ts +1 -4
  13. package/api/auth/sensitive-rate-limit.d.ts.map +1 -1
  14. package/api/auth/sensitive-rate-limit.js +6 -6
  15. package/api/auth/sessions.js +2 -2
  16. package/api/auth-bootstrap-routes.d.ts +6 -13
  17. package/api/auth-bootstrap-routes.d.ts.map +1 -1
  18. package/api/auth-bootstrap-routes.js +14 -27
  19. package/api/auth-pairing-routes.d.ts +17 -0
  20. package/api/auth-pairing-routes.d.ts.map +1 -0
  21. package/api/auth-pairing-routes.js +300 -0
  22. package/api/auth-session-routes.d.ts.map +1 -1
  23. package/api/auth-session-routes.js +36 -15
  24. package/api/auth.d.ts +12 -19
  25. package/api/auth.d.ts.map +1 -1
  26. package/api/auth.js +32 -27
  27. package/api/automations-compat-routes.d.ts.map +1 -1
  28. package/api/automations-compat-routes.js +5 -5
  29. package/api/background-tasks-routes.d.ts +4 -0
  30. package/api/background-tasks-routes.d.ts.map +1 -0
  31. package/api/background-tasks-routes.js +63 -0
  32. package/api/catalog-routes.js +3 -3
  33. package/api/cloud-pair-route.d.ts +26 -0
  34. package/api/cloud-pair-route.d.ts.map +1 -0
  35. package/api/cloud-pair-route.js +222 -0
  36. package/api/cloud-voice-routes.d.ts +52 -0
  37. package/api/cloud-voice-routes.d.ts.map +1 -0
  38. package/api/cloud-voice-routes.js +50 -0
  39. package/api/compat-route-shared.d.ts +2 -2
  40. package/api/compat-route-shared.d.ts.map +1 -1
  41. package/api/compat-route-shared.js +11 -7
  42. package/api/credential-resolver.d.ts +2 -2
  43. package/api/credential-resolver.d.ts.map +1 -1
  44. package/api/credential-resolver.js +8 -2
  45. package/api/database-rows-compat-routes.d.ts.map +1 -1
  46. package/api/database-rows-compat-routes.js +69 -31
  47. package/api/dev-boot-history.d.ts +26 -0
  48. package/api/dev-boot-history.d.ts.map +1 -0
  49. package/api/dev-boot-history.js +69 -0
  50. package/api/dev-compat-routes.d.ts +5 -0
  51. package/api/dev-compat-routes.d.ts.map +1 -1
  52. package/api/dev-compat-routes.js +127 -4
  53. package/api/dev-console-log.d.ts +2 -2
  54. package/api/dev-console-log.d.ts.map +1 -1
  55. package/api/dev-console-log.js +8 -5
  56. package/api/dev-route-catalog.d.ts +58 -0
  57. package/api/dev-route-catalog.d.ts.map +1 -0
  58. package/api/dev-route-catalog.js +447 -0
  59. package/api/dev-stack.d.ts.map +1 -1
  60. package/api/dev-stack.js +6 -9
  61. package/api/first-run-routes.d.ts +4 -0
  62. package/api/first-run-routes.d.ts.map +1 -0
  63. package/api/first-run-routes.js +208 -0
  64. package/api/first-run-tts-route.d.ts +19 -0
  65. package/api/first-run-tts-route.d.ts.map +1 -0
  66. package/api/first-run-tts-route.js +59 -0
  67. package/api/internal-routes.d.ts +23 -0
  68. package/api/internal-routes.d.ts.map +1 -0
  69. package/api/internal-routes.js +203 -0
  70. package/api/ios-local-agent-transport.d.ts +36 -0
  71. package/api/ios-local-agent-transport.d.ts.map +1 -0
  72. package/api/ios-local-agent-transport.js +566 -0
  73. package/api/onboarding-voice-lines.d.ts +23 -0
  74. package/api/onboarding-voice-lines.d.ts.map +1 -0
  75. package/api/onboarding-voice-lines.js +8 -0
  76. package/api/perf-instrument.d.ts +43 -0
  77. package/api/perf-instrument.d.ts.map +1 -0
  78. package/api/perf-instrument.js +113 -0
  79. package/api/response.d.ts.map +1 -1
  80. package/api/response.js +14 -14
  81. package/api/runtime-mode-routes.d.ts.map +1 -1
  82. package/api/runtime-mode-routes.js +2 -2
  83. package/api/secrets-inventory-routes.js +2 -2
  84. package/api/secrets-manager-routes.d.ts +1 -1
  85. package/api/secrets-manager-routes.d.ts.map +1 -1
  86. package/api/secrets-manager-routes.js +9 -10
  87. package/api/sensitive-request-routes.d.ts.map +1 -1
  88. package/api/sensitive-request-routes.js +5 -5
  89. package/api/sensitive-request-store.d.ts +12 -3
  90. package/api/sensitive-request-store.d.ts.map +1 -1
  91. package/api/server-cors.d.ts.map +1 -1
  92. package/api/server-cors.js +13 -2
  93. package/api/server-first-run-helpers.d.ts +26 -0
  94. package/api/server-first-run-helpers.d.ts.map +1 -0
  95. package/api/server-first-run-helpers.js +271 -0
  96. package/api/server-security.js +1 -1
  97. package/api/server-startup.d.ts.map +1 -1
  98. package/api/server-startup.js +3 -4
  99. package/api/server-wallet-trade.js +1 -1
  100. package/api/server.d.ts +4 -4
  101. package/api/server.d.ts.map +1 -1
  102. package/api/server.js +222 -88
  103. package/api/setup-contract.d.ts +63 -0
  104. package/api/setup-contract.d.ts.map +1 -0
  105. package/api/setup-contract.js +39 -0
  106. package/api/training-benchmarks.d.ts +97 -0
  107. package/api/training-benchmarks.d.ts.map +1 -0
  108. package/api/training-benchmarks.js +307 -0
  109. package/api/workbench-compat-routes.js +2 -2
  110. package/benchmark/cerebras-autowire.d.ts +28 -0
  111. package/benchmark/cerebras-autowire.d.ts.map +1 -0
  112. package/benchmark/cerebras-autowire.js +62 -0
  113. package/benchmark/lifeops-bench-handler.d.ts +36 -0
  114. package/benchmark/lifeops-bench-handler.d.ts.map +1 -1
  115. package/benchmark/lifeops-bench-handler.js +63 -1
  116. package/benchmark/lifeops-fake-backend.d.ts +39 -0
  117. package/benchmark/lifeops-fake-backend.d.ts.map +1 -1
  118. package/benchmark/lifeops-fake-backend.js +993 -21
  119. package/benchmark/mock-plugin.d.ts.map +1 -1
  120. package/benchmark/mock-plugin.js +0 -24
  121. package/benchmark/plugin.d.ts +2 -1
  122. package/benchmark/plugin.d.ts.map +1 -1
  123. package/benchmark/plugin.js +989 -68
  124. package/benchmark/replay-capture.d.ts +2 -2
  125. package/benchmark/replay-capture.d.ts.map +1 -1
  126. package/benchmark/replay-capture.js +3 -3
  127. package/benchmark/server-utils.d.ts +162 -9
  128. package/benchmark/server-utils.d.ts.map +1 -1
  129. package/benchmark/server-utils.js +625 -62
  130. package/benchmark/server.d.ts.map +1 -1
  131. package/benchmark/server.js +1962 -118
  132. package/boot-profile.d.ts +3 -0
  133. package/boot-profile.d.ts.map +1 -0
  134. package/boot-profile.js +30 -0
  135. package/browser.d.ts +23 -1
  136. package/browser.d.ts.map +1 -1
  137. package/browser.js +20 -1
  138. package/cli/argv.js +1 -1
  139. package/cli/banner.js +1 -1
  140. package/cli/command-format.js +2 -2
  141. package/cli/doctor/checks.d.ts.map +1 -1
  142. package/cli/doctor/checks.js +6 -6
  143. package/cli/plugins-cli.d.ts.map +1 -1
  144. package/cli/plugins-cli.js +77 -32
  145. package/cli/profile.d.ts.map +1 -1
  146. package/cli/profile.js +5 -4
  147. package/cli/program/build-program.js +4 -4
  148. package/cli/program/command-registry.d.ts.map +1 -1
  149. package/cli/program/command-registry.js +13 -11
  150. package/cli/program/help.js +5 -5
  151. package/cli/program/preaction.js +5 -5
  152. package/cli/program/register.auth.d.ts.map +1 -1
  153. package/cli/program/register.auth.js +6 -12
  154. package/cli/program/register.capability-router.d.ts +29 -0
  155. package/cli/program/register.capability-router.d.ts.map +1 -0
  156. package/cli/program/register.capability-router.js +568 -0
  157. package/cli/program/register.config.js +1 -1
  158. package/cli/program/register.configure.d.ts.map +1 -1
  159. package/cli/program/register.configure.js +1 -1
  160. package/cli/program/register.dashboard.d.ts.map +1 -1
  161. package/cli/program/register.dashboard.js +6 -7
  162. package/cli/program/register.db.d.ts.map +1 -1
  163. package/cli/program/register.db.js +3 -4
  164. package/cli/program/register.doctor.js +7 -7
  165. package/cli/program/register.setup.d.ts.map +1 -1
  166. package/cli/program/register.setup.js +14 -10
  167. package/cli/program/register.start.d.ts.map +1 -1
  168. package/cli/program/register.start.js +5 -3
  169. package/cli/program/register.subclis.js +3 -3
  170. package/cli/program/register.update.d.ts +6 -0
  171. package/cli/program/register.update.d.ts.map +1 -1
  172. package/cli/program/register.update.js +58 -6
  173. package/cli/program.js +1 -1
  174. package/cli/run-main.js +4 -4
  175. package/config/app-config.d.ts +2 -0
  176. package/config/app-config.d.ts.map +1 -0
  177. package/config/app-config.js +1 -0
  178. package/connectors/capacitor-jsc.d.ts.map +1 -1
  179. package/connectors/capacitor-jsc.js +16 -10
  180. package/connectors/capacitor-quickjs.d.ts.map +1 -1
  181. package/connectors/capacitor-quickjs.js +18 -13
  182. package/connectors/capacitor-sqlite.d.ts.map +1 -1
  183. package/connectors/capacitor-sqlite.js +27 -12
  184. package/dispatch/approval-queue.d.ts +37 -0
  185. package/dispatch/approval-queue.d.ts.map +1 -0
  186. package/dispatch/approval-queue.js +25 -0
  187. package/dispatch/channel-registry.d.ts +30 -0
  188. package/dispatch/channel-registry.d.ts.map +1 -0
  189. package/dispatch/channel-registry.js +22 -0
  190. package/dispatch/connector-registry.d.ts +39 -0
  191. package/dispatch/connector-registry.d.ts.map +1 -0
  192. package/dispatch/connector-registry.js +24 -0
  193. package/dispatch/index.d.ts +14 -0
  194. package/dispatch/index.d.ts.map +1 -0
  195. package/dispatch/index.js +13 -0
  196. package/dispatch/send-policy.d.ts +36 -0
  197. package/dispatch/send-policy.d.ts.map +1 -0
  198. package/dispatch/send-policy.js +16 -0
  199. package/entry.js +28 -11
  200. package/first-run/first-run-config.d.ts +55 -0
  201. package/first-run/first-run-config.d.ts.map +1 -0
  202. package/first-run/first-run-config.js +178 -0
  203. package/first-run/runtime-target.d.ts +4 -0
  204. package/first-run/runtime-target.d.ts.map +1 -0
  205. package/first-run/runtime-target.js +13 -0
  206. package/index.d.ts +16 -3
  207. package/index.d.ts.map +1 -1
  208. package/index.js +57 -33
  209. package/package.json +159 -50
  210. package/packaging/debian/apt-repo-config/README.md +18 -0
  211. package/packaging/debian/apt-repo-config/conf/distributions +11 -0
  212. package/packaging/flatpak/README.md +26 -16
  213. package/packaging/flatpak/ai.elizaos.App.metainfo.xml +17 -12
  214. package/packaging/flatpak/ai.elizaos.App.store.yml +5 -5
  215. package/packaging/flatpak/ai.elizaos.App.yml +10 -24
  216. package/packaging/flatpak/elizaos-app-wrapper.store.sh +2 -2
  217. package/packaging/flatpak/generate-sources.sh +74 -0
  218. package/packaging/flatpak/node-sources.json +7930 -0
  219. package/packaging/inno/build-inno.ps1 +34 -9
  220. package/packaging/msix/AppxManifest.store.xml +1 -1
  221. package/packaging/msix/README.md +39 -19
  222. package/packaging/msix/build-msix.ps1 +44 -14
  223. package/packaging/snap/snapcraft.yaml +22 -21
  224. package/packaging/test-packaging.sh +2 -2
  225. package/permissions/types.d.ts +1 -1
  226. package/permissions/types.js +1 -1
  227. package/platform/elizaos-agent-browser-stub.d.ts +144 -0
  228. package/platform/elizaos-agent-browser-stub.d.ts.map +1 -0
  229. package/platform/elizaos-agent-browser-stub.js +158 -0
  230. package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts +34 -0
  231. package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts.map +1 -0
  232. package/platform/elizaos-plugin-elizacloud-browser-stub.js +51 -0
  233. package/platform/empty-node-module.d.ts +148 -0
  234. package/platform/empty-node-module.d.ts.map +1 -1
  235. package/platform/empty-node-module.js +140 -3
  236. package/platform/ios-runtime-backends.d.ts +83 -0
  237. package/platform/ios-runtime-backends.d.ts.map +1 -0
  238. package/platform/ios-runtime-backends.js +133 -0
  239. package/platform/ios-runtime-bridge.d.ts +15 -0
  240. package/platform/ios-runtime-bridge.d.ts.map +1 -0
  241. package/platform/ios-runtime-bridge.js +527 -0
  242. package/platform/native-library-policy.d.ts +23 -0
  243. package/platform/native-library-policy.d.ts.map +1 -0
  244. package/platform/native-library-policy.js +112 -0
  245. package/platform/native-plugin-entrypoints.d.ts +19 -0
  246. package/platform/native-plugin-entrypoints.d.ts.map +1 -0
  247. package/platform/native-plugin-entrypoints.js +29 -0
  248. package/platforms/android/README.md +68 -10
  249. package/platforms/android/app/build.gradle +268 -3
  250. package/platforms/android/app/capacitor.build.gradle +18 -1
  251. package/platforms/android/app/proguard-rules.pro +17 -2
  252. package/platforms/android/app/src/androidTest/java/ai/elizaos/app/ElizaOsInstrumentedTest.java +1 -1
  253. package/platforms/android/app/src/main/AndroidManifest.xml +334 -17
  254. package/platforms/android/app/src/main/assets/runners/eliza-tasks.js +177 -0
  255. package/platforms/android/app/src/main/elizavoice-jni/CMakeLists.txt +75 -0
  256. package/platforms/android/app/src/main/elizavoice-jni/elizavoice-jni.cpp +1045 -0
  257. package/platforms/android/app/src/main/java/ai/elizaos/app/AgentPlugin.java +111 -171
  258. package/platforms/android/app/src/main/java/ai/elizaos/app/AndroidVirtualizationBridge.java +284 -0
  259. package/platforms/android/app/src/main/java/ai/elizaos/app/BatteryOptimizationPlugin.java +95 -0
  260. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAccessibilityService.java +55 -0
  261. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +1198 -141
  262. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAndroidSystemBridge.java +83 -0
  263. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAssistActivity.java +50 -1
  264. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBootReceiver.java +90 -8
  265. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBrowserActivity.java +2 -2
  266. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCalendarActivity.java +1 -1
  267. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCameraActivity.java +1 -1
  268. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaClockActivity.java +2 -2
  269. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaContactsActivity.java +1 -1
  270. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaDialActivity.java +1 -1
  271. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaInCallService.java +1 -1
  272. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaMmsReceiver.java +1 -1
  273. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNativeBridge.java +22 -0
  274. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNotificationListenerService.java +45 -0
  275. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaQuickActionsWidgetProvider.java +68 -0
  276. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaShareActivity.java +132 -0
  277. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsComposeActivity.java +1 -1
  278. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsGatewayService.java +268 -0
  279. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsReceiver.java +12 -1
  280. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaTasksWorker.java +194 -0
  281. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceCaptureService.java +198 -0
  282. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceNative.java +160 -0
  283. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +450 -0
  284. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceTileService.java +39 -0
  285. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaWorkScheduler.java +60 -0
  286. package/platforms/android/app/src/main/java/ai/elizaos/app/GatewayConnectionService.java +53 -19
  287. package/platforms/android/app/src/main/java/ai/elizaos/app/MainActivity.java +160 -33
  288. package/platforms/android/app/src/main/java/ai/elizaos/app/ResourceProbePlugin.java +169 -0
  289. package/platforms/android/app/src/main/java/ai/elizaos/app/VoiceCapturePlugin.java +119 -0
  290. package/platforms/android/app/src/main/res/drawable/eliza_widget_background.xml +10 -0
  291. package/platforms/android/app/src/main/res/drawable/eliza_widget_button_background.xml +13 -0
  292. package/platforms/android/app/src/main/res/drawable/splash.png +0 -0
  293. package/platforms/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  294. package/platforms/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  295. package/platforms/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  296. package/platforms/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  297. package/platforms/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  298. package/platforms/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  299. package/platforms/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  300. package/platforms/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  301. package/platforms/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  302. package/platforms/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  303. package/platforms/android/app/src/main/res/layout/eliza_quick_actions_widget.xml +86 -0
  304. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +2 -1
  305. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +2 -1
  306. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  307. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  308. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png +0 -0
  309. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  310. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  311. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  312. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png +0 -0
  313. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  314. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  315. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  316. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png +0 -0
  317. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  318. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  319. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  320. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png +0 -0
  321. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  322. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  323. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  324. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png +0 -0
  325. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  326. package/platforms/android/app/src/main/res/values/android_app_actions.xml +48 -0
  327. package/platforms/android/app/src/main/res/values/colors.xml +8 -0
  328. package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +2 -2
  329. package/platforms/android/app/src/main/res/values/strings.xml +2 -2
  330. package/platforms/android/app/src/main/res/values/styles.xml +25 -1
  331. package/platforms/android/app/src/main/res/xml/eliza_accessibility_service.xml +9 -0
  332. package/platforms/android/app/src/main/res/xml/eliza_quick_actions_widget.xml +13 -0
  333. package/platforms/android/app/src/main/res/xml/shortcuts.xml +121 -0
  334. package/platforms/android/build.gradle +2 -2
  335. package/platforms/android/capacitor-cordova-android-plugins/build.gradle +9 -3
  336. package/platforms/android/capacitor-cordova-android-plugins/cordova.variables.gradle +6 -2
  337. package/platforms/android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml +7 -2
  338. package/platforms/android/capacitor-cordova-android-plugins/src/main/java/.gitkeep +0 -1
  339. package/platforms/android/capacitor.settings.gradle +66 -16
  340. package/platforms/android/gradle.properties +1 -0
  341. package/platforms/android/update-manifest/generate-manifest.mjs +97 -0
  342. package/platforms/android/update-manifest/schema.json +26 -0
  343. package/platforms/apple-store-entitlements.reviewed.json +155 -0
  344. package/platforms/electrobun/.generated/brand-config.json +3 -2
  345. package/platforms/electrobun/LICENSE +21 -0
  346. package/platforms/electrobun/README.md +15 -1
  347. package/platforms/electrobun/assets/appIcon.icns +0 -0
  348. package/platforms/electrobun/assets/appIcon.ico +0 -0
  349. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128.png +0 -0
  350. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128@2x.png +0 -0
  351. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16.png +0 -0
  352. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16@2x.png +0 -0
  353. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256.png +0 -0
  354. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256@2x.png +0 -0
  355. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32.png +0 -0
  356. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32@2x.png +0 -0
  357. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512.png +0 -0
  358. package/platforms/electrobun/assets/brand-config.json +6 -6
  359. package/platforms/electrobun/biome.json +9 -9
  360. package/platforms/electrobun/docs/capability-collapse-matrix.json +318 -0
  361. package/platforms/electrobun/docs/capability-collapse-matrix.md +129 -0
  362. package/platforms/electrobun/docs/capability-routing.md +86 -0
  363. package/platforms/electrobun/docs/convergence-audit.json +3505 -0
  364. package/platforms/electrobun/docs/convergence-audit.md +694 -0
  365. package/platforms/electrobun/docs/database-boot-policy.md +90 -0
  366. package/platforms/electrobun/docs/riscv64-port.md +175 -0
  367. package/platforms/electrobun/docs/startup-first-run-cleanup.md +18 -0
  368. package/platforms/electrobun/docs/trace-first-annotations.md +52 -0
  369. package/platforms/electrobun/docs/ui-boundary-audit.json +580 -0
  370. package/platforms/electrobun/docs/ui-boundary-audit.md +257 -0
  371. package/platforms/electrobun/electrobun.config.ts +592 -364
  372. package/platforms/electrobun/entitlements/JUSTIFICATIONS.md +141 -0
  373. package/platforms/electrobun/entitlements/README.md +34 -6
  374. package/platforms/electrobun/entitlements/mas-bun.entitlements +15 -0
  375. package/platforms/electrobun/entitlements/mas.entitlements +6 -4
  376. package/platforms/electrobun/native/macos/window-effects.mm +1522 -0
  377. package/platforms/electrobun/package.json +18 -12
  378. package/platforms/electrobun/remotes/fs/README.md +70 -0
  379. package/platforms/electrobun/remotes/fs/electrobun.config.ts +38 -0
  380. package/platforms/electrobun/remotes/fs/package.json +12 -0
  381. package/platforms/electrobun/remotes/fs/plugin.json +25 -0
  382. package/platforms/electrobun/remotes/fs/src/bun/errors.ts +57 -0
  383. package/platforms/electrobun/remotes/fs/src/bun/file-limits.ts +50 -0
  384. package/platforms/electrobun/remotes/fs/src/bun/fs-service.ts +389 -0
  385. package/platforms/electrobun/remotes/fs/src/bun/path-guard.ts +270 -0
  386. package/platforms/electrobun/remotes/fs/src/bun/protocol.ts +149 -0
  387. package/platforms/electrobun/remotes/fs/src/bun/worker.ts +174 -0
  388. package/platforms/electrobun/remotes/fs/src/dev/phase5-smoke.ts +171 -0
  389. package/platforms/electrobun/remotes/fs/src/web/index.html +8 -0
  390. package/platforms/electrobun/remotes/git/README.md +75 -0
  391. package/platforms/electrobun/remotes/git/electrobun.config.ts +44 -0
  392. package/platforms/electrobun/remotes/git/package.json +12 -0
  393. package/platforms/electrobun/remotes/git/plugin.json +31 -0
  394. package/platforms/electrobun/remotes/git/src/bun/errors.ts +69 -0
  395. package/platforms/electrobun/remotes/git/src/bun/git-command.ts +156 -0
  396. package/platforms/electrobun/remotes/git/src/bun/git-service.ts +446 -0
  397. package/platforms/electrobun/remotes/git/src/bun/operation-history.ts +124 -0
  398. package/platforms/electrobun/remotes/git/src/bun/protocol.ts +252 -0
  399. package/platforms/electrobun/remotes/git/src/bun/worker.ts +316 -0
  400. package/platforms/electrobun/remotes/git/src/dev/phase7-smoke.ts +141 -0
  401. package/platforms/electrobun/remotes/git/src/web/index.html +8 -0
  402. package/platforms/electrobun/remotes/local-model/README.md +138 -0
  403. package/platforms/electrobun/remotes/local-model/electrobun.config.ts +46 -0
  404. package/platforms/electrobun/remotes/local-model/package.json +12 -0
  405. package/platforms/electrobun/remotes/local-model/plugin.json +33 -0
  406. package/platforms/electrobun/remotes/local-model/src/bun/download-state.ts +115 -0
  407. package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +425 -0
  408. package/platforms/electrobun/remotes/local-model/src/bun/errors.ts +74 -0
  409. package/platforms/electrobun/remotes/local-model/src/bun/hf-eliza1-client.ts +169 -0
  410. package/platforms/electrobun/remotes/local-model/src/bun/local-inference-api-client.ts +245 -0
  411. package/platforms/electrobun/remotes/local-model/src/bun/model-service.ts +490 -0
  412. package/platforms/electrobun/remotes/local-model/src/bun/protocol.ts +301 -0
  413. package/platforms/electrobun/remotes/local-model/src/bun/worker.ts +248 -0
  414. package/platforms/electrobun/remotes/local-model/src/dev/phase8-smoke.ts +117 -0
  415. package/platforms/electrobun/remotes/local-model/src/web/index.html +13 -0
  416. package/platforms/electrobun/remotes/pty/README.md +65 -0
  417. package/platforms/electrobun/remotes/pty/electrobun.config.ts +47 -0
  418. package/platforms/electrobun/remotes/pty/package.json +12 -0
  419. package/platforms/electrobun/remotes/pty/plugin.json +34 -0
  420. package/platforms/electrobun/remotes/pty/src/bun/errors.ts +57 -0
  421. package/platforms/electrobun/remotes/pty/src/bun/output-buffer.ts +127 -0
  422. package/platforms/electrobun/remotes/pty/src/bun/protocol.ts +192 -0
  423. package/platforms/electrobun/remotes/pty/src/bun/pty-service.ts +562 -0
  424. package/platforms/electrobun/remotes/pty/src/bun/worker.ts +218 -0
  425. package/platforms/electrobun/remotes/pty/src/dev/phase6-smoke.ts +127 -0
  426. package/platforms/electrobun/remotes/pty/src/web/index.html +8 -0
  427. package/platforms/electrobun/remotes/runtime/README.md +370 -0
  428. package/platforms/electrobun/remotes/runtime/electrobun.config.ts +48 -0
  429. package/platforms/electrobun/remotes/runtime/package.json +14 -0
  430. package/platforms/electrobun/remotes/runtime/plugin.json +30 -0
  431. package/platforms/electrobun/remotes/runtime/src/bun/api-client.ts +620 -0
  432. package/platforms/electrobun/remotes/runtime/src/bun/errors.ts +45 -0
  433. package/platforms/electrobun/remotes/runtime/src/bun/log-buffer.ts +33 -0
  434. package/platforms/electrobun/remotes/runtime/src/bun/protocol.ts +366 -0
  435. package/platforms/electrobun/remotes/runtime/src/bun/route-discovery.ts +419 -0
  436. package/platforms/electrobun/remotes/runtime/src/bun/runtime-manager.ts +423 -0
  437. package/platforms/electrobun/remotes/runtime/src/bun/sse-parser.ts +99 -0
  438. package/platforms/electrobun/remotes/runtime/src/bun/stream-manager.ts +887 -0
  439. package/platforms/electrobun/remotes/runtime/src/bun/worker.ts +1231 -0
  440. package/platforms/electrobun/remotes/runtime/src/dev/phase1-smoke.ts +34 -0
  441. package/platforms/electrobun/remotes/runtime/src/dev/phase2-smoke.ts +86 -0
  442. package/platforms/electrobun/remotes/runtime/src/dev/phase3-smoke.ts +141 -0
  443. package/platforms/electrobun/remotes/runtime/src/web/index.css +187 -0
  444. package/platforms/electrobun/remotes/runtime/src/web/index.html +76 -0
  445. package/platforms/electrobun/remotes/runtime/src/web/index.ts +192 -0
  446. package/platforms/electrobun/remotes/surface/README.md +201 -0
  447. package/platforms/electrobun/remotes/surface/electrobun.config.ts +38 -0
  448. package/platforms/electrobun/remotes/surface/package.json +12 -0
  449. package/platforms/electrobun/remotes/surface/plugin.json +28 -0
  450. package/platforms/electrobun/remotes/surface/src/bun/worker.ts +132 -0
  451. package/platforms/electrobun/remotes/surface/src/dev/phase4-smoke.ts +566 -0
  452. package/platforms/electrobun/remotes/surface/src/protocol/event-types.ts +84 -0
  453. package/platforms/electrobun/remotes/surface/src/protocol/runtime-client.ts +673 -0
  454. package/platforms/electrobun/remotes/surface/src/web/app.ts +595 -0
  455. package/platforms/electrobun/remotes/surface/src/web/index.css +460 -0
  456. package/platforms/electrobun/remotes/surface/src/web/index.html +466 -0
  457. package/platforms/electrobun/remotes/surface/src/web/index.ts +5 -0
  458. package/platforms/electrobun/remotes/surface/src/web/render.ts +455 -0
  459. package/platforms/electrobun/remotes/surface/src/web/state.ts +427 -0
  460. package/platforms/electrobun/scripts/build-macos-effects.sh +4 -0
  461. package/platforms/electrobun/scripts/ensure-build-folder.ts +28 -0
  462. package/platforms/electrobun/scripts/ensure-whisper-gguf.sh +55 -0
  463. package/platforms/electrobun/scripts/ensure-whisper-model.sh +22 -80
  464. package/platforms/electrobun/scripts/generate-convergence-audit.ts +1203 -0
  465. package/platforms/electrobun/scripts/local-adhoc-sign-macos.ts +159 -159
  466. package/platforms/electrobun/scripts/postwrap-diagnostics.ts +424 -339
  467. package/platforms/electrobun/scripts/postwrap-sign-runtime-macos.ts +302 -271
  468. package/platforms/electrobun/scripts/smoke-test-windows.ps1 +17 -16
  469. package/platforms/electrobun/scripts/smoke-test.sh +5 -7
  470. package/platforms/electrobun/scripts/sync-web-assets.mjs +13 -13
  471. package/platforms/electrobun/scripts/verify-rpc-handlers.ts +109 -110
  472. package/platforms/electrobun/scripts/verify-windows-installer-proof.ps1 +3 -8
  473. package/platforms/electrobun/src/__stubs__/bun-ffi.ts +31 -31
  474. package/platforms/electrobun/src/__stubs__/electrobun-bun.ts +1 -1
  475. package/platforms/electrobun/src/agent-ready-state.ts +8 -8
  476. package/platforms/electrobun/src/agent-reset-from-main.test.ts +162 -0
  477. package/platforms/electrobun/src/agent-reset-from-main.ts +62 -62
  478. package/platforms/electrobun/src/agent-status-rpc.test.ts +95 -0
  479. package/platforms/electrobun/src/agent-status-rpc.ts +156 -0
  480. package/platforms/electrobun/src/api-base.test.ts +247 -0
  481. package/platforms/electrobun/src/api-base.ts +202 -93
  482. package/platforms/electrobun/src/application-menu-action-registry.ts +9 -9
  483. package/platforms/electrobun/src/application-menu.ts +348 -348
  484. package/platforms/electrobun/src/background-notice.ts +36 -36
  485. package/platforms/electrobun/src/boot-progress.test.ts +188 -0
  486. package/platforms/electrobun/src/boot-progress.ts +111 -0
  487. package/platforms/electrobun/src/brand-config.test.ts +39 -0
  488. package/platforms/electrobun/src/brand-config.ts +141 -129
  489. package/platforms/electrobun/src/bridge/browser-tabs-renderer-registry.ts +28 -28
  490. package/platforms/electrobun/src/bridge/electrobun-boot-config.ts +42 -0
  491. package/platforms/electrobun/src/bridge/electrobun-crypto-ready.ts +120 -0
  492. package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +342 -357
  493. package/platforms/electrobun/src/bridge/electrobun-stub.ts +13 -13
  494. package/platforms/electrobun/src/browser-workspace-bridge-server.ts +285 -243
  495. package/platforms/electrobun/src/cloud-auth-window.ts +136 -136
  496. package/platforms/electrobun/src/cloud-disconnect-from-main.ts +90 -90
  497. package/platforms/electrobun/src/config-and-auth-rpc.test.ts +256 -0
  498. package/platforms/electrobun/src/config-and-auth-rpc.ts +302 -0
  499. package/platforms/electrobun/src/conversations-and-character-rpc.test.ts +185 -0
  500. package/platforms/electrobun/src/conversations-and-character-rpc.ts +131 -0
  501. package/platforms/electrobun/src/dashboard-rpc.test.ts +200 -0
  502. package/platforms/electrobun/src/dashboard-rpc.ts +344 -0
  503. package/platforms/electrobun/src/database/database-lock.ts +141 -0
  504. package/platforms/electrobun/src/database/database-mode.ts +149 -0
  505. package/platforms/electrobun/src/database/database-recovery.ts +72 -0
  506. package/platforms/electrobun/src/database/database-snapshot.ts +190 -0
  507. package/platforms/electrobun/src/database/database.test.ts +196 -0
  508. package/platforms/electrobun/src/database/index.ts +5 -0
  509. package/platforms/electrobun/src/database/pglite-paths.ts +100 -0
  510. package/platforms/electrobun/src/desktop-deep-link-events.test.ts +30 -0
  511. package/platforms/electrobun/src/desktop-deep-link-events.ts +17 -0
  512. package/platforms/electrobun/src/desktop-http-request.test.ts +73 -73
  513. package/platforms/electrobun/src/desktop-http-request.ts +85 -85
  514. package/platforms/electrobun/src/desktop-pill-config.test.ts +27 -0
  515. package/platforms/electrobun/src/desktop-pill-config.ts +40 -0
  516. package/platforms/electrobun/src/desktop-test-bridge-server.ts +204 -204
  517. package/platforms/electrobun/src/desktop-tray-config.test.ts +87 -0
  518. package/platforms/electrobun/src/desktop-tray-config.ts +84 -0
  519. package/platforms/electrobun/src/devtools-layout.ts +41 -41
  520. package/platforms/electrobun/src/diagnostic-format.test.ts +71 -0
  521. package/platforms/electrobun/src/diagnostic-format.ts +75 -36
  522. package/platforms/electrobun/src/dynamic-view-rpc-schema.test.ts +37 -0
  523. package/platforms/electrobun/src/dynamic-views/README.md +44 -0
  524. package/platforms/electrobun/src/dynamic-views/demo/agent-run-trace.html +135 -0
  525. package/platforms/electrobun/src/dynamic-views/errors.ts +29 -0
  526. package/platforms/electrobun/src/dynamic-views/host.test.ts +353 -0
  527. package/platforms/electrobun/src/dynamic-views/host.ts +332 -0
  528. package/platforms/electrobun/src/dynamic-views/index.ts +57 -0
  529. package/platforms/electrobun/src/dynamic-views/kiosk-canvas.ts +89 -0
  530. package/platforms/electrobun/src/dynamic-views/registry.test.ts +139 -0
  531. package/platforms/electrobun/src/dynamic-views/registry.ts +196 -0
  532. package/platforms/electrobun/src/dynamic-views/session-manager.test.ts +355 -0
  533. package/platforms/electrobun/src/dynamic-views/session-manager.ts +348 -0
  534. package/platforms/electrobun/src/dynamic-views/types.ts +105 -0
  535. package/platforms/electrobun/src/electrobun-boot-config.test.ts +50 -0
  536. package/platforms/electrobun/src/electrobun-config.test.ts +62 -0
  537. package/platforms/electrobun/src/electrobun-crypto-ready.test.ts +65 -0
  538. package/platforms/electrobun/src/electrobun-window-options.ts +25 -0
  539. package/platforms/electrobun/src/extension-rpc.test.ts +88 -0
  540. package/platforms/electrobun/src/extension-rpc.ts +102 -0
  541. package/platforms/electrobun/src/fatal-shutdown.test.ts +10 -10
  542. package/platforms/electrobun/src/fatal-shutdown.ts +1 -1
  543. package/platforms/electrobun/src/first-party-remotes.test.ts +169 -0
  544. package/platforms/electrobun/src/first-party-remotes.ts +297 -0
  545. package/platforms/electrobun/src/first-run-rpc.test.ts +192 -0
  546. package/platforms/electrobun/src/first-run-rpc.ts +146 -0
  547. package/platforms/electrobun/src/floating-chat-window.ts +181 -181
  548. package/platforms/electrobun/src/inbox-rpc.test.ts +123 -0
  549. package/platforms/electrobun/src/inbox-rpc.ts +158 -0
  550. package/platforms/electrobun/src/index.ts +2555 -2096
  551. package/platforms/electrobun/src/kiosk-mode.ts +50 -0
  552. package/platforms/electrobun/src/launch/index.ts +4 -0
  553. package/platforms/electrobun/src/launch/launch-dynamic-view.ts +37 -0
  554. package/platforms/electrobun/src/launch/launch-orchestrator.test.ts +224 -0
  555. package/platforms/electrobun/src/launch/launch-orchestrator.ts +456 -0
  556. package/platforms/electrobun/src/launch/launch-store.test.ts +97 -0
  557. package/platforms/electrobun/src/launch/launch-store.ts +134 -0
  558. package/platforms/electrobun/src/launch/types.ts +103 -0
  559. package/platforms/electrobun/src/launch/views/launch-diagnostics.html +205 -0
  560. package/platforms/electrobun/src/lifecycle/agent-ready-publish.test.ts +50 -0
  561. package/platforms/electrobun/src/lifecycle/agent-ready-publish.ts +27 -0
  562. package/platforms/electrobun/src/lifecycle/api-base-owner.ts +42 -31
  563. package/platforms/electrobun/src/lifecycle/desktop-session-prime.ts +44 -44
  564. package/platforms/electrobun/src/logger.ts +14 -14
  565. package/platforms/electrobun/src/main-window-runtime.ts +83 -83
  566. package/platforms/electrobun/src/main-window-session.test.ts +109 -0
  567. package/platforms/electrobun/src/main-window-session.ts +87 -51
  568. package/platforms/electrobun/src/menu-reset-from-main.ts +158 -158
  569. package/platforms/electrobun/src/native/agent-env.test.ts +52 -0
  570. package/platforms/electrobun/src/native/agent-runtime-layout.test.ts +42 -0
  571. package/platforms/electrobun/src/native/agent-state-dir.test.ts +91 -0
  572. package/platforms/electrobun/src/native/agent.ts +2122 -1682
  573. package/platforms/electrobun/src/native/auth-bridge.test.ts +67 -0
  574. package/platforms/electrobun/src/native/auth-bridge.ts +464 -360
  575. package/platforms/electrobun/src/native/browser-workspace.ts +723 -471
  576. package/platforms/electrobun/src/native/camera.ts +50 -50
  577. package/platforms/electrobun/src/native/canvas.ts +444 -445
  578. package/platforms/electrobun/src/native/credentials.ts +673 -616
  579. package/platforms/electrobun/src/native/desktop-window.test.ts +300 -0
  580. package/platforms/electrobun/src/native/desktop.ts +2196 -2156
  581. package/platforms/electrobun/src/native/editor-bridge.ts +201 -201
  582. package/platforms/electrobun/src/native/file-watcher.ts +154 -154
  583. package/platforms/electrobun/src/native/gateway.ts +179 -180
  584. package/platforms/electrobun/src/native/gpu-window.ts +256 -256
  585. package/platforms/electrobun/src/native/index.ts +76 -74
  586. package/platforms/electrobun/src/native/location.test.ts +44 -0
  587. package/platforms/electrobun/src/native/location.ts +90 -80
  588. package/platforms/electrobun/src/native/loopback-port.ts +60 -60
  589. package/platforms/electrobun/src/native/mac-window-effects.ts +166 -104
  590. package/platforms/electrobun/src/native/music-player.ts +38 -38
  591. package/platforms/electrobun/src/native/permissions-shared.ts +249 -150
  592. package/platforms/electrobun/src/native/permissions.ts +301 -208
  593. package/platforms/electrobun/src/native/power-state.ts +129 -129
  594. package/platforms/electrobun/src/native/remote-plugin-host.test.ts +1394 -0
  595. package/platforms/electrobun/src/native/remote-plugin-host.ts +1531 -0
  596. package/platforms/electrobun/src/native/screencapture.ts +667 -573
  597. package/platforms/electrobun/src/native/steward.ts +207 -204
  598. package/platforms/electrobun/src/native/swabble.ts +68 -324
  599. package/platforms/electrobun/src/native/talkmode.ts +253 -422
  600. package/platforms/electrobun/src/native/webgpu-browser-support.test.ts +18 -0
  601. package/platforms/electrobun/src/native/webgpu-browser-support.ts +165 -147
  602. package/platforms/electrobun/src/native/whisper-env.test.ts +71 -0
  603. package/platforms/electrobun/src/native/whisper-env.ts +68 -0
  604. package/platforms/electrobun/src/native-onboarding.ts +270 -0
  605. package/platforms/electrobun/src/onboarding-overlay-window.ts +141 -0
  606. package/platforms/electrobun/src/persisted-deployment.ts +91 -0
  607. package/platforms/electrobun/src/pill-window.test.ts +91 -0
  608. package/platforms/electrobun/src/pill-window.ts +99 -0
  609. package/platforms/electrobun/src/preload-validation.ts +44 -44
  610. package/platforms/electrobun/src/preload.js +1 -1
  611. package/platforms/electrobun/src/print-electrobun-dev-settings-banner.ts +120 -120
  612. package/platforms/electrobun/src/renderer-api-proxy.test.ts +73 -0
  613. package/platforms/electrobun/src/renderer-api-proxy.ts +86 -0
  614. package/platforms/electrobun/src/renderer-static.test.ts +53 -0
  615. package/platforms/electrobun/src/renderer-static.ts +144 -57
  616. package/platforms/electrobun/src/rpc-handler-slices.ts +121 -0
  617. package/platforms/electrobun/src/rpc-handlers.test.ts +267 -0
  618. package/platforms/electrobun/src/rpc-handlers.ts +1306 -913
  619. package/platforms/electrobun/src/rpc-parse-utils.ts +57 -0
  620. package/platforms/electrobun/src/rpc-port-resolver.test.ts +45 -0
  621. package/platforms/electrobun/src/rpc-port-resolver.ts +31 -0
  622. package/platforms/electrobun/src/rpc-schema.ts +2556 -1619
  623. package/platforms/electrobun/src/runtime-layout.ts +105 -105
  624. package/platforms/electrobun/src/runtime-permissions.ts +95 -95
  625. package/platforms/electrobun/src/runtime-rpc.test.ts +126 -0
  626. package/platforms/electrobun/src/runtime-rpc.ts +237 -0
  627. package/platforms/electrobun/src/screenshot-dev-server.ts +87 -87
  628. package/platforms/electrobun/src/settings-mutations-rpc.test.ts +193 -0
  629. package/platforms/electrobun/src/settings-mutations-rpc.ts +220 -0
  630. package/platforms/electrobun/src/startup-trace.ts +274 -270
  631. package/platforms/electrobun/src/subscription-rpc.test.ts +89 -0
  632. package/platforms/electrobun/src/subscription-rpc.ts +192 -0
  633. package/platforms/electrobun/src/surface-windows.test.ts +355 -0
  634. package/platforms/electrobun/src/surface-windows.ts +410 -410
  635. package/platforms/electrobun/src/trace/README.md +73 -0
  636. package/platforms/electrobun/src/trace/errors.ts +21 -0
  637. package/platforms/electrobun/src/trace/index.ts +40 -0
  638. package/platforms/electrobun/src/trace/trace-dynamic-view.ts +40 -0
  639. package/platforms/electrobun/src/trace/trace-host-requests.ts +473 -0
  640. package/platforms/electrobun/src/trace/trace-service.test.ts +186 -0
  641. package/platforms/electrobun/src/trace/trace-service.ts +324 -0
  642. package/platforms/electrobun/src/trace/trace-store.test.ts +141 -0
  643. package/platforms/electrobun/src/trace/trace-store.ts +551 -0
  644. package/platforms/electrobun/src/trace/types.ts +250 -0
  645. package/platforms/electrobun/src/trace/views/agent-run-trace.html +311 -0
  646. package/platforms/electrobun/src/types/web-speech.d.ts +28 -28
  647. package/platforms/electrobun/src/types.ts +5 -5
  648. package/platforms/electrobun/src/update-availability.test.ts +72 -0
  649. package/platforms/electrobun/src/update-availability.ts +90 -0
  650. package/platforms/electrobun/src/update-rpc.test.ts +83 -0
  651. package/platforms/electrobun/src/update-rpc.ts +123 -0
  652. package/platforms/electrobun/src/voice/README.md +184 -0
  653. package/platforms/electrobun/src/voice/errors.ts +42 -0
  654. package/platforms/electrobun/src/voice/index.ts +78 -0
  655. package/platforms/electrobun/src/voice/types.ts +316 -0
  656. package/platforms/electrobun/src/voice/voice-host-requests.ts +259 -0
  657. package/platforms/electrobun/src/voice/voice-latency-budget.test.ts +66 -0
  658. package/platforms/electrobun/src/voice/voice-latency-budget.ts +243 -0
  659. package/platforms/electrobun/src/voice/voice-live-validation.test.ts +352 -0
  660. package/platforms/electrobun/src/voice/voice-live-validation.ts +838 -0
  661. package/platforms/electrobun/src/voice/voice-pipeline.ts +250 -0
  662. package/platforms/electrobun/src/voice/voice-playback-adapter.ts +31 -0
  663. package/platforms/electrobun/src/voice/voice-runtime-adapter.test.ts +213 -0
  664. package/platforms/electrobun/src/voice/voice-runtime-adapter.ts +686 -0
  665. package/platforms/electrobun/src/voice/voice-service.test.ts +561 -0
  666. package/platforms/electrobun/src/voice/voice-service.ts +1027 -0
  667. package/platforms/electrobun/src/voice/voice-stream-coordinator.test.ts +115 -0
  668. package/platforms/electrobun/src/voice/voice-stream-coordinator.ts +270 -0
  669. package/platforms/electrobun/src/voice/voice-trace.ts +97 -0
  670. package/platforms/electrobun/src/voice/voice-tts-chunker.test.ts +91 -0
  671. package/platforms/electrobun/src/voice/voice-tts-chunker.ts +194 -0
  672. package/platforms/electrobun/src/windows-cef-profile.ts +88 -88
  673. package/platforms/electrobun/tsconfig.json +73 -13
  674. package/platforms/electrobun/update-channels.json +22 -0
  675. package/platforms/electrobun/vitest.electrobun.config.ts +72 -42
  676. package/platforms/ios/App/App/App.entitlements +4 -0
  677. package/platforms/ios/App/App/AppDelegate.swift +80 -18
  678. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ios-marketing-1024.png +0 -0
  679. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@1x.png +0 -0
  680. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@2x.png +0 -0
  681. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@1x.png +0 -0
  682. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@2x.png +0 -0
  683. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@1x.png +0 -0
  684. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@2x.png +0 -0
  685. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@1x.png +0 -0
  686. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@2x.png +0 -0
  687. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-83_5x83_5@2x.png +0 -0
  688. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@2x.png +0 -0
  689. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@3x.png +0 -0
  690. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@2x.png +0 -0
  691. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@3x.png +0 -0
  692. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@2x.png +0 -0
  693. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@3x.png +0 -0
  694. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@2x.png +0 -0
  695. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@3x.png +0 -0
  696. package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +1 -4
  697. package/platforms/ios/App/App/ComputerUseBridge.swift +589 -0
  698. package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.entitlements +12 -0
  699. package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.swift +34 -0
  700. package/platforms/ios/App/App/DeviceActivityMonitorExtension/Info.plist +29 -0
  701. package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.entitlements +12 -0
  702. package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.swift +53 -0
  703. package/platforms/ios/App/App/DeviceActivityReportExtension/Info.plist +27 -0
  704. package/platforms/ios/App/App/ElizaAppIntents.swift +183 -0
  705. package/platforms/ios/App/App/ElizaIntentPlugin.swift +342 -5
  706. package/platforms/ios/App/App/Info.plist +17 -1
  707. package/platforms/ios/App/App/runners/eliza-tasks.js +177 -0
  708. package/platforms/ios/App/App.xcodeproj/project.pbxproj +262 -6
  709. package/platforms/ios/App/BroadcastExtension/SampleHandler.swift +100 -0
  710. package/platforms/ios/App/Podfile +5 -0
  711. package/platforms/ios/App/Podfile.lock +83 -59
  712. package/register-runtime-hooks.js +11 -5
  713. package/registry/app-registry.d.ts +14 -0
  714. package/registry/app-registry.d.ts.map +1 -0
  715. package/registry/app-registry.js +29 -0
  716. package/registry/entries/apps/app-polymarket.json +31 -0
  717. package/registry/entries/apps/clawville.json +27 -0
  718. package/registry/entries/apps/companion.json +28 -0
  719. package/registry/entries/apps/database-viewer.json +27 -0
  720. package/registry/entries/apps/defense-of-the-agents.json +27 -0
  721. package/registry/entries/apps/documents.json +30 -0
  722. package/registry/entries/apps/feed.json +27 -0
  723. package/registry/entries/apps/hyperliquid.json +31 -0
  724. package/registry/entries/apps/log-viewer.json +27 -0
  725. package/registry/entries/apps/memory-viewer.json +27 -0
  726. package/registry/entries/apps/model-tester.json +31 -0
  727. package/registry/entries/apps/plugin-viewer.json +27 -0
  728. package/registry/entries/apps/relationship-viewer.json +27 -0
  729. package/registry/entries/apps/runtime-debugger.json +27 -0
  730. package/registry/entries/apps/shopify.json +31 -0
  731. package/registry/entries/apps/skills-viewer.json +27 -0
  732. package/registry/entries/apps/steward.json +31 -0
  733. package/registry/entries/apps/training.json +54 -0
  734. package/registry/entries/apps/trajectory-viewer.json +27 -0
  735. package/registry/entries/apps/vincent.json +31 -0
  736. package/registry/entries/connectors/bluebubbles.json +99 -0
  737. package/registry/entries/connectors/bluesky.json +173 -0
  738. package/registry/entries/connectors/discord.json +119 -0
  739. package/registry/entries/connectors/farcaster.json +174 -0
  740. package/registry/entries/connectors/feishu.json +79 -0
  741. package/registry/entries/connectors/google-chat.json +120 -0
  742. package/registry/entries/connectors/google.json +82 -0
  743. package/registry/entries/connectors/imessage.json +96 -0
  744. package/registry/entries/connectors/instagram.json +64 -0
  745. package/registry/entries/connectors/line.json +86 -0
  746. package/registry/entries/connectors/matrix.json +94 -0
  747. package/registry/entries/connectors/mattermost.json +110 -0
  748. package/registry/entries/connectors/msteams.json +104 -0
  749. package/registry/entries/connectors/nextcloud-talk.json +104 -0
  750. package/registry/entries/connectors/nostr.json +70 -0
  751. package/registry/entries/connectors/signal.json +81 -0
  752. package/registry/entries/connectors/slack.json +102 -0
  753. package/registry/entries/connectors/telegram.json +71 -0
  754. package/registry/entries/connectors/tlon.json +94 -0
  755. package/registry/entries/connectors/twitch.json +110 -0
  756. package/registry/entries/connectors/whatsapp.json +113 -0
  757. package/registry/entries/connectors/x.json +231 -0
  758. package/registry/entries/connectors/zalo.json +112 -0
  759. package/registry/entries/connectors/zalouser.json +122 -0
  760. package/registry/entries/plugins/agent-orchestrator.json +33 -0
  761. package/registry/entries/plugins/agent-skills.json +72 -0
  762. package/registry/entries/plugins/anthropic.json +73 -0
  763. package/registry/entries/plugins/app-control.json +23 -0
  764. package/registry/entries/plugins/auto-trader.json +203 -0
  765. package/registry/entries/plugins/background-runner.json +26 -0
  766. package/registry/entries/plugins/blooio.json +102 -0
  767. package/registry/entries/plugins/browser.json +75 -0
  768. package/registry/entries/plugins/cli.json +40 -0
  769. package/registry/entries/plugins/clipboard.json +44 -0
  770. package/registry/entries/plugins/coding-tools.json +71 -0
  771. package/registry/entries/plugins/commands.json +63 -0
  772. package/registry/entries/plugins/computeruse.json +74 -0
  773. package/registry/entries/plugins/copilot-proxy.json +93 -0
  774. package/registry/entries/plugins/directives.json +63 -0
  775. package/registry/entries/plugins/edge-tts.json +97 -0
  776. package/registry/entries/plugins/elevenlabs.json +169 -0
  777. package/registry/entries/plugins/elizacloud.json +208 -0
  778. package/registry/entries/plugins/evm.json +134 -0
  779. package/registry/entries/plugins/experience.json +34 -0
  780. package/registry/entries/plugins/facewear.json +131 -0
  781. package/registry/entries/plugins/form.json +26 -0
  782. package/registry/entries/plugins/github.json +93 -0
  783. package/registry/entries/plugins/gmail-watch.json +25 -0
  784. package/registry/entries/plugins/goals.json +77 -0
  785. package/registry/entries/plugins/google-genai.json +106 -0
  786. package/registry/entries/plugins/groq.json +93 -0
  787. package/registry/entries/plugins/hedera.json +48 -0
  788. package/registry/entries/plugins/inmemorydb.json +25 -0
  789. package/registry/entries/plugins/linear.json +51 -0
  790. package/registry/entries/plugins/local-inference.json +142 -0
  791. package/registry/entries/plugins/local-storage.json +36 -0
  792. package/registry/entries/plugins/localdb.json +25 -0
  793. package/registry/entries/plugins/mcp.json +44 -0
  794. package/registry/entries/plugins/memory.json +124 -0
  795. package/registry/entries/plugins/minecraft.json +79 -0
  796. package/registry/entries/plugins/moltbook.json +83 -0
  797. package/registry/entries/plugins/music.json +155 -0
  798. package/registry/entries/plugins/mysticism.json +48 -0
  799. package/registry/entries/plugins/nearai.json +82 -0
  800. package/registry/entries/plugins/ngrok.json +69 -0
  801. package/registry/entries/plugins/ollama.json +96 -0
  802. package/registry/entries/plugins/openai.json +189 -0
  803. package/registry/entries/plugins/openrouter.json +188 -0
  804. package/registry/entries/plugins/pdf.json +26 -0
  805. package/registry/entries/plugins/plugin-manager.json +23 -0
  806. package/registry/entries/plugins/prose.json +48 -0
  807. package/registry/entries/plugins/rlm.json +26 -0
  808. package/registry/entries/plugins/roblox.json +88 -0
  809. package/registry/entries/plugins/rss.json +64 -0
  810. package/registry/entries/plugins/s3-storage.json +91 -0
  811. package/registry/entries/plugins/scheduling.json +35 -0
  812. package/registry/entries/plugins/shell.json +94 -0
  813. package/registry/entries/plugins/social-alpha.json +72 -0
  814. package/registry/entries/plugins/tailscale.json +81 -0
  815. package/registry/entries/plugins/tee.json +53 -0
  816. package/registry/entries/plugins/todos.json +26 -0
  817. package/registry/entries/plugins/trajectory-logger.json +33 -0
  818. package/registry/entries/plugins/trust.json +39 -0
  819. package/registry/entries/plugins/tts.json +71 -0
  820. package/registry/entries/plugins/tunnel.json +45 -0
  821. package/registry/entries/plugins/twilio.json +168 -0
  822. package/registry/entries/plugins/vercel-ai-gateway.json +128 -0
  823. package/registry/entries/plugins/video.json +23 -0
  824. package/registry/entries/plugins/vision.json +43 -0
  825. package/registry/entries/plugins/webhooks.json +23 -0
  826. package/registry/entries/plugins/workflow.json +25 -0
  827. package/registry/entries/plugins/xai.json +75 -0
  828. package/registry/index.d.ts +2 -1
  829. package/registry/index.d.ts.map +1 -1
  830. package/registry/index.js +46 -12
  831. package/registry/loader.d.ts +2 -1
  832. package/registry/loader.d.ts.map +1 -1
  833. package/registry/loader.js +49 -2
  834. package/registry/schema.d.ts +244 -34
  835. package/registry/schema.d.ts.map +1 -1
  836. package/registry/schema.js +36 -0
  837. package/runtime/android-avf-microdroid-bridge.d.ts +29 -0
  838. package/runtime/android-avf-microdroid-bridge.d.ts.map +1 -0
  839. package/runtime/android-avf-microdroid-bridge.js +149 -0
  840. package/runtime/api-dev-settings-banner.d.ts.map +1 -1
  841. package/runtime/api-dev-settings-banner.js +5 -13
  842. package/runtime/app-core-runtime-hooks.d.ts +21 -0
  843. package/runtime/app-core-runtime-hooks.d.ts.map +1 -0
  844. package/runtime/app-core-runtime-hooks.js +10 -0
  845. package/runtime/autonomy-policy.d.ts +2 -0
  846. package/runtime/autonomy-policy.d.ts.map +1 -0
  847. package/runtime/autonomy-policy.js +4 -0
  848. package/runtime/desktop/AppWindowRenderer.d.ts +17 -0
  849. package/runtime/desktop/AppWindowRenderer.d.ts.map +1 -0
  850. package/runtime/desktop/AppWindowRenderer.js +360 -0
  851. package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts +2 -0
  852. package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts.map +1 -0
  853. package/runtime/desktop/DesktopSurfaceNavigationRuntime.js +41 -0
  854. package/runtime/desktop/DesktopTrayRuntime.d.ts +2 -0
  855. package/runtime/desktop/DesktopTrayRuntime.d.ts.map +1 -0
  856. package/runtime/desktop/DesktopTrayRuntime.js +174 -0
  857. package/runtime/desktop/DetachedShellRoot.d.ts +10 -0
  858. package/runtime/desktop/DetachedShellRoot.d.ts.map +1 -0
  859. package/runtime/desktop/DetachedShellRoot.js +111 -0
  860. package/runtime/desktop/index.d.ts +6 -0
  861. package/runtime/desktop/index.d.ts.map +1 -0
  862. package/runtime/desktop/index.js +5 -0
  863. package/runtime/desktop/tray-menu.d.ts +20 -0
  864. package/runtime/desktop/tray-menu.d.ts.map +1 -0
  865. package/runtime/desktop/tray-menu.js +143 -0
  866. package/runtime/dev-server.d.ts +1 -1
  867. package/runtime/dev-server.d.ts.map +1 -1
  868. package/runtime/dev-server.js +93 -17
  869. package/runtime/eliza.d.ts +75 -1
  870. package/runtime/eliza.d.ts.map +1 -1
  871. package/runtime/eliza.js +596 -122
  872. package/runtime/ensure-text-to-speech-handler.d.ts.map +1 -1
  873. package/runtime/ensure-text-to-speech-handler.js +10 -3
  874. package/runtime/mobile-safe-runtime.d.ts +181 -2
  875. package/runtime/mobile-safe-runtime.d.ts.map +1 -1
  876. package/runtime/mobile-safe-runtime.js +1019 -12
  877. package/runtime/mode/remote-forwarder.d.ts.map +1 -1
  878. package/runtime/mode/remote-forwarder.js +2 -2
  879. package/runtime/mode/route-mode-guard.d.ts +1 -2
  880. package/runtime/mode/route-mode-guard.d.ts.map +1 -1
  881. package/runtime/mode/route-mode-guard.js +4 -5
  882. package/runtime/mode/route-mode-matrix.d.ts.map +1 -1
  883. package/runtime/mode/route-mode-matrix.js +14 -1
  884. package/runtime/mode/runtime-mode.d.ts +1 -1
  885. package/runtime/mode/runtime-mode.d.ts.map +1 -1
  886. package/runtime/mode/runtime-mode.js +15 -4
  887. package/runtime/runtime-bootstrap-policy.d.ts.map +1 -1
  888. package/runtime/runtime-bootstrap-policy.js +14 -2
  889. package/runtime/telegram-standalone-handler.d.ts.map +1 -1
  890. package/runtime/telegram-standalone-handler.js +10 -9
  891. package/runtime/tts-cache-wiring.d.ts +29 -0
  892. package/runtime/tts-cache-wiring.d.ts.map +1 -0
  893. package/runtime/tts-cache-wiring.js +114 -0
  894. package/runtime/voice-warmup.d.ts +81 -0
  895. package/runtime/voice-warmup.d.ts.map +1 -0
  896. package/runtime/voice-warmup.js +111 -0
  897. package/scripts/android-sms-gateway-template.test.mjs +1014 -0
  898. package/scripts/aosp/README.md +19 -15
  899. package/scripts/aosp/compile-libllama.mjs +1344 -248
  900. package/scripts/aosp/compile-shim.mjs +47 -18
  901. package/scripts/aosp/deploy-pixel.mjs +405 -0
  902. package/scripts/aosp/lib/load-variant-config.mjs +3 -3
  903. package/scripts/aosp/llama-cpp-patches/README.md +8 -8
  904. package/scripts/aosp/llama-cpp-patches/apply-patches.mjs +23 -6
  905. package/scripts/aosp/llama-cpp-patches/polarquant/README.md +37 -0
  906. package/scripts/aosp/llama-cpp-patches/qjl/README.md +37 -0
  907. package/scripts/aosp/seccomp-shim/sigsys-handler-arm64.c +169 -0
  908. package/scripts/aosp/seccomp-shim/sigsys-handler-riscv64.c +217 -0
  909. package/scripts/aosp/smoke-cuttlefish.mjs +34 -4
  910. package/scripts/aosp/stage-default-models.mjs +18 -18
  911. package/scripts/aosp/variant-config-schema.ts +2 -2
  912. package/scripts/assert-required-bundled-packages.test.ts +534 -0
  913. package/scripts/audit-apple-store-sandbox.mjs +146 -0
  914. package/scripts/audit-live-test-surface.mjs +5 -2
  915. package/scripts/build-capacitor-app.mjs +21 -0
  916. package/scripts/build-flatpak.mjs +5 -5
  917. package/scripts/build-helpers/arm64-simd.mjs +72 -0
  918. package/scripts/build-helpers/omnivoice-merged.mjs +87 -0
  919. package/scripts/build-helpers/verify-fused-symbols.mjs +567 -0
  920. package/scripts/build-image.sh +1 -1
  921. package/scripts/build-llama-cpp-mtp.mjs +487 -0
  922. package/scripts/build-native-plugins.mjs +230 -18
  923. package/scripts/build-patched-electrobun-cli.mjs +68 -10
  924. package/scripts/build-win.mjs +1 -1
  925. package/scripts/bun-riscv64/Dockerfile +418 -0
  926. package/scripts/bun-riscv64/README.md +316 -0
  927. package/scripts/bun-riscv64/build.sh +469 -0
  928. package/scripts/bun-riscv64/bun-patches/0001-config-add-riscv64-arch.patch +74 -0
  929. package/scripts/bun-riscv64/bun-patches/0002-flags-add-riscv64-march-mabi.patch +16 -0
  930. package/scripts/bun-riscv64/bun-patches/0003-zig-add-riscv64-target-triple-and-cpu.patch +26 -0
  931. package/scripts/bun-riscv64/bun-patches/0004-webkit-force-local-mode-on-riscv64.patch +33 -0
  932. package/scripts/bun-riscv64/bun-patches/0005-tinycc-disable-on-riscv64.patch +16 -0
  933. package/scripts/bun-riscv64/bun-patches/0006-build-add-riscv64-cli-validation.patch +15 -0
  934. package/scripts/bun-riscv64/bun-patches/0007-deps-per-dep-riscv64-checks.patch +24 -0
  935. package/scripts/bun-riscv64/bun-patches/0008-source-stabilize-riscv64-musl-build.patch +226 -0
  936. package/scripts/bun-riscv64/bun-patches/0009-disable-wasm-streaming-hooks-for-c-loop.patch +162 -0
  937. package/scripts/bun-riscv64/bun-patches/0010-disable-inspector-profiler-for-riscv64-c-loop.patch +80 -0
  938. package/scripts/bun-riscv64/bun-patches/0011-process-arch-add-riscv64.patch +23 -0
  939. package/scripts/bun-riscv64/bun-patches/0012-cpu-features-add-riscv64-fallback.patch +13 -0
  940. package/scripts/bun-riscv64/bun-patches/0013-disable-console-inspector-hooks-for-riscv64-c-loop.patch +43 -0
  941. package/scripts/bun-riscv64/bun-patches/0014-disable-custom-inspector-dispatchers-on-riscv64.patch +127 -0
  942. package/scripts/bun-riscv64/bun-patches/0015-disable-jsc-profiler-builtins-on-riscv64.patch +75 -0
  943. package/scripts/bun-riscv64/bun-patches/0016-node-vm-disable-jit-cached-data-on-riscv64-c-loop.patch +96 -0
  944. package/scripts/bun-riscv64/bun-patches/0017-disable-performance-domjit-signature-on-riscv64-c-loop.patch +34 -0
  945. package/scripts/bun-riscv64/bun-patches/0018-fix-serialized-script-identifier-big-endian-path.patch +19 -0
  946. package/scripts/bun-riscv64/bun-patches/0019-add-wtf-timer-fire-bridge-for-c-loop.patch +24 -0
  947. package/scripts/bun-riscv64/bun-patches/0020-run-riscv64-smoke-test-under-qemu.patch +13 -0
  948. package/scripts/bun-riscv64/bun-patches/0021-fix-riscv64-linux-open-flags.patch +25 -0
  949. package/scripts/bun-riscv64/bun-patches/0022-zlib-riscv64-generic-kernels.patch +25 -0
  950. package/scripts/bun-riscv64/bun-patches/README.md +127 -0
  951. package/scripts/bun-riscv64/bun-version.json +202 -0
  952. package/scripts/bun-riscv64/run-build.sh +162 -0
  953. package/scripts/bun-riscv64/rust-core/0001-riscv64-rust-core-port.patch +868 -0
  954. package/scripts/bun-riscv64/rust-core/0002-second-wave-riscv64-source-gaps.patch +130 -0
  955. package/scripts/bun-riscv64/rust-core/0003-third-wave-riscv64-crash-handler-gaps.patch +78 -0
  956. package/scripts/bun-riscv64/rust-core/0004-rust-target-cpu-riscv64.patch +39 -0
  957. package/scripts/bun-riscv64/rust-core/0005-fifth-wave-riscv64-source-gaps.patch +96 -0
  958. package/scripts/bun-riscv64/rust-core/0006-cpp-wasm-and-inspector-guards-riscv64.patch +91 -0
  959. package/scripts/bun-riscv64/rust-core/0007-bun-alloc-max-align-t-riscv64.patch +36 -0
  960. package/scripts/bun-riscv64/rust-core/0008-workspace-lints-warn-not-deny-riscv64.patch +75 -0
  961. package/scripts/bun-riscv64/rust-core/0009-zigglobalobject-wasm-streaming-guards-riscv64.patch +109 -0
  962. package/scripts/bun-riscv64/rust-core/0010-tcc-externs-stub-on-riscv64.patch +62 -0
  963. package/scripts/bun-riscv64/rust-core/0011-clippy-ptr-cast-lints-warn-riscv64.patch +61 -0
  964. package/scripts/bun-riscv64/rust-core/README.md +80 -0
  965. package/scripts/bun-riscv64/rust-core/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
  966. package/scripts/bun-riscv64/rust-core/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
  967. package/scripts/bun-riscv64/rust-core/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
  968. package/scripts/bun-riscv64/rust-core/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
  969. package/scripts/bun-riscv64/rust-core/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +31 -0
  970. package/scripts/bun-riscv64/validate.sh +264 -0
  971. package/scripts/bun-riscv64/webkit-patches/0001-cherry-pick-llint-riscv64.recipe +155 -0
  972. package/scripts/bun-riscv64/webkit-patches/0002-cherry-pick-baseline-jit-riscv64.recipe +40 -0
  973. package/scripts/bun-riscv64/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
  974. package/scripts/bun-riscv64/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
  975. package/scripts/bun-riscv64/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
  976. package/scripts/bun-riscv64/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
  977. package/scripts/bun-riscv64/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +72 -0
  978. package/scripts/bun-riscv64/webkit-patches/README.md +146 -0
  979. package/scripts/check-homepage-public-readiness.mjs +353 -0
  980. package/scripts/check-homepage-release-data.mjs +110 -0
  981. package/scripts/check-i18n.mjs +2 -1
  982. package/scripts/check-real-local-chat.ts +147 -0
  983. package/scripts/check-real-local-provisioning.ts +104 -0
  984. package/scripts/check-real-local-reset.ts +249 -0
  985. package/scripts/check-sms-gateway-completion-audit.mjs +428 -0
  986. package/scripts/check-sms-gateway-readiness.mjs +266 -0
  987. package/scripts/clean-repo.mjs +5 -5
  988. package/scripts/codesign-mas.mjs +222 -16
  989. package/scripts/collect-docker-runtime-deps.mjs +229 -0
  990. package/scripts/continue-sms-gateway-work.mjs +121 -0
  991. package/scripts/copy-runtime-node-modules.ts +903 -195
  992. package/scripts/deploy-cloud-api-production-gateway.mjs +52 -0
  993. package/scripts/desktop-build.mjs +655 -101
  994. package/scripts/dev-platform.mjs +346 -102
  995. package/scripts/dev-startup-smoke.mjs +248 -0
  996. package/scripts/dev-ui.mjs +418 -176
  997. package/scripts/disable-local-eliza-workspace.mjs +35 -0
  998. package/scripts/docker-ci-smoke.sh +298 -96
  999. package/scripts/docker-entrypoint.sh +62 -1
  1000. package/scripts/docker-entrypoint.test.ts +283 -0
  1001. package/scripts/ensure-avatars.mjs +2 -2
  1002. package/scripts/ensure-electrobun-core.mjs +1 -1
  1003. package/scripts/ensure-generated-core-proto-js.mjs +1 -1
  1004. package/scripts/ensure-type-package-aliases.mjs +62 -5
  1005. package/scripts/ensure-vision-deps.mjs +20 -1
  1006. package/scripts/entry.ts +1 -1
  1007. package/scripts/ffi-stub/Makefile +64 -0
  1008. package/scripts/ffi-stub/README.md +391 -0
  1009. package/scripts/ffi-stub/asr-ffi-smoke.ts +139 -0
  1010. package/scripts/ffi-stub/ffi-stub.c +539 -0
  1011. package/scripts/ffi-stub/ffi.h +538 -0
  1012. package/scripts/ffi-stub/libelizainference_stub.so +0 -0
  1013. package/scripts/ffi-stub/tts-stream-ffi-smoke.ts +349 -0
  1014. package/scripts/generate-first-run-voicelines.mjs +194 -0
  1015. package/scripts/generate-plugin-index.js +4 -3
  1016. package/scripts/generate-static-asset-manifest.mjs +1 -1
  1017. package/scripts/i18n-dynamic-keys.json +5 -5
  1018. package/scripts/init-submodules.mjs +2 -2
  1019. package/scripts/install-android-sms-gateway.md +177 -0
  1020. package/scripts/install-android-sms-gateway.mjs +1088 -0
  1021. package/scripts/ios-xcframework/README.md +74 -72
  1022. package/scripts/ios-xcframework/build-xcframework.mjs +204 -43
  1023. package/scripts/ios-xcframework/run-physical-device-smoke.mjs +1943 -0
  1024. package/scripts/ios-xcframework/runtime-symbol-shim.c +450 -0
  1025. package/scripts/kernel-patches/cpu-polar-kernels.mjs +441 -0
  1026. package/scripts/kernel-patches/cpu-simd-kernels.mjs +253 -0
  1027. package/scripts/kernel-patches/cpu-thread-parallelism.mjs +368 -0
  1028. package/scripts/kernel-patches/cuda-kernels.mjs +117 -0
  1029. package/scripts/kernel-patches/metal-kernels.mjs +1698 -109
  1030. package/scripts/kernel-patches/server-omnivoice-route.mjs +718 -0
  1031. package/scripts/kernel-patches/server-structured-output.mjs +279 -0
  1032. package/scripts/kernel-patches/vulkan-dispatch-log.mjs +166 -0
  1033. package/scripts/kernel-patches/vulkan-dispatch-log.test.mjs +50 -0
  1034. package/scripts/kernel-patches/vulkan-dispatch-patches/01-vulkan-shaders-gen.patch +30 -16
  1035. package/scripts/kernel-patches/vulkan-dispatch-patches/02-ggml-vulkan-pipelines.patch +75 -30
  1036. package/scripts/kernel-patches/vulkan-kernels.mjs +800 -49
  1037. package/scripts/lib/agent-source-watcher.mjs +174 -0
  1038. package/scripts/lib/agent-source-watcher.test.mjs +184 -0
  1039. package/scripts/lib/api-supervisor.mjs +78 -9
  1040. package/scripts/lib/api-supervisor.test.mjs +121 -0
  1041. package/scripts/lib/app-dir.mjs +2 -16
  1042. package/scripts/lib/apple-entitlement-audit.mjs +655 -0
  1043. package/scripts/lib/apple-entitlement-audit.test.mjs +144 -0
  1044. package/scripts/lib/bun-version-guard.mjs +13 -13
  1045. package/scripts/lib/capacitor-plugin-build-needed.mjs +4 -3
  1046. package/scripts/lib/capacitor-plugin-names.mjs +30 -14
  1047. package/scripts/lib/desktop-preflight.mjs +9 -5
  1048. package/scripts/lib/desktop-startup-embedding-warmup-policy.mjs +51 -0
  1049. package/scripts/lib/desktop-startup-embedding-warmup-policy.test.mjs +55 -0
  1050. package/scripts/lib/duet-bridge.d.mts +63 -0
  1051. package/scripts/lib/duet-bridge.mjs +193 -0
  1052. package/scripts/lib/node-path-env.mjs +4 -2
  1053. package/scripts/lib/orchestrator-desktop-dev-banner.mjs +12 -3
  1054. package/scripts/lib/patch-bun-exports.mjs +90 -27
  1055. package/scripts/lib/patch-bun-exports.test.mjs +79 -0
  1056. package/scripts/lib/renderer-build-action.mjs +35 -0
  1057. package/scripts/lib/renderer-build-action.test.mjs +70 -0
  1058. package/scripts/lib/stage-android-agent.mjs +748 -99
  1059. package/scripts/lib/sync-eliza-env-aliases.mjs +3 -25
  1060. package/scripts/lib/ui-smoke-stub-decision.mjs +33 -0
  1061. package/scripts/lib/ui-smoke-stub-decision.test.mjs +46 -0
  1062. package/scripts/lib/vite-renderer-dist-stale.mjs +5 -0
  1063. package/scripts/lib/voice-latency-report.mjs +154 -0
  1064. package/scripts/lifeops-prompt-benchmark.ts +21 -12
  1065. package/scripts/link-docker-local-app-packages.mjs +89 -36
  1066. package/scripts/local-stt-bench.ts +192 -0
  1067. package/scripts/maintain-cloud-api-production-gateway.mjs +54 -0
  1068. package/scripts/mas-smoke.mjs +459 -0
  1069. package/scripts/mas-smoke.test.mjs +220 -0
  1070. package/scripts/mobile-auth-simulator-smoke.mjs +0 -1
  1071. package/scripts/normalize-eliza-capture.ts +97 -0
  1072. package/scripts/omnivoice-fuse/prepare.mjs +2543 -23
  1073. package/scripts/pack-upstreams.mjs +65 -5
  1074. package/scripts/package-electrobun-linux.mjs +303 -0
  1075. package/scripts/patch-deps.mjs +5 -3
  1076. package/scripts/patches/llama-mobile-kokoro-tts.patch +480 -0
  1077. package/scripts/playwright-ui-live-stack.ts +194 -49
  1078. package/scripts/playwright-ui-smoke-api-stub.mjs +3501 -109
  1079. package/scripts/pre-review-local.mjs +2 -2
  1080. package/scripts/prepare-ios-cocoapods.sh +41 -3
  1081. package/scripts/release-check.ts +180 -84
  1082. package/scripts/release-workflow-drift.test.ts +57 -0
  1083. package/scripts/relink-workspace-packages-to-dist.mjs +21 -4
  1084. package/scripts/rt.mjs +16 -1
  1085. package/scripts/run-biome-check.mjs +1 -1
  1086. package/scripts/run-coding-agent-e2e.mjs +3 -3
  1087. package/scripts/run-eliza-app-core-script.mjs +34 -0
  1088. package/scripts/run-local-plugin-live-smoke.mjs +71 -2
  1089. package/scripts/run-mobile-build-android-app-actions.test.mjs +426 -0
  1090. package/scripts/run-mobile-build.mjs +4757 -607
  1091. package/scripts/run-node-runtime.mjs +184 -7
  1092. package/scripts/run-node-runtime.test.mjs +167 -0
  1093. package/scripts/run-node-tsx.mjs +80 -33
  1094. package/scripts/run-node.mjs +41 -1
  1095. package/scripts/run-production-build.mjs +34 -27
  1096. package/scripts/run-release-check.mjs +19 -0
  1097. package/scripts/run-release-contract-suite.mjs +107 -14
  1098. package/scripts/run-ui-smoke-playwright-suite.mjs +0 -2
  1099. package/scripts/runtime-package-manifest.ts +21 -3
  1100. package/scripts/setup-upstreams.mjs +42 -1
  1101. package/scripts/sms-gateway-status.mjs +194 -0
  1102. package/scripts/stage-android-agent.test.mjs +97 -0
  1103. package/scripts/stage-elizavoice-lib.mjs +203 -0
  1104. package/scripts/startup-integration-script-drift.test.ts +82 -4
  1105. package/scripts/streaming-pipeline-bench.ts +543 -0
  1106. package/scripts/sync-homepage-porkbun-dns.mjs +262 -0
  1107. package/scripts/test-sms-gateway-software.mjs +100 -0
  1108. package/scripts/type-audit.mjs +1 -1
  1109. package/scripts/validate-bluebubbles-outbound.mjs +293 -0
  1110. package/scripts/validate-cdn-assets.mjs +15 -7
  1111. package/scripts/validate-regression-matrix.mjs +109 -8
  1112. package/scripts/verify-android-sms-gateway-e2e.mjs +362 -0
  1113. package/scripts/verify-bluebubbles-gateway-e2e.mjs +191 -0
  1114. package/scripts/verify-bluebubbles-inbound-readiness.mjs +88 -0
  1115. package/scripts/verify-cloud-api-production-deploy.mjs +87 -0
  1116. package/scripts/verify-cloud-sms-onboarding-flow.mjs +336 -0
  1117. package/scripts/voice/freeze-voice.mjs +521 -0
  1118. package/scripts/voice-attribution-smoke.ts +538 -0
  1119. package/scripts/voice-create-profile.mjs +379 -0
  1120. package/scripts/voice-duet.mjs +1355 -0
  1121. package/scripts/voice-e2e-hardware.ts +871 -0
  1122. package/scripts/voice-interactive.mjs +1750 -0
  1123. package/scripts/voice-latency-report.mjs +96 -0
  1124. package/scripts/voice-latency-report.test.ts +176 -0
  1125. package/scripts/voice-preset/build-default-voice-preset.mjs +249 -0
  1126. package/scripts/voice-preset/build-onboarding-voice.mjs +281 -0
  1127. package/scripts/watch-sms-gateway-readiness.mjs +303 -0
  1128. package/scripts/write-homepage-release-data.mjs +458 -26
  1129. package/security/agent-vault-id.d.ts +1 -1
  1130. package/security/agent-vault-id.js +1 -1
  1131. package/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -1
  1132. package/security/hydrate-wallet-keys-from-platform-store.js +23 -14
  1133. package/security/platform-secure-store-node.d.ts +2 -2
  1134. package/security/platform-secure-store-node.js +3 -3
  1135. package/security/wallet-os-store-actions.d.ts +0 -9
  1136. package/security/wallet-os-store-actions.d.ts.map +1 -1
  1137. package/security/wallet-os-store-actions.js +3 -10
  1138. package/services/account-pool.d.ts +23 -14
  1139. package/services/account-pool.d.ts.map +1 -1
  1140. package/services/account-pool.js +86 -24
  1141. package/services/account-usage.d.ts.map +1 -1
  1142. package/services/account-usage.js +2 -5
  1143. package/services/ambient-audio/consent.d.ts +9 -0
  1144. package/services/ambient-audio/consent.d.ts.map +1 -0
  1145. package/services/ambient-audio/consent.js +28 -0
  1146. package/services/ambient-audio/index.d.ts +7 -0
  1147. package/services/ambient-audio/index.d.ts.map +1 -0
  1148. package/services/ambient-audio/index.js +4 -0
  1149. package/services/ambient-audio/replay-buffer.d.ts +14 -0
  1150. package/services/ambient-audio/replay-buffer.d.ts.map +1 -0
  1151. package/services/ambient-audio/replay-buffer.js +66 -0
  1152. package/services/ambient-audio/response-gate.d.ts +3 -0
  1153. package/services/ambient-audio/response-gate.d.ts.map +1 -0
  1154. package/services/ambient-audio/response-gate.js +33 -0
  1155. package/services/ambient-audio/service.d.ts +22 -0
  1156. package/services/ambient-audio/service.d.ts.map +1 -0
  1157. package/services/ambient-audio/service.js +47 -0
  1158. package/services/ambient-audio/types.d.ts +42 -0
  1159. package/services/ambient-audio/types.d.ts.map +1 -0
  1160. package/services/app-updates/update-policy.d.ts +64 -0
  1161. package/services/app-updates/update-policy.d.ts.map +1 -0
  1162. package/services/app-updates/update-policy.js +228 -0
  1163. package/services/auth-store.d.ts +37 -1
  1164. package/services/auth-store.d.ts.map +1 -1
  1165. package/services/auth-store.js +59 -26
  1166. package/services/cloud-jwks-store.d.ts +3 -3
  1167. package/services/cloud-jwks-store.d.ts.map +1 -1
  1168. package/services/cloud-jwks-store.js +5 -8
  1169. package/services/coding-account-bridge.d.ts +71 -0
  1170. package/services/coding-account-bridge.d.ts.map +1 -0
  1171. package/services/coding-account-bridge.js +267 -0
  1172. package/services/connector-target-catalog.d.ts +10 -3
  1173. package/services/connector-target-catalog.d.ts.map +1 -1
  1174. package/services/connector-target-catalog.js +7 -4
  1175. package/services/credential-tunnel-service.d.ts +66 -0
  1176. package/services/credential-tunnel-service.d.ts.map +1 -0
  1177. package/services/credential-tunnel-service.js +227 -0
  1178. package/services/github-credentials.d.ts +1 -1
  1179. package/services/github-credentials.js +1 -1
  1180. package/services/inference-abort.d.ts +47 -0
  1181. package/services/inference-abort.d.ts.map +1 -0
  1182. package/services/inference-abort.js +76 -0
  1183. package/services/persistence.d.ts +2 -3
  1184. package/services/persistence.d.ts.map +1 -1
  1185. package/services/persistence.js +2 -3
  1186. package/services/phrase-chunked-tts.d.ts +136 -0
  1187. package/services/phrase-chunked-tts.d.ts.map +1 -0
  1188. package/services/phrase-chunked-tts.js +208 -0
  1189. package/services/sandbox-registry.d.ts +78 -0
  1190. package/services/sandbox-registry.d.ts.map +1 -0
  1191. package/services/sandbox-registry.js +323 -0
  1192. package/services/secrets-manager-installer.d.ts +8 -1
  1193. package/services/secrets-manager-installer.d.ts.map +1 -1
  1194. package/services/secrets-manager-installer.js +27 -2
  1195. package/services/sensitive-requests/cloud-link-adapter.d.ts +15 -0
  1196. package/services/sensitive-requests/cloud-link-adapter.d.ts.map +1 -0
  1197. package/services/sensitive-requests/cloud-link-adapter.js +73 -0
  1198. package/services/sensitive-requests/index.d.ts +27 -0
  1199. package/services/sensitive-requests/index.d.ts.map +1 -0
  1200. package/services/sensitive-requests/index.js +51 -0
  1201. package/services/sensitive-requests/instruct-dm-only-adapter.d.ts +14 -0
  1202. package/services/sensitive-requests/instruct-dm-only-adapter.d.ts.map +1 -0
  1203. package/services/sensitive-requests/instruct-dm-only-adapter.js +22 -0
  1204. package/services/sensitive-requests/owner-app-inline-adapter.d.ts +3 -0
  1205. package/services/sensitive-requests/owner-app-inline-adapter.d.ts.map +1 -0
  1206. package/services/sensitive-requests/owner-app-inline-adapter.js +146 -0
  1207. package/services/sensitive-requests/owner-app-oauth-adapter.d.ts +3 -0
  1208. package/services/sensitive-requests/owner-app-oauth-adapter.d.ts.map +1 -0
  1209. package/services/sensitive-requests/owner-app-oauth-adapter.js +156 -0
  1210. package/services/sensitive-requests/public-link-adapter.d.ts +14 -0
  1211. package/services/sensitive-requests/public-link-adapter.d.ts.map +1 -0
  1212. package/services/sensitive-requests/public-link-adapter.js +86 -0
  1213. package/services/sensitive-requests/tunnel-link-adapter.d.ts +17 -0
  1214. package/services/sensitive-requests/tunnel-link-adapter.d.ts.map +1 -0
  1215. package/services/sensitive-requests/tunnel-link-adapter.js +38 -0
  1216. package/services/steward-credentials.d.ts +1 -1
  1217. package/services/steward-credentials.d.ts.map +1 -1
  1218. package/services/steward-credentials.js +10 -6
  1219. package/services/steward-sidecar/health-check.d.ts.map +1 -1
  1220. package/services/steward-sidecar/health-check.js +4 -3
  1221. package/services/steward-sidecar/process-management.d.ts +1 -1
  1222. package/services/steward-sidecar/process-management.d.ts.map +1 -1
  1223. package/services/steward-sidecar/process-management.js +9 -3
  1224. package/services/steward-sidecar/types.d.ts +1 -1
  1225. package/services/steward-sidecar/types.d.ts.map +1 -1
  1226. package/services/steward-sidecar/wallet-setup.d.ts.map +1 -1
  1227. package/services/steward-sidecar/wallet-setup.js +8 -7
  1228. package/services/steward-sidecar.d.ts +2 -2
  1229. package/services/steward-sidecar.d.ts.map +1 -1
  1230. package/services/steward-sidecar.js +27 -19
  1231. package/services/task-host-capabilities.d.ts +60 -0
  1232. package/services/task-host-capabilities.d.ts.map +1 -0
  1233. package/services/task-host-capabilities.js +122 -0
  1234. package/services/tool-call-cache/index.d.ts +2 -2
  1235. package/services/tool-call-cache/index.d.ts.map +1 -1
  1236. package/services/tool-call-cache/index.js +1 -1
  1237. package/services/trigger-event-bridge.js +1 -1
  1238. package/services/tunnel-to-mobile/index.d.ts +2 -0
  1239. package/services/tunnel-to-mobile/index.d.ts.map +1 -0
  1240. package/services/tunnel-to-mobile/index.js +1 -0
  1241. package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts +105 -0
  1242. package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts.map +1 -0
  1243. package/services/tunnel-to-mobile/tunnel-to-mobile-client.js +190 -0
  1244. package/services/vault-bootstrap.d.ts.map +1 -1
  1245. package/services/vault-bootstrap.js +48 -21
  1246. package/services/vault-mirror.d.ts +1 -1
  1247. package/services/vault-mirror.d.ts.map +1 -1
  1248. package/services/vault-mirror.js +29 -6
  1249. package/services/voice-profiles/diarization-pipeline.d.ts +6 -0
  1250. package/services/voice-profiles/diarization-pipeline.d.ts.map +1 -0
  1251. package/services/voice-profiles/diarization-pipeline.js +20 -0
  1252. package/services/voice-profiles/index.d.ts +12 -0
  1253. package/services/voice-profiles/index.d.ts.map +1 -0
  1254. package/services/voice-profiles/index.js +5 -0
  1255. package/services/voice-profiles/nickname-evaluator.d.ts +14 -0
  1256. package/services/voice-profiles/nickname-evaluator.d.ts.map +1 -0
  1257. package/services/voice-profiles/nickname-evaluator.js +46 -0
  1258. package/services/voice-profiles/owner-confidence.d.ts +10 -0
  1259. package/services/voice-profiles/owner-confidence.d.ts.map +1 -0
  1260. package/services/voice-profiles/owner-confidence.js +38 -0
  1261. package/services/voice-profiles/private-challenge.d.ts +20 -0
  1262. package/services/voice-profiles/private-challenge.d.ts.map +1 -0
  1263. package/services/voice-profiles/private-challenge.js +44 -0
  1264. package/services/voice-profiles/store.d.ts +21 -0
  1265. package/services/voice-profiles/store.d.ts.map +1 -0
  1266. package/services/voice-profiles/store.js +50 -0
  1267. package/services/voice-profiles/types.d.ts +38 -0
  1268. package/services/voice-profiles/types.d.ts.map +1 -0
  1269. package/services/voice-profiles/types.js +1 -0
  1270. package/styles/electrobun-mac-window-drag.css +4 -4
  1271. package/test/helpers/__tests__/live-agent-test.smoke.test.ts +43 -70
  1272. package/test/helpers/browser-mocks.ts +2 -2
  1273. package/test/helpers/conditional-tests.ts +2 -2
  1274. package/test/helpers/i18n.ts +1 -1
  1275. package/test/helpers/live-agent-test.ts +537 -551
  1276. package/test/helpers/live-provider.test.ts +4 -4
  1277. package/test/helpers/live-provider.ts +41 -7
  1278. package/test/helpers/live-runtime-server.ts +4 -4
  1279. package/test/helpers/pglite-runtime.ts +1 -1
  1280. package/test/helpers/real-runtime.ts +54 -15
  1281. package/test/helpers/trajectory-harness.ts +11 -7
  1282. package/test/scripts/start-eliza-live.ts +9 -0
  1283. package/test/scripts/test-parallel.mjs +1 -1
  1284. package/test/scripts/test-root-unit.mjs +6 -7
  1285. package/ui-compat.d.ts +13 -2
  1286. package/ui-compat.d.ts.map +1 -1
  1287. package/ui-compat.js +19 -3
  1288. package/api/auth-pairing-compat-routes.d.ts +0 -17
  1289. package/api/auth-pairing-compat-routes.d.ts.map +0 -1
  1290. package/api/auth-pairing-compat-routes.js +0 -301
  1291. package/api/local-inference-compat-routes.d.ts +0 -16
  1292. package/api/local-inference-compat-routes.d.ts.map +0 -1
  1293. package/api/local-inference-compat-routes.js +0 -617
  1294. package/api/onboarding-compat-routes.d.ts +0 -4
  1295. package/api/onboarding-compat-routes.d.ts.map +0 -1
  1296. package/api/onboarding-compat-routes.js +0 -207
  1297. package/api/plugins-compat-routes.d.ts +0 -103
  1298. package/api/plugins-compat-routes.d.ts.map +0 -1
  1299. package/api/plugins-compat-routes.js +0 -1181
  1300. package/api/server-onboarding-compat.d.ts +0 -31
  1301. package/api/server-onboarding-compat.d.ts.map +0 -1
  1302. package/api/server-onboarding-compat.js +0 -283
  1303. package/benchmark/cua-routes.d.ts +0 -10
  1304. package/benchmark/cua-routes.d.ts.map +0 -1
  1305. package/benchmark/cua-routes.js +0 -179
  1306. package/benchmark/mock-plugin-base.d.ts +0 -9
  1307. package/benchmark/mock-plugin-base.d.ts.map +0 -1
  1308. package/benchmark/mock-plugin-base.js +0 -325
  1309. package/cli/parse-duration.d.ts +0 -5
  1310. package/cli/parse-duration.d.ts.map +0 -1
  1311. package/cli/parse-duration.js +0 -27
  1312. package/patches/llama-cpp-capacitor@0.1.5.patch +0 -2387
  1313. package/platform/agent-browser-stub.d.ts +0 -27
  1314. package/platform/agent-browser-stub.d.ts.map +0 -1
  1315. package/platform/agent-browser-stub.js +0 -16
  1316. package/platforms/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +0 -26
  1317. package/platforms/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
  1318. package/platforms/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -34
  1319. package/platforms/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +0 -18
  1320. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512@2x.png +0 -0
  1321. package/platforms/electrobun/assets/appIcon.png +0 -0
  1322. package/platforms/electrobun/scripts/build-whisper-universal.sh +0 -137
  1323. package/platforms/electrobun/scripts/build-whisper.sh +0 -95
  1324. package/platforms/electrobun/src/libMacWindowEffects.dylib +0 -0
  1325. package/platforms/electrobun/src/native/whisper.ts +0 -280
  1326. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  1327. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  1328. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  1329. package/registry/generate-apps.d.ts +0 -2
  1330. package/registry/generate-apps.d.ts.map +0 -1
  1331. package/registry/generate-apps.js +0 -338
  1332. package/registry/generate.d.ts +0 -2
  1333. package/registry/generate.d.ts.map +0 -1
  1334. package/registry/generate.js +0 -506
  1335. package/runtime/embedding-manager-support.d.ts +0 -77
  1336. package/runtime/embedding-manager-support.d.ts.map +0 -1
  1337. package/runtime/embedding-manager-support.js +0 -309
  1338. package/runtime/embedding-presets.d.ts +0 -5
  1339. package/runtime/embedding-presets.d.ts.map +0 -1
  1340. package/runtime/embedding-presets.js +0 -47
  1341. package/runtime/embedding-warmup-policy.d.ts +0 -13
  1342. package/runtime/embedding-warmup-policy.d.ts.map +0 -1
  1343. package/runtime/embedding-warmup-policy.js +0 -33
  1344. package/runtime/ensure-local-inference-handler.d.ts +0 -25
  1345. package/runtime/ensure-local-inference-handler.d.ts.map +0 -1
  1346. package/runtime/ensure-local-inference-handler.js +0 -389
  1347. package/runtime/mobile-local-inference-gate.d.ts +0 -21
  1348. package/runtime/mobile-local-inference-gate.d.ts.map +0 -1
  1349. package/runtime/mobile-local-inference-gate.js +0 -24
  1350. package/scripts/aosp/avd-test.mjs +0 -403
  1351. package/scripts/aosp/boot-validate.mjs +0 -536
  1352. package/scripts/aosp/build-aosp.mjs +0 -448
  1353. package/scripts/aosp/build-bootanimation.mjs +0 -178
  1354. package/scripts/aosp/capture-screens.mjs +0 -325
  1355. package/scripts/aosp/e2e-validate.mjs +0 -225
  1356. package/scripts/aosp/lint-init-rc.mjs +0 -258
  1357. package/scripts/aosp/llama-shim/eliza_llama_shim.c +0 -276
  1358. package/scripts/aosp/sim.mjs +0 -277
  1359. package/scripts/aosp/sync-to-aosp.mjs +0 -134
  1360. package/scripts/aosp/validate.mjs +0 -1273
  1361. package/scripts/build-llama-cpp-dflash.mjs +0 -1866
  1362. package/scripts/generate-onboarding-voicelines.mjs +0 -194
  1363. package/scripts/generated/static-asset-manifest.json +0 -4
  1364. package/scripts/normalize-parallax-capture.ts +0 -97
  1365. package/scripts/omnivoice-fuse/Makefile +0 -44
  1366. package/scripts/omnivoice-fuse/README.md +0 -266
  1367. package/scripts/omnivoice-fuse/cmake-graft.mjs +0 -180
  1368. package/scripts/omnivoice-fuse/ffi-stub.c +0 -222
  1369. package/scripts/omnivoice-fuse/ffi.h +0 -158
  1370. package/scripts/omnivoice-fuse/libelizainference_stub.dylib +0 -0
  1371. package/scripts/omnivoice-fuse/verify-symbols.mjs +0 -138
  1372. package/security/cloud-secret-store.d.ts +0 -34
  1373. package/security/cloud-secret-store.d.ts.map +0 -1
  1374. package/security/cloud-secret-store.js +0 -65
  1375. package/security/export-guard.d.ts +0 -34
  1376. package/security/export-guard.d.ts.map +0 -1
  1377. package/security/export-guard.js +0 -127
  1378. package/services/local-inference/__stress__/cache-stress-helpers.d.ts +0 -76
  1379. package/services/local-inference/__stress__/cache-stress-helpers.d.ts.map +0 -1
  1380. package/services/local-inference/__stress__/cache-stress-helpers.js +0 -238
  1381. package/services/local-inference/active-model.d.ts +0 -180
  1382. package/services/local-inference/active-model.d.ts.map +0 -1
  1383. package/services/local-inference/active-model.js +0 -362
  1384. package/services/local-inference/assignments.d.ts +0 -58
  1385. package/services/local-inference/assignments.d.ts.map +0 -1
  1386. package/services/local-inference/assignments.js +0 -179
  1387. package/services/local-inference/backend.d.ts +0 -200
  1388. package/services/local-inference/backend.d.ts.map +0 -1
  1389. package/services/local-inference/backend.js +0 -242
  1390. package/services/local-inference/bundled-models.d.ts +0 -34
  1391. package/services/local-inference/bundled-models.d.ts.map +0 -1
  1392. package/services/local-inference/bundled-models.js +0 -104
  1393. package/services/local-inference/cache-bridge.d.ts +0 -184
  1394. package/services/local-inference/cache-bridge.d.ts.map +0 -1
  1395. package/services/local-inference/cache-bridge.js +0 -333
  1396. package/services/local-inference/catalog.d.ts +0 -57
  1397. package/services/local-inference/catalog.d.ts.map +0 -1
  1398. package/services/local-inference/catalog.js +0 -262
  1399. package/services/local-inference/conversation-registry.d.ts +0 -122
  1400. package/services/local-inference/conversation-registry.d.ts.map +0 -1
  1401. package/services/local-inference/conversation-registry.js +0 -182
  1402. package/services/local-inference/device-bridge.d.ts +0 -139
  1403. package/services/local-inference/device-bridge.d.ts.map +0 -1
  1404. package/services/local-inference/device-bridge.js +0 -774
  1405. package/services/local-inference/dflash-doctor.d.ts +0 -27
  1406. package/services/local-inference/dflash-doctor.d.ts.map +0 -1
  1407. package/services/local-inference/dflash-doctor.js +0 -149
  1408. package/services/local-inference/dflash-server.d.ts +0 -248
  1409. package/services/local-inference/dflash-server.d.ts.map +0 -1
  1410. package/services/local-inference/dflash-server.js +0 -1076
  1411. package/services/local-inference/downloader.d.ts +0 -48
  1412. package/services/local-inference/downloader.d.ts.map +0 -1
  1413. package/services/local-inference/downloader.js +0 -688
  1414. package/services/local-inference/engine.d.ts +0 -282
  1415. package/services/local-inference/engine.d.ts.map +0 -1
  1416. package/services/local-inference/engine.js +0 -743
  1417. package/services/local-inference/external-scanner.d.ts +0 -17
  1418. package/services/local-inference/external-scanner.d.ts.map +0 -1
  1419. package/services/local-inference/external-scanner.js +0 -261
  1420. package/services/local-inference/handler-registry.d.ts +0 -72
  1421. package/services/local-inference/handler-registry.d.ts.map +0 -1
  1422. package/services/local-inference/handler-registry.js +0 -159
  1423. package/services/local-inference/hardware.d.ts +0 -26
  1424. package/services/local-inference/hardware.d.ts.map +0 -1
  1425. package/services/local-inference/hardware.js +0 -139
  1426. package/services/local-inference/hf-search.d.ts +0 -19
  1427. package/services/local-inference/hf-search.d.ts.map +0 -1
  1428. package/services/local-inference/hf-search.js +0 -169
  1429. package/services/local-inference/index.d.ts +0 -10
  1430. package/services/local-inference/index.d.ts.map +0 -1
  1431. package/services/local-inference/index.js +0 -7
  1432. package/services/local-inference/llama-server-metrics.d.ts +0 -108
  1433. package/services/local-inference/llama-server-metrics.d.ts.map +0 -1
  1434. package/services/local-inference/llama-server-metrics.js +0 -175
  1435. package/services/local-inference/manifest/index.d.ts +0 -4
  1436. package/services/local-inference/manifest/index.d.ts.map +0 -1
  1437. package/services/local-inference/manifest/index.js +0 -5
  1438. package/services/local-inference/manifest/schema.d.ts +0 -419
  1439. package/services/local-inference/manifest/schema.d.ts.map +0 -1
  1440. package/services/local-inference/manifest/schema.js +0 -227
  1441. package/services/local-inference/manifest/types.d.ts +0 -23
  1442. package/services/local-inference/manifest/types.d.ts.map +0 -1
  1443. package/services/local-inference/manifest/types.js +0 -5
  1444. package/services/local-inference/manifest/validator.d.ts +0 -43
  1445. package/services/local-inference/manifest/validator.d.ts.map +0 -1
  1446. package/services/local-inference/manifest/validator.js +0 -180
  1447. package/services/local-inference/paths.d.ts +0 -8
  1448. package/services/local-inference/paths.d.ts.map +0 -1
  1449. package/services/local-inference/paths.js +0 -7
  1450. package/services/local-inference/providers.d.ts +0 -61
  1451. package/services/local-inference/providers.d.ts.map +0 -1
  1452. package/services/local-inference/providers.js +0 -334
  1453. package/services/local-inference/ram-budget.d.ts +0 -57
  1454. package/services/local-inference/ram-budget.d.ts.map +0 -1
  1455. package/services/local-inference/ram-budget.js +0 -107
  1456. package/services/local-inference/readiness.d.ts +0 -9
  1457. package/services/local-inference/readiness.d.ts.map +0 -1
  1458. package/services/local-inference/readiness.js +0 -153
  1459. package/services/local-inference/recommendation.d.ts +0 -62
  1460. package/services/local-inference/recommendation.d.ts.map +0 -1
  1461. package/services/local-inference/recommendation.js +0 -309
  1462. package/services/local-inference/registry.d.ts +0 -35
  1463. package/services/local-inference/registry.d.ts.map +0 -1
  1464. package/services/local-inference/registry.js +0 -117
  1465. package/services/local-inference/router-handler.d.ts +0 -51
  1466. package/services/local-inference/router-handler.d.ts.map +0 -1
  1467. package/services/local-inference/router-handler.js +0 -165
  1468. package/services/local-inference/routing-policy.d.ts +0 -55
  1469. package/services/local-inference/routing-policy.d.ts.map +0 -1
  1470. package/services/local-inference/routing-policy.js +0 -195
  1471. package/services/local-inference/routing-preferences.d.ts +0 -8
  1472. package/services/local-inference/routing-preferences.d.ts.map +0 -1
  1473. package/services/local-inference/routing-preferences.js +0 -7
  1474. package/services/local-inference/service.d.ts +0 -88
  1475. package/services/local-inference/service.d.ts.map +0 -1
  1476. package/services/local-inference/service.js +0 -210
  1477. package/services/local-inference/session-pool.d.ts +0 -72
  1478. package/services/local-inference/session-pool.d.ts.map +0 -1
  1479. package/services/local-inference/session-pool.js +0 -125
  1480. package/services/local-inference/types.d.ts +0 -309
  1481. package/services/local-inference/types.d.ts.map +0 -1
  1482. package/services/local-inference/types.js +0 -23
  1483. package/services/local-inference/verify.d.ts +0 -8
  1484. package/services/local-inference/verify.d.ts.map +0 -1
  1485. package/services/local-inference/verify.js +0 -7
  1486. package/services/local-inference/voice/barge-in.d.ts +0 -15
  1487. package/services/local-inference/voice/barge-in.d.ts.map +0 -1
  1488. package/services/local-inference/voice/barge-in.js +0 -20
  1489. package/services/local-inference/voice/engine-bridge.d.ts +0 -256
  1490. package/services/local-inference/voice/engine-bridge.d.ts.map +0 -1
  1491. package/services/local-inference/voice/engine-bridge.js +0 -398
  1492. package/services/local-inference/voice/ffi-bindings.d.ts +0 -114
  1493. package/services/local-inference/voice/ffi-bindings.d.ts.map +0 -1
  1494. package/services/local-inference/voice/ffi-bindings.js +0 -281
  1495. package/services/local-inference/voice/index.d.ts +0 -51
  1496. package/services/local-inference/voice/index.d.ts.map +0 -1
  1497. package/services/local-inference/voice/index.js +0 -50
  1498. package/services/local-inference/voice/lifecycle.d.ts +0 -135
  1499. package/services/local-inference/voice/lifecycle.d.ts.map +0 -1
  1500. package/services/local-inference/voice/lifecycle.js +0 -189
  1501. package/services/local-inference/voice/phoneme-tokenizer.d.ts +0 -58
  1502. package/services/local-inference/voice/phoneme-tokenizer.d.ts.map +0 -1
  1503. package/services/local-inference/voice/phoneme-tokenizer.js +0 -53
  1504. package/services/local-inference/voice/phrase-cache.d.ts +0 -24
  1505. package/services/local-inference/voice/phrase-cache.d.ts.map +0 -1
  1506. package/services/local-inference/voice/phrase-cache.js +0 -32
  1507. package/services/local-inference/voice/phrase-chunker.d.ts +0 -20
  1508. package/services/local-inference/voice/phrase-chunker.d.ts.map +0 -1
  1509. package/services/local-inference/voice/phrase-chunker.js +0 -85
  1510. package/services/local-inference/voice/ring-buffer.d.ts +0 -40
  1511. package/services/local-inference/voice/ring-buffer.d.ts.map +0 -1
  1512. package/services/local-inference/voice/ring-buffer.js +0 -85
  1513. package/services/local-inference/voice/rollback-queue.d.ts +0 -24
  1514. package/services/local-inference/voice/rollback-queue.d.ts.map +0 -1
  1515. package/services/local-inference/voice/rollback-queue.js +0 -49
  1516. package/services/local-inference/voice/scheduler.d.ts +0 -47
  1517. package/services/local-inference/voice/scheduler.d.ts.map +0 -1
  1518. package/services/local-inference/voice/scheduler.js +0 -123
  1519. package/services/local-inference/voice/shared-resources.d.ts +0 -119
  1520. package/services/local-inference/voice/shared-resources.d.ts.map +0 -1
  1521. package/services/local-inference/voice/shared-resources.js +0 -83
  1522. package/services/local-inference/voice/speaker-preset-cache.d.ts +0 -28
  1523. package/services/local-inference/voice/speaker-preset-cache.d.ts.map +0 -1
  1524. package/services/local-inference/voice/speaker-preset-cache.js +0 -44
  1525. package/services/local-inference/voice/types.d.ts +0 -80
  1526. package/services/local-inference/voice/types.d.ts.map +0 -1
  1527. package/services/local-inference/voice/voice-preset-format.d.ts +0 -56
  1528. package/services/local-inference/voice/voice-preset-format.d.ts.map +0 -1
  1529. package/services/local-inference/voice/voice-preset-format.js +0 -184
  1530. package/services/plugin-installer.d.ts +0 -22
  1531. package/services/plugin-installer.d.ts.map +0 -1
  1532. package/services/plugin-installer.js +0 -41
  1533. package/test/scripts/task-agent-live-smoke.ts +0 -1335
  1534. /package/services/{local-inference/voice → ambient-audio}/types.js +0 -0
package/runtime/eliza.js CHANGED
@@ -16,17 +16,27 @@ import { pathToFileURL } from "node:url";
16
16
  import { CUSTOM_PLUGINS_DIRNAME, getLastFailedPluginNames, loadElizaConfig, resolveDefaultAgentWorkspaceDir, resolvePackageEntry, resolveUserPath, scanDropInPlugins, applyCloudConfigToEnv as upstreamApplyCloudConfigToEnv, bootElizaRuntime as upstreamBootElizaRuntime, collectPluginNames as upstreamCollectPluginNames, configureLocalEmbeddingPlugin as upstreamConfigureLocalEmbeddingPlugin, shutdownRuntime as upstreamShutdownRuntime, startEliza as upstreamStartEliza, } from "@elizaos/agent";
17
17
  export { CHANNEL_PLUGIN_MAP } from "./channel-plugin-map.js";
18
18
  export { CUSTOM_PLUGINS_DIRNAME, resolvePackageEntry, scanDropInPlugins };
19
- import { AutonomyService, ChannelType, logger, stringToUuid, } from "@elizaos/core";
20
- import { ensureRuntimeSqlCompatibility, isMobilePlatform, resolveServerOnlyPort, syncAppEnvToEliza, syncElizaEnvAliases, syncResolvedApiPort, } from "@elizaos/shared";
21
- import { getApps, loadRegistry } from "../registry";
19
+ import { AutonomyService, ChannelType, logger, ModelType, stringToUuid, } from "@elizaos/core";
20
+ import { ensureRuntimeSqlCompatibility, formatError, formatErrorWithStack, isMobilePlatform, resolveDesktopApiPort, resolveServerOnlyPort, syncAppEnvToEliza, syncElizaEnvAliases, syncResolvedApiPort, } from "@elizaos/shared";
21
+ import { getApps, loadRegistry } from "../registry/index.js";
22
+ import { registerCoreSensitiveRequestAdapters } from "../services/sensitive-requests/index.js";
22
23
  import { listAppRoutePluginLoaders, } from "./app-route-plugin-registry.js";
23
- import { DEFAULT_MODELS_DIR, embeddingGgufFilePresent, ensureModel, findExistingEmbeddingModelForWarmupReuse, isEmbeddingWarmupReuseDisabled, } from "./embedding-manager-support.js";
24
- import { detectEmbeddingPreset } from "./embedding-presets.js";
25
- import { shouldWarmupLocalEmbeddingModel } from "./embedding-warmup-policy.js";
26
- import { ensureLocalInferenceHandler } from "./ensure-local-inference-handler.js";
24
+ import { shouldWarmupVoice, warmVoiceModels } from "./voice-warmup.js";
25
+ // plugin-local-inference loaded lazily to avoid static plugin boundary violations.
26
+ let _localInferenceRuntime;
27
+ async function _localInference() {
28
+ if (!_localInferenceRuntime) {
29
+ _localInferenceRuntime = await import("@elizaos/plugin-local-inference/runtime");
30
+ }
31
+ return _localInferenceRuntime;
32
+ }
33
+ import { getSharedCompatRuntimeState, patchHttpCreateServerForCompat, startApiServer, } from "../api/server.js";
34
+ const _require = createRequire(import.meta.url);
35
+ import { invalidateCorsAllowedPorts } from "../api/server-cors.js";
36
+ import { bootLap } from "../boot-profile.js";
37
+ import { isRuntimeAutonomyEnabled } from "./autonomy-policy.js";
27
38
  import { ensureTextToSpeechHandler, isEdgeTtsDisabled as isTextToSpeechEdgeTtsDisabled, } from "./ensure-text-to-speech-handler.js";
28
- import { shouldEnableMobileLocalInference } from "./mobile-local-inference-gate.js";
29
- import { updateStartupEmbeddingProgress } from "./startup-overlay.js";
39
+ import { updateStartupEmbeddingProgress, } from "./startup-overlay.js";
30
40
  import { handleTelegramStandaloneMessage } from "./telegram-standalone-handler.js";
31
41
  import { shouldStartTelegramStandaloneBot } from "./telegram-standalone-policy.js";
32
42
  const AUTONOMY_WORLD_ID = stringToUuid("00000000-0000-0000-0000-000000000001");
@@ -87,7 +97,7 @@ async function ensureAutonomyBootstrapContext(runtime) {
87
97
  const runtimeWithCompat = runtime;
88
98
  const adapter = runtime.adapter;
89
99
  const autonomousRoomId = stringToUuid(`autonomy-room-${runtime.agentId}`);
90
- await runtimeWithCompat.ensureWorldExists?.({
100
+ await runtimeWithCompat.ensureWorldExists({
91
101
  id: AUTONOMY_WORLD_ID,
92
102
  name: "Autonomy World",
93
103
  agentId: runtime.agentId,
@@ -97,7 +107,7 @@ async function ensureAutonomyBootstrapContext(runtime) {
97
107
  description: "World for autonomous agent thinking",
98
108
  },
99
109
  });
100
- await runtimeWithCompat.ensureRoomExists?.({
110
+ await runtimeWithCompat.ensureRoomExists({
101
111
  id: autonomousRoomId,
102
112
  name: "Autonomous Thoughts",
103
113
  worldId: AUTONOMY_WORLD_ID,
@@ -117,9 +127,9 @@ async function ensureAutonomyBootstrapContext(runtime) {
117
127
  description: "Dedicated entity for autonomy service prompts",
118
128
  },
119
129
  };
120
- const existingEntity = (await runtimeWithCompat.getEntityById?.(AUTONOMY_ENTITY_ID)) ?? null;
130
+ const existingEntity = (await runtimeWithCompat.getEntityById(AUTONOMY_ENTITY_ID)) ?? null;
121
131
  if (!existingEntity) {
122
- const created = await runtimeWithCompat.createEntity?.(autonomyEntity);
132
+ const created = await runtimeWithCompat.createEntity(autonomyEntity);
123
133
  if (!created && adapter?.upsertEntities) {
124
134
  await adapter.upsertEntities([autonomyEntity]);
125
135
  }
@@ -156,6 +166,48 @@ async function ensureAutonomyBootstrapContext(runtime) {
156
166
  await runtimeWithCompat.addParticipant(AUTONOMY_ENTITY_ID, autonomousRoomId);
157
167
  }
158
168
  }
169
+ class OptionalAppRoutePluginUnavailableError extends Error {
170
+ specifier;
171
+ constructor(specifier, cause) {
172
+ super(`Optional app route plugin ${specifier} is unavailable`, { cause });
173
+ this.specifier = specifier;
174
+ this.name = "OptionalAppRoutePluginUnavailableError";
175
+ }
176
+ }
177
+ function isOptionalAppRoutePluginUnavailableError(err) {
178
+ return err instanceof OptionalAppRoutePluginUnavailableError;
179
+ }
180
+ function splitPackageSpecifier(specifier) {
181
+ const parts = specifier.split("/");
182
+ if (specifier.startsWith("@")) {
183
+ if (parts.length < 2)
184
+ return null;
185
+ return {
186
+ packageName: `${parts[0]}/${parts[1]}`,
187
+ exportSubpath: parts.length > 2 ? `./${parts.slice(2).join("/")}` : ".",
188
+ };
189
+ }
190
+ if (!parts[0])
191
+ return null;
192
+ return {
193
+ packageName: parts[0],
194
+ exportSubpath: parts.length > 1 ? `./${parts.slice(1).join("/")}` : ".",
195
+ };
196
+ }
197
+ async function resolveLocalAppRoutePluginEntry(specifier) {
198
+ const parsed = splitPackageSpecifier(specifier);
199
+ if (!parsed)
200
+ return null;
201
+ let packageJsonPath;
202
+ try {
203
+ packageJsonPath = _require.resolve(`${parsed.packageName}/package.json`);
204
+ }
205
+ catch {
206
+ return null;
207
+ }
208
+ const entry = await resolvePackageEntry(path.dirname(packageJsonPath), parsed.exportSubpath);
209
+ return existsSync(entry) ? entry : null;
210
+ }
159
211
  function isPlugin(value) {
160
212
  return (typeof value === "object" &&
161
213
  value !== null &&
@@ -179,10 +231,27 @@ function resolvePluginExport(module, exportName) {
179
231
  throw new Error("No plugin export found");
180
232
  }
181
233
  async function loadAppRoutePluginFromSpecifier(specifier, exportName) {
182
- const module = (await import(__rewriteRelativeImportExtension(
183
- /* webpackIgnore: true */ specifier)));
234
+ let module;
235
+ try {
236
+ module = (await import(__rewriteRelativeImportExtension(
237
+ /* webpackIgnore: true */ specifier)));
238
+ }
239
+ catch (err) {
240
+ if (!isModuleNotFoundError(err))
241
+ throw err;
242
+ const sourceEntry = await resolveLocalAppRoutePluginEntry(specifier);
243
+ if (!sourceEntry) {
244
+ throw new OptionalAppRoutePluginUnavailableError(specifier, err);
245
+ }
246
+ logger.debug(`[eliza] Loading app route plugin ${specifier} from workspace source at ${sourceEntry}`);
247
+ module = (await import(__rewriteRelativeImportExtension(pathToFileURL(sourceEntry).href)));
248
+ }
184
249
  return resolvePluginExport(module, exportName);
185
250
  }
251
+ /** @internal Exported for focused loader regression tests. */
252
+ export const __loadAppRoutePluginFromSpecifierForTest = loadAppRoutePluginFromSpecifier;
253
+ const WORKFLOW_ROUTE_PLUGIN_ID = "@elizaos/plugin-workflow:routes";
254
+ const WALLET_ROUTE_PLUGIN_ID = "@elizaos/plugin-wallet:routes";
186
255
  function getRegistryAppRoutePluginLoaders() {
187
256
  return getApps(loadRegistry()).flatMap((app) => {
188
257
  const routePlugin = app.launch.routePlugin;
@@ -196,6 +265,55 @@ function getRegistryAppRoutePluginLoaders() {
196
265
  ];
197
266
  });
198
267
  }
268
+ /**
269
+ * Opt-in dev knob: comma-separated app-route-plugin ids to skip on boot.
270
+ * Empty / unset => no filtering (default behavior unchanged: every app-route
271
+ * plugin loads). This trims time-to-ready for core/runtime work by not
272
+ * transpiling + registering hundreds of feature routes a core dev does not
273
+ * exercise.
274
+ *
275
+ * A loader's id is its full package name (e.g. `@elizaos/plugin-personal-assistant`,
276
+ * `@elizaos/plugin-steward-app`, `@elizaos/plugin-elizacloud:routes`). Tokens
277
+ * are matched against BOTH the full id and a normalized short alias
278
+ * (see {@link normalizeAppRoutePluginId}), so the ergonomic short forms work
279
+ * too: `ELIZA_SKIP_APP_ROUTE_PLUGINS=lifeops,steward,training,shopify`.
280
+ */
281
+ export function getSkippedAppRoutePluginIds() {
282
+ return new Set((process.env.ELIZA_SKIP_APP_ROUTE_PLUGINS ?? "")
283
+ .split(",")
284
+ .map((value) => value.trim())
285
+ .filter(Boolean));
286
+ }
287
+ /**
288
+ * Opt-in dev knob: when set to the literal token `"1"`, the post-ready boot
289
+ * tail (app-route plugins, training hooks, sensitive-request adapters, telegram
290
+ * polling, trigger bridge, connector catalog, voice warmup) runs in the
291
+ * background instead of blocking the readiness gate, so `/api/health` flips
292
+ * `ready:true` and "Agent ready" prints sooner. Composes with
293
+ * {@link getSkippedAppRoutePluginIds}: `ELIZA_SKIP_APP_ROUTE_PLUGINS` filters
294
+ * WHICH route plugins load; this controls WHETHER that tail blocks ready.
295
+ *
296
+ * Returns true ONLY for `"1"` (undefined / `""` / `"0"` / `"false"` / `"true"`
297
+ * all return false) so the default boot is byte-identical: the tail is awaited
298
+ * inline exactly as before.
299
+ */
300
+ export function getDeferAppRoutesEnabled(env = process.env) {
301
+ return env.ELIZA_DEFER_APP_ROUTES?.trim() === "1";
302
+ }
303
+ /**
304
+ * Normalize an app-route-plugin id (or a user-supplied skip token) to a short
305
+ * alias for forgiving matching: lowercase, drop the `@elizaos/plugin-` prefix
306
+ * and the `:routes` / `-app` / `-ui` / `-routes` suffixes. So
307
+ * `@elizaos/plugin-steward-app` and `steward` both normalize to `steward`.
308
+ */
309
+ export function normalizeAppRoutePluginId(id) {
310
+ return id
311
+ .trim()
312
+ .toLowerCase()
313
+ .replace(/^@elizaos\/plugin-/, "")
314
+ .replace(/:routes$/, "")
315
+ .replace(/-(app|ui|routes)$/, "");
316
+ }
199
317
  function getAppRoutePluginLoaders() {
200
318
  const byId = new Map();
201
319
  for (const entry of getRegistryAppRoutePluginLoaders()) {
@@ -204,46 +322,139 @@ function getAppRoutePluginLoaders() {
204
322
  for (const entry of listAppRoutePluginLoaders()) {
205
323
  byId.set(entry.id, entry);
206
324
  }
207
- return [...byId.values()];
325
+ // plugin-workflow is default-enabled and registers its rawPath route plugin
326
+ // (`/api/automations`, `/api/workflow/*`) only as a side effect of its
327
+ // `register-routes` import. That side effect runs inside the plugin's own
328
+ // module init, which is not guaranteed to have executed before this snapshot
329
+ // is taken on the post-ready boot tail — so the loader can be missing and the
330
+ // routes 404. Register it explicitly here (load-order independent), mirroring
331
+ // how every other rawPath route plugin is wired via the registry.
332
+ if (!byId.has(WORKFLOW_ROUTE_PLUGIN_ID)) {
333
+ byId.set(WORKFLOW_ROUTE_PLUGIN_ID, {
334
+ id: WORKFLOW_ROUTE_PLUGIN_ID,
335
+ load: () => loadAppRoutePluginFromSpecifier("@elizaos/plugin-workflow/plugin-routes", "workflowRoutePlugin"),
336
+ });
337
+ }
338
+ // plugin-wallet has the same load-order hazard: its rawPath route plugin
339
+ // (`/api/wallet/market-overview`) registers only as a side effect of the
340
+ // `register-routes` import, which is not guaranteed to have run before this
341
+ // snapshot. Register it explicitly so the route is always mounted.
342
+ if (!byId.has(WALLET_ROUTE_PLUGIN_ID)) {
343
+ byId.set(WALLET_ROUTE_PLUGIN_ID, {
344
+ id: WALLET_ROUTE_PLUGIN_ID,
345
+ load: () => loadAppRoutePluginFromSpecifier("@elizaos/plugin-wallet/routes/plugin", "walletRoutePlugin"),
346
+ });
347
+ }
348
+ const skip = getSkippedAppRoutePluginIds();
349
+ if (skip.size === 0) {
350
+ return [...byId.values()];
351
+ }
352
+ // Match a loader against the skip tokens by full id OR normalized short alias
353
+ // (so both `@elizaos/plugin-steward-app` and `steward` skip the same loader).
354
+ const skipNormalized = new Set([...skip].map((token) => normalizeAppRoutePluginId(token)));
355
+ const kept = [];
356
+ const skipped = [];
357
+ for (const entry of byId.values()) {
358
+ if (skip.has(entry.id) ||
359
+ skipNormalized.has(normalizeAppRoutePluginId(entry.id))) {
360
+ skipped.push(entry.id);
361
+ }
362
+ else {
363
+ kept.push(entry);
364
+ }
365
+ }
366
+ if (skipped.length > 0) {
367
+ logger.info(`[eliza] Skipping ${skipped.length} app route plugin(s) via ELIZA_SKIP_APP_ROUTE_PLUGINS: ${skipped.join(", ")}`);
368
+ }
369
+ return kept;
208
370
  }
209
371
  async function registerAppRoutePlugins(runtime) {
210
- for (const { id, load } of getAppRoutePluginLoaders()) {
372
+ // Load all app-route plugin modules concurrently. This runs on the gated
373
+ // ready-path (repairRuntimeAfterBoot is awaited before the runtime is handed
374
+ // back and /api/health flips ready), so the previous sequential await-loop
375
+ // serialized ~11 independent dynamic imports (lifeops alone registers 188
376
+ // routes) and dominated time-to-ready. Imports are independent; loading them
377
+ // together overlaps their I/O and module resolution. Route registration is
378
+ // still applied in loader order after all settle, so dispatch order is
379
+ // unchanged, and per-plugin failures stay isolated (a rejected load logs and
380
+ // contributes no routes rather than aborting the rest).
381
+ const loaded = await Promise.all(getAppRoutePluginLoaders().map(async ({ id, load }) => {
211
382
  try {
212
- const plugin = await load();
213
- // Push rawPath routes directly onto runtime.routes to avoid the core's
214
- // registerPlugin() path mangling (which prepends /<pluginName>/ to every
215
- // route path). The rawPath flag means these routes already have their
216
- // final absolute paths (e.g. /api/lifeops/app-state).
217
- if (plugin.routes?.length) {
218
- for (const route of plugin.routes) {
219
- const routePath = route.path.startsWith("/")
220
- ? route.path
221
- : `/${route.path}`;
222
- runtime.routes.push({ ...route, path: routePath });
223
- }
224
- }
225
- logger.info(`[eliza] Registered app route plugin: ${plugin.name} (${plugin.routes?.length ?? 0} routes)`);
383
+ return await load();
226
384
  }
227
385
  catch (err) {
228
- logger.warn(`[eliza] Failed to register app route plugin ${id}: ${err instanceof Error ? err.message : String(err)}`);
386
+ if (isOptionalAppRoutePluginUnavailableError(err)) {
387
+ logger.debug(`[eliza] App route plugin ${id} unavailable, skipping route registration`);
388
+ return null;
389
+ }
390
+ logger.warn(`[eliza] Failed to register app route plugin ${id}: ${formatError(err)}`);
391
+ return null;
392
+ }
393
+ }));
394
+ for (const plugin of loaded) {
395
+ if (!plugin)
396
+ continue;
397
+ // Push rawPath routes directly onto runtime.routes to avoid the core's
398
+ // registerPlugin() path mangling (which prepends /<pluginName>/ to every
399
+ // route path). The rawPath flag means these routes already have their
400
+ // final absolute paths (e.g. /api/lifeops/app-state).
401
+ if (plugin.routes?.length) {
402
+ for (const route of plugin.routes) {
403
+ const routePath = route.path.startsWith("/")
404
+ ? route.path
405
+ : `/${route.path}`;
406
+ runtime.routes.push({ ...route, path: routePath });
407
+ }
229
408
  }
409
+ logger.info(`[eliza] Registered app route plugin: ${plugin.name} (${plugin.routes?.length ?? 0} routes)`);
230
410
  }
231
411
  }
232
- const TRAINING_RUNTIME_HOOKS_SPECIFIER = "@elizaos/app-training";
412
+ const TRAINING_RUNTIME_HOOKS_SPECIFIER = "@elizaos/plugin-training";
413
+ /**
414
+ * Returns true only for genuine "module is not installed" import failures.
415
+ * Bun raises `ResolveMessage` with `code === "ERR_MODULE_NOT_FOUND"` when a
416
+ * specifier cannot be resolved; Node uses the same `code`. Anything else
417
+ * (syntax error, runtime error during module init, tsconfig path hijack,
418
+ * missing transitive dependency) is a real load failure and must NOT be
419
+ * misreported as "not installed".
420
+ */
421
+ function isModuleNotFoundError(err) {
422
+ if (!err || typeof err !== "object")
423
+ return false;
424
+ const errObj = err;
425
+ if (errObj.code === "ERR_MODULE_NOT_FOUND")
426
+ return true;
427
+ if (errObj.constructor?.name === "ResolveMessage")
428
+ return true;
429
+ return false;
430
+ }
233
431
  async function registerTrainingRuntimeHooks(runtime) {
234
432
  let hookMod;
235
433
  try {
236
434
  hookMod = (await import(__rewriteRelativeImportExtension(TRAINING_RUNTIME_HOOKS_SPECIFIER)));
237
435
  }
238
436
  catch (err) {
239
- logger.warn(`[eliza] @elizaos/app-training not installed, skipping runtime hooks: ${err instanceof Error ? err.message : String(err)}`);
240
- return;
437
+ if (isModuleNotFoundError(err)) {
438
+ logger.warn(`[eliza] @elizaos/plugin-training not installed, skipping runtime hooks`);
439
+ return;
440
+ }
441
+ // Real load failure (syntax error, broken transitive, init throw, etc.) —
442
+ // surface it loudly so it is not mistaken for "not installed".
443
+ logger.error(`[eliza] @elizaos/plugin-training failed to load (not 'not installed'): ${formatErrorWithStack(err)}`);
444
+ throw err;
241
445
  }
242
446
  if (!hookMod.registerTrainingRuntimeHooks) {
243
447
  throw new Error(`[eliza] ${TRAINING_RUNTIME_HOOKS_SPECIFIER} did not export registerTrainingRuntimeHooks`);
244
448
  }
245
449
  await hookMod.registerTrainingRuntimeHooks(runtime);
246
450
  }
451
+ // The most recent runtime handed to the post-ready boot tail. A backgrounded
452
+ // (deferred) tail compares against this so a hot-restart that boots a newer
453
+ // runtime supersedes the old one's still-running tail, preventing route/service
454
+ // registration onto a torn-down runtime. In the default inline-await path the
455
+ // tail completes before the next repair call reassigns this, so the guard never
456
+ // trips and default behavior stays byte-identical.
457
+ let latestBootTailRuntime = null;
247
458
  async function repairRuntimeAfterBoot(runtime) {
248
459
  await ensureRuntimeSqlCompatibility(runtime);
249
460
  // Mobile (Android / iOS) shortcut: the runtime is already serving from
@@ -255,31 +466,31 @@ async function repairRuntimeAfterBoot(runtime) {
255
466
  // them here is what the mobile bundle has to do to avoid crashing on first
256
467
  // turn — feature parity comes from cloud-side services, not on-device state.
257
468
  if (isMobilePlatform()) {
258
- if (shouldEnableMobileLocalInference()) {
259
- await ensureLocalInferenceHandler(runtime);
469
+ if ((await _localInference()).shouldEnableMobileLocalInference()) {
470
+ await (await _localInference()).ensureLocalInferenceHandler(runtime);
260
471
  }
261
472
  logger.info("[eliza] Mobile platform detected — skipping desktop-only boot helpers");
262
473
  return runtime;
263
474
  }
264
- await ensureTextToSpeechHandler(runtime);
265
- await ensureLocalInferenceHandler(runtime);
266
- await ensureAutonomyBootstrapContext(runtime);
267
- // ── Register app-specific route plugins ─────────────────────────────
268
- // The registry and explicit registration API own the package bindings; the
269
- // runtime only consumes app route plugin loaders.
270
- await registerAppRoutePlugins(runtime);
271
- await registerTrainingRuntimeHooks(runtime);
475
+ await (await _localInference()).ensureLocalInferenceHandler(runtime);
476
+ const autonomyLoopEnabled = isRuntimeAutonomyEnabled(process.env);
477
+ if (autonomyLoopEnabled) {
478
+ await ensureAutonomyBootstrapContext(runtime);
479
+ }
480
+ else {
481
+ logger.info("[eliza] Autonomy bootstrap deferred — autonomous loop disabled");
482
+ }
272
483
  if (!runtime.getService("AUTONOMY")) {
273
484
  try {
274
485
  await startAndRegisterAutonomyService(runtime);
275
- logger.info("[eliza] AutonomyService started after SQL compatibility repair");
486
+ logger.info("[eliza] AutonomyService started and waiting");
276
487
  }
277
488
  catch (error) {
278
- throw new Error(`[eliza] AutonomyService restart after SQL compatibility repair failed: ${error instanceof Error ? error.message : String(error)}`);
489
+ throw new Error(`[eliza] AutonomyService start failed: ${formatError(error)}`);
279
490
  }
280
491
  }
281
- // Enable the autonomy loop so trigger/heartbeat instructions are processed.
282
- {
492
+ // Enable the continuous autonomy loop only when explicitly requested.
493
+ if (autonomyLoopEnabled) {
283
494
  const autonomySvc = getAutonomyService(runtime);
284
495
  if (autonomySvc) {
285
496
  try {
@@ -287,24 +498,98 @@ async function repairRuntimeAfterBoot(runtime) {
287
498
  logger.info("[eliza] AutonomyService enabled — trigger instructions will be processed");
288
499
  }
289
500
  catch (err) {
290
- throw new Error(`[eliza] Failed to enable autonomy loop: ${err instanceof Error ? err.message : String(err)}`);
501
+ throw new Error(`[eliza] Failed to enable autonomy loop: ${formatError(err)}`);
291
502
  }
292
503
  }
293
504
  }
294
- if (shouldStartTelegramStandaloneBot()) {
295
- await ensureTelegramBotPolling(runtime);
505
+ else {
506
+ logger.info("[eliza] AutonomyService waiting — set ENABLE_AUTONOMY=true to start autonomous loop");
507
+ }
508
+ // Post-ready tail: feature-route plugins, training hooks, sensitive-request
509
+ // adapters, telegram polling, the trigger bridge, the connector catalog, and
510
+ // voice warmup. None of these gate correctness of the first turn, so when
511
+ // ELIZA_DEFER_APP_ROUTES=1 they run in the background and ready flips before
512
+ // the tail completes (feature routes may 404 for a brief window — same
513
+ // audience as ELIZA_SKIP_APP_ROUTE_PLUGINS). When the knob is unset the tail
514
+ // is awaited inline, identical in steps and order to the pre-split path.
515
+ latestBootTailRuntime = runtime;
516
+ if (getDeferAppRoutesEnabled()) {
517
+ void runPostReadyBootTail(runtime);
518
+ return runtime;
519
+ }
520
+ await runPostReadyBootTail(runtime);
521
+ return runtime;
522
+ }
523
+ const DEFAULT_POST_READY_BOOT_STEPS = {
524
+ ensureTextToSpeechHandler,
525
+ registerAppRoutePlugins,
526
+ registerTrainingRuntimeHooks,
527
+ registerCoreSensitiveRequestAdapters,
528
+ shouldStartTelegramStandaloneBot,
529
+ ensureTelegramBotPolling,
530
+ stopTelegramBotPolling,
531
+ ensureTriggerEventBridge,
532
+ ensureConnectorTargetCatalog,
533
+ startDeferredVoiceWarmup,
534
+ };
535
+ /**
536
+ * Post-ready boot steps split out of {@link repairRuntimeAfterBoot}. Each step
537
+ * keeps its original error behavior verbatim — there is no wrapping try/catch:
538
+ * registerAppRoutePlugins isolates per-loader failures internally,
539
+ * ensureTriggerEventBridge / ensureConnectorTargetCatalog swallow into
540
+ * logger.warn internally, and ensureTextToSpeechHandler /
541
+ * registerTrainingRuntimeHooks throw (preserved in the default inline-await
542
+ * dispatch above).
543
+ *
544
+ * `steps` defaults to the real bound functions, so production behavior is
545
+ * unchanged; the seam exists only so the phase split is unit-testable.
546
+ */
547
+ export async function runPostReadyBootTail(runtime, steps = DEFAULT_POST_READY_BOOT_STEPS) {
548
+ // Liveness guard: a hot-restart can swap runtimes mid-tail. If a newer boot
549
+ // has already claimed the tail slot, this runtime is superseded — bail before
550
+ // the first mutation so we never register routes/services onto a torn-down
551
+ // runtime. (In the default inline-await path the tail completes before the
552
+ // next repair call reassigns the slot, so this never trips.)
553
+ if (latestBootTailRuntime !== runtime) {
554
+ logger.info("[eliza] post-ready boot tail skipped — runtime superseded");
555
+ return;
556
+ }
557
+ await steps.ensureTextToSpeechHandler(runtime);
558
+ // ── Register app-specific route plugins ─────────────────────────────
559
+ // The registry and explicit registration API own the package bindings; the
560
+ // runtime only consumes app route plugin loaders.
561
+ await steps.registerAppRoutePlugins(runtime);
562
+ await steps.registerTrainingRuntimeHooks(runtime);
563
+ // Register first-party sensitive-request delivery adapters with the
564
+ // dispatch registry (no-op when the registry service isn't present).
565
+ steps.registerCoreSensitiveRequestAdapters(runtime);
566
+ if (steps.shouldStartTelegramStandaloneBot()) {
567
+ await steps.ensureTelegramBotPolling(runtime);
296
568
  }
297
569
  else {
298
- stopTelegramBotPolling("passive-lifeops-connectors");
570
+ steps.stopTelegramBotPolling("passive-lifeops-connectors");
299
571
  }
300
572
  // Subscribe the trigger event bridge to the runtime event bus so
301
573
  // event-kind triggers fire on real MESSAGE_RECEIVED / REACTION_RECEIVED /
302
574
  // etc. emissions. plugin-workflow registers WORKFLOW_DISPATCH in its `init`
303
575
  // so by the time the bridge starts, workflow-kind event triggers already
304
576
  // have a dispatcher to call.
305
- await ensureTriggerEventBridge(runtime);
306
- await ensureConnectorTargetCatalog(runtime);
307
- return runtime;
577
+ await steps.ensureTriggerEventBridge(runtime);
578
+ await steps.ensureConnectorTargetCatalog(runtime);
579
+ // Warm local voice models (Whisper STT + Kokoro TTS) in the background now
580
+ // that the runtime is ready. repairRuntimeAfterBoot is the single chokepoint
581
+ // every boot path funnels through (bootElizaRuntime AND startEliza's
582
+ // server-only + restart paths), so the warmup fires regardless of entry
583
+ // point. Fire-and-forget; gated + non-fatal inside startDeferredVoiceWarmup.
584
+ void steps.startDeferredVoiceWarmup(runtime);
585
+ }
586
+ /**
587
+ * Test seam: set the runtime that owns the post-ready tail slot. Mirrors what
588
+ * {@link repairRuntimeAfterBoot} does just before dispatching the tail, so a
589
+ * unit test can drive the liveness guard without a full boot.
590
+ */
591
+ export function __setLatestBootTailRuntimeForTest(runtime) {
592
+ latestBootTailRuntime = runtime;
308
593
  }
309
594
  // Module-level handle for the trigger event bridge. Reset across
310
595
  // hot-reloads so we never leave two handler sets racing the runtime's
@@ -334,7 +619,7 @@ async function ensureTriggerEventBridge(runtime) {
334
619
  logger.info("[eliza] trigger event bridge armed");
335
620
  }
336
621
  catch (err) {
337
- logger.warn(`[eliza] Failed to start trigger event bridge: ${err instanceof Error ? err.message : String(err)}`);
622
+ logger.warn(`[eliza] Failed to start trigger event bridge: ${formatError(err)}`);
338
623
  }
339
624
  }
340
625
  async function ensureConnectorTargetCatalog(runtime) {
@@ -353,8 +638,8 @@ async function ensureConnectorTargetCatalog(runtime) {
353
638
  const { createElizaConnectorTargetCatalog } = await import("../services/connector-target-catalog.js");
354
639
  const catalog = createElizaConnectorTargetCatalog({
355
640
  getConfig: () => loadElizaConfig(),
356
- discordCache: _discordEnumerationCache ?? undefined,
357
- logger: { warn: runtime.logger.warn?.bind(runtime.logger) },
641
+ discordCache: _discordEnumerationCache,
642
+ logger: { warn: runtime.logger.warn.bind(runtime.logger) },
358
643
  });
359
644
  runtime.services.set(CONNECTOR_TARGET_CATALOG_SERVICE_TYPE, [
360
645
  catalog,
@@ -372,7 +657,7 @@ async function ensureConnectorTargetCatalog(runtime) {
372
657
  logger.info("[eliza] connector-target-catalog registered");
373
658
  }
374
659
  catch (err) {
375
- logger.warn(`[eliza] Failed to register connector-target-catalog: ${err instanceof Error ? err.message : String(err)}`);
660
+ logger.warn(`[eliza] Failed to register connector-target-catalog: ${formatError(err)}`);
376
661
  }
377
662
  }
378
663
  // Module-level Telegraf bot reference for lifecycle management across restarts.
@@ -405,14 +690,14 @@ async function ensureTelegramBotPolling(runtime) {
405
690
  bot.on("message", async (ctx) => {
406
691
  await handleTelegramStandaloneMessage(runtime, ctx);
407
692
  });
408
- bot.catch((err) => logger.warn(`[eliza] Telegram bot error: ${err instanceof Error ? err.message : String(err)}`));
693
+ bot.catch((err) => logger.warn(`[eliza] Telegram bot error: ${formatError(err)}`));
409
694
  // Fire-and-forget — bot.launch() only resolves on stop()
410
695
  bot
411
696
  .launch({
412
697
  dropPendingUpdates: true,
413
698
  allowedUpdates: ["message", "message_reaction"],
414
699
  })
415
- .catch((err) => logger.warn(`[eliza] Telegram bot launch error: ${err instanceof Error ? err.message : String(err)}`));
700
+ .catch((err) => logger.warn(`[eliza] Telegram bot launch error: ${formatError(err)}`));
416
701
  _telegramBot = bot;
417
702
  // Telegram bot cleanup is handled by the central signal handler in
418
703
  // startEliza() via _telegramBot — no separate registration needed.
@@ -420,7 +705,7 @@ async function ensureTelegramBotPolling(runtime) {
420
705
  logger.info("[eliza] Telegram bot polling started");
421
706
  }
422
707
  catch (err) {
423
- logger.warn(`[eliza] Telegram bot setup failed: ${err instanceof Error ? err.message : String(err)}`);
708
+ logger.warn(`[eliza] Telegram bot setup failed: ${formatError(err)}`);
424
709
  }
425
710
  }
426
711
  /**
@@ -439,7 +724,43 @@ async function ensureTelegramBotPolling(runtime) {
439
724
  * so we do not re-download multi‑GB models. Opt out:
440
725
  * `ELIZA_EMBEDDING_WARMUP_NO_REUSE=1`.
441
726
  */
727
+ // In-flight promise cache so concurrent callers (bootElizaRuntime +
728
+ // startEliza both run on agent boot) share a single download. Without this,
729
+ // two `fs.createWriteStream(dest)` open the same GGUF target concurrently,
730
+ // and the first to fail calls `safeUnlink(dest)` — which deletes the file
731
+ // out from under the second's pending write. Downstream `llama.loadModel`
732
+ // then opens the now-missing file and throws ENOENT, which surfaces as an
733
+ // uncaughtException and kills the agent.
734
+ let warmupInFlight = null;
735
+ function isTruthyEnvValue(value) {
736
+ const normalized = value?.trim().toLowerCase();
737
+ return (normalized === "1" ||
738
+ normalized === "true" ||
739
+ normalized === "yes" ||
740
+ normalized === "on");
741
+ }
742
+ function isLocalEmbeddingWarmupDeferredByEnv() {
743
+ return isTruthyEnvValue(process.env.ELIZA_DEFER_LOCAL_EMBEDDING_WARMUP);
744
+ }
745
+ function startLocalEmbeddingWarmup(onProgress) {
746
+ void warmupEmbeddingModel(onProgress);
747
+ }
748
+ export function startDeferredLocalEmbeddingWarmup(onProgress) {
749
+ if (!isLocalEmbeddingWarmupDeferredByEnv())
750
+ return false;
751
+ logger.info("[eliza] Starting deferred local embedding warmup");
752
+ startLocalEmbeddingWarmup(onProgress);
753
+ return true;
754
+ }
442
755
  async function warmupEmbeddingModel(onProgress) {
756
+ if (warmupInFlight)
757
+ return warmupInFlight;
758
+ warmupInFlight = warmupEmbeddingModelImpl(onProgress).finally(() => {
759
+ warmupInFlight = null;
760
+ });
761
+ return warmupInFlight;
762
+ }
763
+ async function warmupEmbeddingModelImpl(onProgress) {
443
764
  // Mobile bundle does not ship `node-llama-cpp` (no Android prebuild) and
444
765
  // pulling a multi-GB GGUF over a phone's data plan is not acceptable. The
445
766
  // mobile path uses `@elizaos/plugin-elizacloud` or a remote provider for
@@ -448,19 +769,20 @@ async function warmupEmbeddingModel(onProgress) {
448
769
  logger.info("[eliza] Skipping local embedding warmup — running on mobile (ELIZA_PLATFORM=android|ios)");
449
770
  return;
450
771
  }
451
- if (!shouldWarmupLocalEmbeddingModel()) {
772
+ const li = await _localInference();
773
+ if (!li.shouldWarmupLocalEmbeddingModel()) {
452
774
  logger.info("[eliza] Skipping local embedding (GGUF) warmup — not needed for this configuration (e.g. Eliza Cloud embeddings, or local embeddings disabled).");
453
775
  return;
454
776
  }
455
777
  const config = loadElizaConfig();
456
778
  upstreamConfigureLocalEmbeddingPlugin({}, config);
457
- const preset = detectEmbeddingPreset();
458
- const modelsDir = process.env.MODELS_DIR ?? DEFAULT_MODELS_DIR;
779
+ const preset = li.detectEmbeddingPreset();
780
+ const modelsDir = process.env.MODELS_DIR ?? li.DEFAULT_MODELS_DIR;
459
781
  let model = process.env.LOCAL_EMBEDDING_MODEL?.trim() || preset.model;
460
782
  let modelRepo = process.env.LOCAL_EMBEDDING_MODEL_REPO?.trim() || preset.modelRepo;
461
- if (!isEmbeddingWarmupReuseDisabled() &&
462
- !embeddingGgufFilePresent(modelsDir, model)) {
463
- const reuse = findExistingEmbeddingModelForWarmupReuse(modelsDir);
783
+ if (!li.isEmbeddingWarmupReuseDisabled() &&
784
+ !li.embeddingGgufFilePresent(modelsDir, model)) {
785
+ const reuse = li.findExistingEmbeddingModelForWarmupReuse(modelsDir);
464
786
  if (reuse) {
465
787
  logger.info(`[eliza] Embedding warmup: configured file "${model}" not found in MODELS_DIR — reusing existing ${reuse.model} to avoid a large re-download. ` +
466
788
  "Set LOCAL_EMBEDDING_MODEL or ELIZA_EMBEDDING_WARMUP_NO_REUSE=1 to force the configured model.");
@@ -478,7 +800,7 @@ async function warmupEmbeddingModel(onProgress) {
478
800
  logger.info(`[eliza] Local embedding warmup: ${model} (hardware tier preset: ${preset.label}). ` +
479
801
  "This file is for TEXT_EMBEDDING / memory only (not your conversation model).");
480
802
  const progressCb = (phase, detail) => {
481
- updateStartupEmbeddingProgress(phase, detail);
803
+ updateStartupEmbeddingProgress(phase, typeof detail === "string" ? detail : undefined);
482
804
  // Always log to stdout for server/container monitoring
483
805
  if (phase === "downloading") {
484
806
  logger.info(`[eliza] Embedding model: ${detail ?? "downloading..."}`);
@@ -493,27 +815,69 @@ async function warmupEmbeddingModel(onProgress) {
493
815
  onProgress?.(phase, detail);
494
816
  };
495
817
  try {
496
- await ensureModel(modelsDir, modelRepo, model, false, progressCb);
818
+ await li.ensureModel(modelsDir, modelRepo, model, false, progressCb);
497
819
  }
498
820
  catch (err) {
499
821
  // Non-fatal: the plugin will attempt its own download on first use
500
- logger.warn(`[eliza] Embedding model warmup failed (will retry on first use): ${err instanceof Error ? err.message : String(err)}`);
822
+ logger.warn(`[eliza] Embedding model warmup failed (will retry on first use): ${formatError(err)}`);
501
823
  }
502
824
  }
825
+ /**
826
+ * Warm local voice models (Whisper STT + Kokoro TTS) in the background AFTER
827
+ * the runtime is ready, by firing one tiny useModel request at each. Voice
828
+ * models only load through the live runtime (the Kokoro bridge auto-starts on
829
+ * the first TEXT_TO_SPEECH call), so unlike embedding — which warms pre-boot
830
+ * via a runtime-free facade — this runs post-ready. Fire-and-forget; gated to
831
+ * the local-inference path so cloud-only setups never make a paid TTS/STT call.
832
+ */
833
+ async function startDeferredVoiceWarmup(runtime) {
834
+ if (!shouldWarmupVoice({
835
+ mobile: isMobilePlatform(),
836
+ skipEnv: isTruthyEnvValue(process.env.ELIZA_SKIP_LOCAL_VOICE_WARMUP),
837
+ hotReload: isTruthyEnvValue(process.env.ELIZA_DEV_IS_HOT_RELOAD),
838
+ })) {
839
+ return;
840
+ }
841
+ logger.info("[eliza] Starting deferred voice warmup");
842
+ await warmVoiceModels(runtime, {
843
+ ttsType: ModelType.TEXT_TO_SPEECH,
844
+ transcriptionType: ModelType.TRANSCRIPTION,
845
+ }, {
846
+ info: (m) => logger.info(m),
847
+ warn: (m) => logger.warn(m),
848
+ });
849
+ }
503
850
  export async function bootElizaRuntime(opts = {}) {
504
851
  syncAppEnvToEliza();
505
852
  try {
506
853
  // Eagerly download the embedding model before the full runtime boot.
507
854
  // This way the TUI loading screen (or server logs) can show download
508
855
  // progress instead of the app silently stalling on first embedding call.
509
- await warmupEmbeddingModel(opts.onEmbeddingProgress);
510
- // Cap embedding dimension to 384 plugin-sql's DIMENSION_MAP only
511
- // supports up to 3072, and the performance-tier E5-Mistral-7B model
512
- // outputs 4096-dim vectors which would silently fall back to 384 anyway.
856
+ // Fire-and-forget: warmupEmbeddingModelImpl declares "non-fatal: will
857
+ // retry on first use" semantics, and self-serializes via the module-level
858
+ // warmupInFlight singleton. Awaiting it here parked bootstrap on sticky
859
+ // HF 401 → multi-URL fallback chains with no overall deadline; the API
860
+ // port never bound and dev-ui.mjs's 300s watchdog tore the stack down
861
+ // (W-016). Voiding lets bootstrap proceed; the renderer's startup overlay
862
+ // still surfaces progress via updateStartupEmbeddingProgress.
863
+ if (isLocalEmbeddingWarmupDeferredByEnv()) {
864
+ logger.info("[eliza] Deferring local embedding warmup until runtime ready");
865
+ }
866
+ else {
867
+ startLocalEmbeddingWarmup(opts.onEmbeddingProgress);
868
+ }
869
+ // Default the embedding-vector dimension plugin-sql provisions to 384 when
870
+ // unset: that is the compact SQL-safe column and the native width of the
871
+ // standalone gte-small embedding model. Setting it here lets plugin-sql
872
+ // provision the column without a boot-time model probe (see core
873
+ // provisioning). An explicit EMBEDDING_DIMENSION — a different local model,
874
+ // the desktop Eliza-1 sidecar's Matryoshka width, or cloud embeddings —
875
+ // still wins.
513
876
  if (!process.env.EMBEDDING_DIMENSION) {
514
877
  process.env.EMBEDDING_DIMENSION = "384";
515
878
  }
516
879
  const runtime = await upstreamBootElizaRuntime(opts);
880
+ // Voice warmup fires inside repairRuntimeAfterBoot (the shared ready-point).
517
881
  return runtime ? await repairRuntimeAfterBoot(runtime) : runtime;
518
882
  }
519
883
  finally {
@@ -571,6 +935,19 @@ function isManualResetPgliteError(err) {
571
935
  normalized.includes("migrations._migrations")) {
572
936
  return true;
573
937
  }
938
+ // PGlite is an Emscripten/WASM build of Postgres. When the embedded
939
+ // postmaster hits an unrecoverable internal state — most commonly a
940
+ // corrupt on-disk pgdata directory from a previous crash, an
941
+ // unsupported syscall, or pg_logical/WAL replay failure — Emscripten
942
+ // calls `abort()` and surfaces it as an Error whose message starts
943
+ // with `Aborted(). Build with -sASSERTIONS for more info.` That bare
944
+ // string carries no PGlite-specific marker, so the older heuristics
945
+ // above never matched and the dev-server retried forever against the
946
+ // same poisoned data dir. Treat it as a recoverable corruption signal:
947
+ // the auto-reset path quarantines the .elizadb dir and retries once.
948
+ if (normalized.includes("aborted()")) {
949
+ return true;
950
+ }
574
951
  return false;
575
952
  });
576
953
  }
@@ -607,7 +984,7 @@ function resolveManagedPgliteDataDir() {
607
984
  return resolveUserPath(configuredDataDir);
608
985
  }
609
986
  const workspaceDir = config.agents?.defaults?.workspace ?? resolveDefaultAgentWorkspaceDir();
610
- return path.join(resolveUserPath(workspaceDir), ".eliza", ".elizadb");
987
+ return path.join(resolveUserPath(workspaceDir), ".elizadb");
611
988
  }
612
989
  function isAutoResettablePgliteDir(dataDir) {
613
990
  return typeof dataDir === "string" && path.basename(dataDir) === ".elizadb";
@@ -631,7 +1008,7 @@ async function resetPluginSqlPgliteSingleton(context) {
631
1008
  ]);
632
1009
  }
633
1010
  catch (err) {
634
- logger.warn(`[eliza] ${context}: failed to close plugin-sql PGlite singleton: ${err instanceof Error ? err.message : String(err)}`);
1011
+ logger.warn(`[eliza] ${context}: failed to close plugin-sql PGlite singleton: ${formatError(err)}`);
635
1012
  }
636
1013
  finally {
637
1014
  if (timeoutHandle) {
@@ -674,8 +1051,7 @@ function normalizePgliteStartupError(err) {
674
1051
  return err;
675
1052
  }
676
1053
  const dataDir = getPgliteDataDirFromError(err) ?? resolveManagedPgliteDataDir();
677
- const detail = collectErrorMessages(err)[0] ??
678
- (err instanceof Error ? err.message : String(err));
1054
+ const detail = collectErrorMessages(err)[0] ?? formatError(err);
679
1055
  const wrapped = new Error(dataDir
680
1056
  ? `PGlite initialization failed for ${dataDir}: ${detail}. Stop the app, then rename or delete only this directory before retrying: ${dataDir}`
681
1057
  : `PGlite initialization failed: ${detail}. Stop the app, then rename or delete only the managed PGlite data directory before retrying.`, { cause: err });
@@ -720,46 +1096,100 @@ export async function startEliza(options) {
720
1096
  if (orchRaw !== "0" && orchRaw !== "false" && orchRaw !== "no") {
721
1097
  process.env.ELIZA_AGENT_ORCHESTRATOR = "1";
722
1098
  }
1099
+ // Install the compat-route http.createServer wrapper BEFORE the upstream
1100
+ // agent's bootElizaRuntime path (which calls upstream startApiServer →
1101
+ // http.createServer at packages/agent/src/runtime/eliza.ts ~3984). The
1102
+ // upstream call binds the port and creates the listener that will receive
1103
+ // every request from the renderer; if our patch isn't already in place,
1104
+ // /api/tts/local-inference, /api/database, /api/runtime/mode, and every
1105
+ // other compat-dispatcher path 404 because the wrapper never runs on the
1106
+ // active listener. The app-core `startApiServer` wrapper (line ~1188 of
1107
+ // ../api/server.ts) ALSO installs the patch, but that's too late — the
1108
+ // upstream listener is already bound by then.
1109
+ //
1110
+ // The patch falls back to a module-scoped singleton state when called
1111
+ // without an explicit one; `startApiServer` later seeds that same
1112
+ // singleton with the live runtime via its `server.updateRuntime` wrapper,
1113
+ // so the early listener picks up the runtime as soon as it's available.
723
1114
  try {
724
- // Eagerly download the embedding model with progress reporting
725
- await warmupEmbeddingModel(options?.onEmbeddingProgress);
1115
+ patchHttpCreateServerForCompat();
1116
+ const earlyCompatState = getSharedCompatRuntimeState();
1117
+ // Eagerly download the embedding model with progress reporting.
1118
+ // Fire-and-forget — see comment at the matching call in bootElizaRuntime
1119
+ // (W-016): awaiting parks bootstrap; voiding lets the API port bind on
1120
+ // time while the warmup runs alongside.
1121
+ if (isLocalEmbeddingWarmupDeferredByEnv()) {
1122
+ logger.info("[eliza] Deferring local embedding warmup until runtime ready");
1123
+ }
1124
+ else {
1125
+ startLocalEmbeddingWarmup(options?.onEmbeddingProgress);
1126
+ }
726
1127
  // Cap embedding dimension to 384 — see comment in bootElizaRuntime.
727
1128
  if (!process.env.EMBEDDING_DIMENSION) {
728
1129
  process.env.EMBEDDING_DIMENSION = "384";
729
1130
  }
730
1131
  if (options?.serverOnly) {
731
- let currentRuntime = (await upstreamStartElizaWithPgliteCompat({
732
- ...options,
733
- headless: true,
734
- serverOnly: false,
735
- })) ?? undefined;
736
- currentRuntime = currentRuntime
737
- ? await repairRuntimeAfterBoot(currentRuntime)
738
- : currentRuntime;
739
- if (!currentRuntime) {
740
- return currentRuntime;
1132
+ bootLap("startEliza:serverOnly entry");
1133
+ let currentRuntime;
1134
+ // Boot (or re-boot) the runtime headless + repair, and hand the live
1135
+ // runtime to the early-installed compat wrapper so `/api/tts/*`,
1136
+ // `/api/database`, `/api/runtime/mode`, and every other compat-dispatcher
1137
+ // path can resolve. Without the latter, `state.current` stays null and
1138
+ // `handleCompatRoute` short-circuits. Used for the initial async boot AND
1139
+ // the `/api/agent/restart` handler.
1140
+ const bootServerOnlyRuntime = async () => {
1141
+ const booted = (await upstreamStartElizaWithPgliteCompat({
1142
+ ...options,
1143
+ headless: true,
1144
+ serverOnly: false,
1145
+ })) ?? undefined;
1146
+ const repaired = booted ? await repairRuntimeAfterBoot(booted) : booted;
1147
+ earlyCompatState.current = repaired ?? null;
1148
+ return repaired;
1149
+ };
1150
+ // Desktop launcher sets ELIZA_API_PORT (default 31337) to match the
1151
+ // renderer's hardcoded API base; honor it when present. CLI/server-only
1152
+ // mode (no ELIZA_API_PORT) keeps the legacy `resolveServerOnlyPort`
1153
+ // default (2138) so this change is transparent for non-desktop users.
1154
+ const apiPort = process.env.ELIZA_API_PORT
1155
+ ? resolveDesktopApiPort(process.env)
1156
+ : resolveServerOnlyPort(process.env);
1157
+ let actualApiPort;
1158
+ let updateRuntime;
1159
+ let updateStartup;
1160
+ bootLap("startEliza:before startApiServer (config/registry/embedding setup done)");
1161
+ try {
1162
+ // Bind the API server FIRST with no runtime yet (state "starting"), so
1163
+ // the desktop webview connects + hydrates in PARALLEL with the heavier
1164
+ // agent boot instead of waiting the full boot. The runtime is wired in
1165
+ // via updateRuntime once it finishes booting below. Mirrors the
1166
+ // dev-server's bind-first orchestration.
1167
+ const startedApiServer = await startApiServer({
1168
+ port: apiPort,
1169
+ initialAgentState: "starting",
1170
+ onRestart: async () => {
1171
+ if (currentRuntime) {
1172
+ await upstreamShutdownRuntime(currentRuntime, "server-only restart");
1173
+ }
1174
+ currentRuntime = await bootServerOnlyRuntime();
1175
+ return currentRuntime ?? null;
1176
+ },
1177
+ });
1178
+ actualApiPort = startedApiServer.port;
1179
+ updateRuntime = startedApiServer.updateRuntime;
1180
+ updateStartup = startedApiServer.updateStartup;
1181
+ }
1182
+ catch (apiErr) {
1183
+ const apiErrMsg = apiErr instanceof Error
1184
+ ? (apiErr.stack ?? apiErr.message)
1185
+ : String(apiErr);
1186
+ logger.error(`[eliza] API server failed to start: ${apiErrMsg}`);
1187
+ console.error(apiErrMsg);
1188
+ if (options?.serverOnly) {
1189
+ process.exit(1);
1190
+ }
1191
+ throw apiErr;
741
1192
  }
742
- const { startApiServer } = await import("../api/server");
743
- const apiPort = resolveServerOnlyPort(process.env);
744
- const { port: actualApiPort } = await startApiServer({
745
- port: apiPort,
746
- runtime: currentRuntime,
747
- onRestart: async () => {
748
- if (!currentRuntime) {
749
- return null;
750
- }
751
- await upstreamShutdownRuntime(currentRuntime, "server-only restart");
752
- const restarted = (await upstreamStartElizaWithPgliteCompat({
753
- ...options,
754
- headless: true,
755
- serverOnly: false,
756
- })) ?? undefined;
757
- currentRuntime = restarted
758
- ? await repairRuntimeAfterBoot(restarted)
759
- : undefined;
760
- return currentRuntime ?? null;
761
- },
762
- });
763
1193
  // WHY: `startApiServer` may bind a different port than requested (busy
764
1194
  // socket, upstream policy). Shells, scripts, and follow-up code reading
765
1195
  // env must match the real listener or health checks and user-facing URLs
@@ -768,14 +1198,35 @@ export async function startEliza(options) {
768
1198
  overwriteUiPort: true,
769
1199
  });
770
1200
  // Invalidate cached CORS port set so the new port is allowed.
771
- try {
772
- const { invalidateCorsAllowedPorts } = await import("../api/server-cors.js");
773
- invalidateCorsAllowedPorts();
774
- }
775
- catch { }
776
- logger.info(`[eliza] API server listening on http://localhost:${actualApiPort}`);
1201
+ // server-cors is statically imported at the top of this module — the
1202
+ // previous dynamic import was INEFFECTIVE_DYNAMIC_IMPORT.
1203
+ invalidateCorsAllowedPorts();
1204
+ logger.info(`[eliza] API server listening on http://localhost:${actualApiPort} (agent booting…)`);
777
1205
  console.log(`[eliza] Control UI: http://localhost:${actualApiPort}`);
1206
+ bootLap("startEliza:API bound (webview can connect, ready:false)");
1207
+ // Now boot the runtime; the API is already reachable (state "starting"),
1208
+ // so the UI is connecting + hydrating while this runs, then flips to
1209
+ // "running" once the agent is ready.
1210
+ currentRuntime = await bootServerOnlyRuntime();
1211
+ if (!currentRuntime) {
1212
+ updateStartup?.({ phase: "error", state: "error" });
1213
+ return currentRuntime;
1214
+ }
1215
+ updateRuntime?.(currentRuntime);
1216
+ updateStartup?.({ phase: "running", attempt: 0, state: "running" });
1217
+ bootLap("startEliza:runtime booted + ready:true");
778
1218
  console.log("[eliza] Server running. Press Ctrl+C to stop.");
1219
+ const { buildSandboxRegistryFromEnv } = await import("../services/sandbox-registry.js");
1220
+ const sandboxRegistry = buildSandboxRegistryFromEnv();
1221
+ if (sandboxRegistry) {
1222
+ try {
1223
+ await sandboxRegistry.register();
1224
+ }
1225
+ catch (err) {
1226
+ logger.error(`[eliza] Failed to register sandbox in Redis (gateways will not route inbound platform messages here until the next heartbeat succeeds): ${formatError(err)}`);
1227
+ }
1228
+ sandboxRegistry.startHeartbeat(30_000);
1229
+ }
779
1230
  const keepAlive = setInterval(() => { }, 1 << 30);
780
1231
  let isCleaningUp = false;
781
1232
  const cleanup = async () => {
@@ -789,8 +1240,17 @@ export async function startEliza(options) {
789
1240
  logger.warn("[eliza] Shutdown timed out after 10s — forcing exit");
790
1241
  process.exit(1);
791
1242
  }, 10_000);
792
- forceExitTimer.unref?.();
1243
+ forceExitTimer.unref();
793
1244
  stopTelegramBotPolling("SIGINT");
1245
+ if (sandboxRegistry) {
1246
+ sandboxRegistry.stopHeartbeat();
1247
+ try {
1248
+ await sandboxRegistry.unregister();
1249
+ }
1250
+ catch (err) {
1251
+ logger.warn(`[eliza] Sandbox unregister failed (keys will expire via TTL): ${formatError(err)}`);
1252
+ }
1253
+ }
794
1254
  if (currentRuntime) {
795
1255
  await upstreamShutdownRuntime(currentRuntime, "server-only shutdown");
796
1256
  }
@@ -815,13 +1275,27 @@ export async function startEliza(options) {
815
1275
  return currentRuntime;
816
1276
  }
817
1277
  const runtime = await upstreamStartElizaWithPgliteCompat(options);
818
- return runtime ? await repairRuntimeAfterBoot(runtime) : runtime;
1278
+ const repaired = runtime ? await repairRuntimeAfterBoot(runtime) : runtime;
1279
+ // Same wiring as the serverOnly branch above — hand the live runtime to
1280
+ // the early-installed compat wrapper so its dispatcher engages.
1281
+ if (repaired) {
1282
+ earlyCompatState.current = repaired;
1283
+ }
1284
+ return repaired;
819
1285
  }
820
1286
  finally {
821
1287
  syncElizaEnvAliases();
822
1288
  }
823
1289
  }
824
1290
  function isDirectRuntimeRun() {
1291
+ if (globalThis
1292
+ .__ELIZA_MOBILE_BUNDLE__ === true ||
1293
+ globalThis
1294
+ .__ELIZA_DISABLE_DIRECT_RUN === true ||
1295
+ process.argv.includes("ios-bridge") ||
1296
+ process.env.ELIZA_DISABLE_DIRECT_RUN === "1") {
1297
+ return false;
1298
+ }
825
1299
  const scriptArg = process.argv[1];
826
1300
  if (!scriptArg) {
827
1301
  return false;
@@ -856,7 +1330,7 @@ if (isDirectRuntimeRun()) {
856
1330
  }
857
1331
  else {
858
1332
  startEliza().catch((err) => {
859
- console.error("[eliza] Fatal error:", err instanceof Error ? (err.stack ?? err.message) : err);
1333
+ console.error("[eliza] Fatal error:", formatErrorWithStack(err));
860
1334
  process.exit(1);
861
1335
  });
862
1336
  }