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

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 (360) hide show
  1. package/agent-bridge.d.ts +5 -5
  2. package/api/auth/audit.d.ts +1 -1
  3. package/api/auth/auth-context.d.ts +1 -1
  4. package/api/auth/bootstrap-token.d.ts +1 -1
  5. package/api/auth/sessions.d.ts +1 -1
  6. package/api/auth-bootstrap-routes.d.ts +1 -1
  7. package/api/auth-pairing-routes.d.ts +1 -1
  8. package/api/auth-pairing-routes.d.ts.map +1 -1
  9. package/api/auth-pairing-routes.js +2 -3
  10. package/api/auth-session-routes.d.ts +2 -2
  11. package/api/auth.d.ts +1 -1
  12. package/api/automations-compat-routes.d.ts +1 -1
  13. package/api/background-tasks-routes.d.ts +1 -1
  14. package/api/catalog-routes.d.ts +1 -1
  15. package/api/cloud-voice-routes.d.ts +1 -1
  16. package/api/compat-route-shared.d.ts +12 -5
  17. package/api/compat-route-shared.d.ts.map +1 -1
  18. package/api/compat-route-shared.js +22 -187
  19. package/api/database-rows-compat-routes.d.ts +1 -1
  20. package/api/dev-compat-routes.d.ts +1 -1
  21. package/api/dev-route-catalog.d.ts.map +1 -1
  22. package/api/dev-route-catalog.js +20 -0
  23. package/api/drop-status-compat-route.d.ts +3 -0
  24. package/api/drop-status-compat-route.d.ts.map +1 -0
  25. package/api/drop-status-compat-route.js +12 -0
  26. package/api/first-run-routes.d.ts +1 -1
  27. package/api/internal-routes.d.ts +1 -1
  28. package/api/runtime-mode-routes.d.ts +1 -1
  29. package/api/secrets-manager-routes.d.ts.map +1 -1
  30. package/api/sensitive-request-routes.d.ts +2 -2
  31. package/api/server-config-filter.d.ts.map +1 -1
  32. package/api/server-config-filter.js +0 -1
  33. package/api/server-first-run-helpers.d.ts.map +1 -1
  34. package/api/server-first-run-helpers.js +0 -3
  35. package/api/server.d.ts +8 -8
  36. package/api/server.d.ts.map +1 -1
  37. package/api/server.js +13 -59
  38. package/api/training-benchmarks.d.ts +1 -1
  39. package/api/training-benchmarks.d.ts.map +1 -1
  40. package/api/training-benchmarks.js +31 -9
  41. package/api/workbench-compat-routes.d.ts +1 -1
  42. package/benchmark/server-utils.d.ts +2 -2
  43. package/browser.d.ts +4 -4
  44. package/cli/plugins-cli.d.ts.map +1 -1
  45. package/cli/plugins-cli.js +5 -0
  46. package/cli/program/register.auth.d.ts +27 -1
  47. package/cli/program/register.auth.d.ts.map +1 -1
  48. package/cli/program/register.auth.js +187 -0
  49. package/cli/program/register.dashboard.d.ts.map +1 -1
  50. package/cli/program/register.dashboard.js +11 -1
  51. package/cli/program.d.ts +1 -1
  52. package/first-run/first-run-config.d.ts +1 -1
  53. package/index.d.ts +46 -47
  54. package/index.d.ts.map +1 -1
  55. package/index.js +3 -7
  56. package/package.json +42 -36
  57. package/packaging/PUBLISHING_GUIDE.md +20 -20
  58. package/platform/elizaos-agent-browser-stub.d.ts +0 -1
  59. package/platform/elizaos-agent-browser-stub.d.ts.map +1 -1
  60. package/platform/elizaos-agent-browser-stub.js +0 -1
  61. package/platform/ios-runtime-bridge.d.ts.map +1 -1
  62. package/platform/ios-runtime-bridge.js +0 -1
  63. package/platform/native-plugin-entrypoints.d.ts +2 -2
  64. package/platforms/android/app/build.gradle +30 -7
  65. package/platforms/android/app/src/main/elizavoice-jni/elizavoice-jni.cpp +179 -35
  66. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +60 -32
  67. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBionicInferenceServer.java +405 -65
  68. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceNative.java +35 -0
  69. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +13 -6
  70. package/platforms/android/app/src/main/res/drawable/splash.png +0 -0
  71. package/platforms/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  72. package/platforms/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  73. package/platforms/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  74. package/platforms/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  75. package/platforms/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  76. package/platforms/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  77. package/platforms/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  78. package/platforms/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  79. package/platforms/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  80. package/platforms/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  81. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  82. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  83. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png +0 -0
  84. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  85. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  86. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  87. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png +0 -0
  88. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  89. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  90. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  91. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png +0 -0
  92. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  93. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  94. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  95. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png +0 -0
  96. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  97. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  98. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  99. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png +0 -0
  100. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  101. package/platforms/android/app/src/main/res/values/colors.xml +5 -1
  102. package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +1 -1
  103. package/platforms/android/app/src/main/res/values/styles.xml +4 -1
  104. package/platforms/electrobun/electrobun.config.ts +0 -1
  105. package/platforms/electrobun/native/macos/window-effects.mm +4 -0
  106. package/platforms/electrobun/package.json +11 -9
  107. package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +1 -1
  108. package/platforms/electrobun/remotes/runtime/src/dev/phase2-smoke.ts +10 -5
  109. package/platforms/electrobun/remotes/runtime/src/dev/phase3-smoke.ts +11 -15
  110. package/platforms/electrobun/src/application-menu.ts +0 -7
  111. package/platforms/electrobun/src/desktop-http-request.test.ts +30 -1
  112. package/platforms/electrobun/src/desktop-http-request.ts +14 -2
  113. package/platforms/electrobun/src/desktop-test-bridge-server.ts +28 -0
  114. package/platforms/electrobun/src/fatal-shutdown.test.ts +3 -7
  115. package/platforms/electrobun/src/index.ts +64 -13
  116. package/platforms/electrobun/src/lifecycle/api-base-owner.test.ts +83 -0
  117. package/platforms/electrobun/src/lifecycle/api-base-owner.ts +37 -16
  118. package/platforms/electrobun/src/native/agent.ts +28 -17
  119. package/platforms/electrobun/src/native/credentials.ts +6 -1
  120. package/platforms/electrobun/src/native/desktop-window.test.ts +142 -26
  121. package/platforms/electrobun/src/native/desktop.ts +8 -4
  122. package/platforms/electrobun/src/native/index.ts +6 -0
  123. package/platforms/electrobun/src/native/remote-plugin-host.ts +18 -8
  124. package/platforms/electrobun/src/preload.js +1 -1
  125. package/platforms/electrobun/src/voice/voice-live-validation.test.ts +10 -5
  126. package/platforms/electrobun/src/voice/voice-runtime-adapter.ts +3 -2
  127. package/platforms/electrobun/src/voice/voice-service.test.ts +26 -0
  128. package/platforms/electrobun/src/voice/voice-service.ts +57 -17
  129. package/platforms/electrobun/tsconfig.json +17 -1
  130. package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +4 -6
  131. package/registry/index.d.ts +1 -6
  132. package/registry/index.d.ts.map +1 -1
  133. package/registry/index.js +9 -101
  134. package/runtime/android-avf-microdroid-bridge.d.ts +1 -1
  135. package/runtime/bundled-fused-lib.d.ts +36 -0
  136. package/runtime/bundled-fused-lib.d.ts.map +1 -0
  137. package/runtime/bundled-fused-lib.js +77 -0
  138. package/runtime/channel-plugin-map.d.ts +1 -5
  139. package/runtime/channel-plugin-map.d.ts.map +1 -1
  140. package/runtime/channel-plugin-map.js +11 -31
  141. package/runtime/desktop/index.d.ts +5 -5
  142. package/runtime/dev-server.js +11 -2
  143. package/runtime/eliza.d.ts.map +1 -1
  144. package/runtime/eliza.js +18 -8
  145. package/runtime/mode/route-mode-guard.d.ts +1 -1
  146. package/runtime/mode/route-mode-matrix.d.ts +1 -1
  147. package/runtime/voice-warmup.d.ts +4 -19
  148. package/runtime/voice-warmup.d.ts.map +1 -1
  149. package/runtime/voice-warmup.js +4 -14
  150. package/scripts/aosp/README.md +10 -1
  151. package/scripts/aosp/compile-libllama-zig-pin.test.mjs +147 -0
  152. package/scripts/aosp/compile-libllama.mjs +446 -59
  153. package/scripts/aosp/compile-libllama.test.mjs +133 -0
  154. package/scripts/aosp/compile-shim.mjs +21 -1
  155. package/scripts/aosp/deploy-pixel.mjs +1 -1
  156. package/scripts/aosp/stage-default-models.mjs +24 -31
  157. package/scripts/aosp/stage-default-models.test.mjs +23 -0
  158. package/scripts/assert-required-bundled-packages.test.ts +22 -1
  159. package/scripts/build-helpers/verify-fused-symbols.mjs +33 -0
  160. package/scripts/build-helpers/verify-fused-symbols.test.mjs +0 -0
  161. package/scripts/build-image.sh +1 -3
  162. package/scripts/build-llama-cpp-mtp.mjs +17 -16
  163. package/scripts/check-i18n.mjs +0 -1
  164. package/scripts/copy-runtime-node-modules.ts +147 -0
  165. package/scripts/desktop-build.mjs +317 -4
  166. package/scripts/docker-ci-smoke.sh +33 -8
  167. package/scripts/ensure-type-package-aliases.mjs +1 -1
  168. package/scripts/ios-xcframework/run-physical-device-smoke.mjs +1 -1
  169. package/scripts/lib/agent-source-watcher.mjs +0 -1
  170. package/scripts/lib/artifact-staleness.d.mts +33 -0
  171. package/scripts/lib/artifact-staleness.mjs +122 -0
  172. package/scripts/lib/artifact-staleness.test.mts +98 -0
  173. package/scripts/lib/duet-bridge.mjs +1 -1
  174. package/scripts/lib/ios-plist-url-scheme.mjs +80 -0
  175. package/scripts/lib/mobile-build-decisions.mjs +97 -0
  176. package/scripts/lib/renderer-build-manifest.d.mts +65 -0
  177. package/scripts/lib/renderer-build-manifest.mjs +257 -0
  178. package/scripts/lib/renderer-build-manifest.test.mts +277 -0
  179. package/scripts/lib/stage-android-agent.mjs +13 -4
  180. package/scripts/lib/verify-ondevice-artifact.d.mts +16 -0
  181. package/scripts/lib/verify-ondevice-artifact.mjs +61 -0
  182. package/scripts/lib/verify-ondevice-artifact.test.mts +98 -0
  183. package/scripts/lib/websocket-pending-queue.ts +92 -0
  184. package/scripts/link-docker-local-app-packages.mjs +6 -0
  185. package/scripts/playwright-ui-live-stack.ts +430 -144
  186. package/scripts/playwright-ui-smoke-api-stub.mjs +160 -168
  187. package/scripts/run-local-plugin-live-smoke.mjs +1 -6
  188. package/scripts/run-mobile-build-brand-separation.test.mts +33 -0
  189. package/scripts/run-mobile-build-ios-engine-gate.test.mjs +85 -0
  190. package/scripts/run-mobile-build-mtp-staleness.test.mts +198 -0
  191. package/scripts/run-mobile-build.mjs +408 -86
  192. package/scripts/serve-real-local-agent.ts +72 -0
  193. package/scripts/stage-desktop-fused-lib.mjs +43 -14
  194. package/scripts/verify-ondevice-artifact.mjs +111 -0
  195. package/scripts/voice-attribution-smoke.ts +144 -38
  196. package/scripts/voice-duet.mjs +6 -6
  197. package/scripts/voice-e2e-hardware.ts +22 -16
  198. package/scripts/voice-interactive.mjs +16 -45
  199. package/security/agent-vault-id.d.ts +1 -1
  200. package/security/platform-secure-store-node.d.ts +1 -1
  201. package/services/ambient-audio/consent.d.ts +1 -1
  202. package/services/ambient-audio/index.d.ts +6 -6
  203. package/services/ambient-audio/replay-buffer.d.ts +1 -1
  204. package/services/ambient-audio/response-gate.d.ts +1 -1
  205. package/services/ambient-audio/service.d.ts +3 -3
  206. package/services/connector-target-catalog.d.ts +1 -1
  207. package/services/sensitive-requests/index.d.ts +6 -6
  208. package/services/steward-sidecar/wallet-setup.d.ts +1 -1
  209. package/services/steward-sidecar.d.ts +3 -3
  210. package/services/tunnel-to-mobile/index.d.ts +1 -1
  211. package/services/vault-bootstrap.d.ts.map +1 -1
  212. package/services/vault-bootstrap.js +14 -10
  213. package/services/voice-profiles/diarization-pipeline.d.ts +1 -1
  214. package/services/voice-profiles/index.d.ts +11 -11
  215. package/services/voice-profiles/owner-confidence.d.ts +1 -1
  216. package/services/voice-profiles/private-challenge.d.ts +1 -1
  217. package/services/voice-profiles/store.d.ts +1 -1
  218. package/test/helpers/live-provider.test.ts +91 -1
  219. package/test/helpers/live-provider.ts +195 -51
  220. package/test/scripts/websocket-pending-queue.test.ts +119 -0
  221. package/test-support/test-helpers.d.ts +0 -33
  222. package/test-support/test-helpers.d.ts.map +1 -1
  223. package/test-support/test-helpers.js +81 -189
  224. package/ui-compat.d.ts +1 -0
  225. package/ui-compat.d.ts.map +1 -1
  226. package/ui-compat.js +4 -0
  227. package/platforms/electrobun/docs/convergence-audit.json +0 -3505
  228. package/platforms/electrobun/docs/convergence-audit.md +0 -694
  229. package/platforms/electrobun/scripts/ensure-whisper-gguf.sh +0 -55
  230. package/platforms/electrobun/scripts/ensure-whisper-model.sh +0 -35
  231. package/platforms/electrobun/scripts/generate-convergence-audit.ts +0 -1203
  232. package/platforms/electrobun/src/native/whisper-env.test.ts +0 -71
  233. package/platforms/electrobun/src/native/whisper-env.ts +0 -68
  234. package/registry/app-registry.d.ts +0 -14
  235. package/registry/app-registry.d.ts.map +0 -1
  236. package/registry/app-registry.js +0 -29
  237. package/registry/entries/apps/app-polymarket.json +0 -31
  238. package/registry/entries/apps/clawville.json +0 -27
  239. package/registry/entries/apps/companion.json +0 -28
  240. package/registry/entries/apps/database-viewer.json +0 -27
  241. package/registry/entries/apps/defense-of-the-agents.json +0 -27
  242. package/registry/entries/apps/documents.json +0 -30
  243. package/registry/entries/apps/feed.json +0 -27
  244. package/registry/entries/apps/hyperliquid.json +0 -31
  245. package/registry/entries/apps/log-viewer.json +0 -27
  246. package/registry/entries/apps/memory-viewer.json +0 -27
  247. package/registry/entries/apps/model-tester.json +0 -31
  248. package/registry/entries/apps/plugin-viewer.json +0 -27
  249. package/registry/entries/apps/relationship-viewer.json +0 -27
  250. package/registry/entries/apps/runtime-debugger.json +0 -27
  251. package/registry/entries/apps/shopify.json +0 -31
  252. package/registry/entries/apps/skills-viewer.json +0 -27
  253. package/registry/entries/apps/steward.json +0 -31
  254. package/registry/entries/apps/training.json +0 -54
  255. package/registry/entries/apps/trajectory-viewer.json +0 -27
  256. package/registry/entries/apps/vincent.json +0 -31
  257. package/registry/entries/connectors/bluebubbles.json +0 -99
  258. package/registry/entries/connectors/bluesky.json +0 -173
  259. package/registry/entries/connectors/discord.json +0 -119
  260. package/registry/entries/connectors/farcaster.json +0 -174
  261. package/registry/entries/connectors/feishu.json +0 -79
  262. package/registry/entries/connectors/google-chat.json +0 -120
  263. package/registry/entries/connectors/google.json +0 -82
  264. package/registry/entries/connectors/imessage.json +0 -96
  265. package/registry/entries/connectors/instagram.json +0 -64
  266. package/registry/entries/connectors/line.json +0 -86
  267. package/registry/entries/connectors/matrix.json +0 -94
  268. package/registry/entries/connectors/mattermost.json +0 -110
  269. package/registry/entries/connectors/msteams.json +0 -104
  270. package/registry/entries/connectors/nextcloud-talk.json +0 -104
  271. package/registry/entries/connectors/nostr.json +0 -70
  272. package/registry/entries/connectors/signal.json +0 -81
  273. package/registry/entries/connectors/slack.json +0 -102
  274. package/registry/entries/connectors/telegram.json +0 -71
  275. package/registry/entries/connectors/tlon.json +0 -94
  276. package/registry/entries/connectors/twitch.json +0 -110
  277. package/registry/entries/connectors/whatsapp.json +0 -113
  278. package/registry/entries/connectors/x.json +0 -231
  279. package/registry/entries/connectors/zalo.json +0 -112
  280. package/registry/entries/connectors/zalouser.json +0 -122
  281. package/registry/entries/plugins/agent-orchestrator.json +0 -33
  282. package/registry/entries/plugins/agent-skills.json +0 -72
  283. package/registry/entries/plugins/anthropic.json +0 -73
  284. package/registry/entries/plugins/app-control.json +0 -23
  285. package/registry/entries/plugins/auto-trader.json +0 -203
  286. package/registry/entries/plugins/background-runner.json +0 -26
  287. package/registry/entries/plugins/blooio.json +0 -102
  288. package/registry/entries/plugins/browser.json +0 -75
  289. package/registry/entries/plugins/cli.json +0 -40
  290. package/registry/entries/plugins/clipboard.json +0 -44
  291. package/registry/entries/plugins/coding-tools.json +0 -71
  292. package/registry/entries/plugins/commands.json +0 -63
  293. package/registry/entries/plugins/computeruse.json +0 -74
  294. package/registry/entries/plugins/copilot-proxy.json +0 -93
  295. package/registry/entries/plugins/directives.json +0 -63
  296. package/registry/entries/plugins/edge-tts.json +0 -97
  297. package/registry/entries/plugins/elevenlabs.json +0 -169
  298. package/registry/entries/plugins/elizacloud.json +0 -208
  299. package/registry/entries/plugins/evm.json +0 -134
  300. package/registry/entries/plugins/experience.json +0 -34
  301. package/registry/entries/plugins/facewear.json +0 -131
  302. package/registry/entries/plugins/form.json +0 -26
  303. package/registry/entries/plugins/github.json +0 -93
  304. package/registry/entries/plugins/gmail-watch.json +0 -25
  305. package/registry/entries/plugins/goals.json +0 -77
  306. package/registry/entries/plugins/google-genai.json +0 -106
  307. package/registry/entries/plugins/groq.json +0 -93
  308. package/registry/entries/plugins/hedera.json +0 -48
  309. package/registry/entries/plugins/inmemorydb.json +0 -25
  310. package/registry/entries/plugins/linear.json +0 -51
  311. package/registry/entries/plugins/local-inference.json +0 -137
  312. package/registry/entries/plugins/local-storage.json +0 -36
  313. package/registry/entries/plugins/localdb.json +0 -25
  314. package/registry/entries/plugins/mcp.json +0 -44
  315. package/registry/entries/plugins/memory.json +0 -124
  316. package/registry/entries/plugins/minecraft.json +0 -79
  317. package/registry/entries/plugins/moltbook.json +0 -83
  318. package/registry/entries/plugins/music.json +0 -155
  319. package/registry/entries/plugins/mysticism.json +0 -48
  320. package/registry/entries/plugins/nearai.json +0 -82
  321. package/registry/entries/plugins/ngrok.json +0 -69
  322. package/registry/entries/plugins/ollama.json +0 -96
  323. package/registry/entries/plugins/openai.json +0 -189
  324. package/registry/entries/plugins/openrouter.json +0 -188
  325. package/registry/entries/plugins/pdf.json +0 -26
  326. package/registry/entries/plugins/plugin-manager.json +0 -23
  327. package/registry/entries/plugins/prose.json +0 -48
  328. package/registry/entries/plugins/rlm.json +0 -26
  329. package/registry/entries/plugins/roblox.json +0 -88
  330. package/registry/entries/plugins/rss.json +0 -64
  331. package/registry/entries/plugins/s3-storage.json +0 -91
  332. package/registry/entries/plugins/scheduling.json +0 -35
  333. package/registry/entries/plugins/shell.json +0 -94
  334. package/registry/entries/plugins/social-alpha.json +0 -72
  335. package/registry/entries/plugins/tailscale.json +0 -81
  336. package/registry/entries/plugins/tee.json +0 -53
  337. package/registry/entries/plugins/todos.json +0 -26
  338. package/registry/entries/plugins/trajectory-logger.json +0 -33
  339. package/registry/entries/plugins/trust.json +0 -39
  340. package/registry/entries/plugins/tts.json +0 -71
  341. package/registry/entries/plugins/tunnel.json +0 -45
  342. package/registry/entries/plugins/twilio.json +0 -168
  343. package/registry/entries/plugins/vercel-ai-gateway.json +0 -128
  344. package/registry/entries/plugins/video.json +0 -23
  345. package/registry/entries/plugins/vision.json +0 -43
  346. package/registry/entries/plugins/webhooks.json +0 -23
  347. package/registry/entries/plugins/workflow.json +0 -25
  348. package/registry/entries/plugins/xai.json +0 -75
  349. package/registry/loader.d.ts +0 -28
  350. package/registry/loader.d.ts.map +0 -1
  351. package/registry/loader.js +0 -158
  352. package/registry/schema.d.ts +0 -1199
  353. package/registry/schema.d.ts.map +0 -1
  354. package/registry/schema.js +0 -300
  355. package/scripts/patches/llama-mobile-kokoro-tts.patch +0 -480
  356. package/scripts/release-workflow-drift.test.ts +0 -57
  357. package/test/helpers/i18n.ts +0 -5
  358. package/test/helpers/loopback.ts +0 -33
  359. package/test/helpers/react-test.ts +0 -40
  360. package/test/helpers/skip-without.ts +0 -53
@@ -20,7 +20,6 @@ import path from "node:path";
20
20
  export const HOT_RELOAD_FRONTEND_PACKAGES = new Set([
21
21
  "ui",
22
22
  "app",
23
- "cloud-frontend",
24
23
  "os-homepage",
25
24
  "homepage",
26
25
  "docs",
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Type declarations for `artifact-staleness.mjs` — generic source-vs-artifact
3
+ * staleness used by the iOS MTP slice, iOS agent bundle, and desktop runtime
4
+ * package reuse gates (issue #9309).
5
+ */
6
+
7
+ export function maxMtimeUnder(
8
+ dir: string,
9
+ opts?: {
10
+ exclude?: Set<string>;
11
+ exts?: Set<string> | null;
12
+ maxDepth?: number;
13
+ },
14
+ ): number;
15
+
16
+ export function fileMtime(filePath: string): number;
17
+
18
+ export interface ArtifactStaleness {
19
+ stale: boolean;
20
+ reason: string;
21
+ artifactMtime: number;
22
+ newestSourceMtime: number;
23
+ newestSource: string | null;
24
+ }
25
+
26
+ export function artifactStaleness(
27
+ artifactPath: string,
28
+ opts?: {
29
+ sourceDirs?: string[];
30
+ sourceFiles?: string[];
31
+ exts?: Set<string> | null;
32
+ },
33
+ ): ArtifactStaleness;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Generic source-vs-artifact staleness check (issue #9309).
3
+ *
4
+ * Several on-device build inputs are cached and reused across builds (the iOS
5
+ * llama.cpp MTP slice, the iOS agent bundle, desktop runtime packages). Each had
6
+ * a presence-only reuse gate that could silently reuse a STALE artifact after
7
+ * its sources changed. This module turns "reuse when present" into "reuse only
8
+ * when the artifact is newer than every source it was built from", so a changed
9
+ * input forces a rebuild instead of shipping old code.
10
+ *
11
+ * mtime is the right granularity here: these artifacts are heavy native/bundle
12
+ * builds keyed off large source trees, and the build host writes both, so an
13
+ * artifact older than any source file is unambiguously stale.
14
+ */
15
+ import fs from "node:fs";
16
+ import path from "node:path";
17
+
18
+ const DEFAULT_EXCLUDE = new Set([
19
+ "node_modules",
20
+ "dist",
21
+ "build",
22
+ ".git",
23
+ ".turbo",
24
+ "out",
25
+ ]);
26
+
27
+ /**
28
+ * Largest mtime (ms) of any file under `dir`, skipping build/dep dirs.
29
+ * @param {string} dir
30
+ * @param {{ exclude?: Set<string>, exts?: Set<string>|null, maxDepth?: number }} [opts]
31
+ */
32
+ export function maxMtimeUnder(
33
+ dir,
34
+ { exclude = DEFAULT_EXCLUDE, exts = null, maxDepth = 25 } = {},
35
+ ) {
36
+ let max = 0;
37
+ const walk = (current, depth) => {
38
+ if (depth > maxDepth) return;
39
+ let entries;
40
+ try {
41
+ entries = fs.readdirSync(current, { withFileTypes: true });
42
+ } catch {
43
+ return;
44
+ }
45
+ for (const entry of entries) {
46
+ if (exclude.has(entry.name)) continue;
47
+ const full = path.join(current, entry.name);
48
+ if (entry.isDirectory()) {
49
+ walk(full, depth + 1);
50
+ continue;
51
+ }
52
+ if (exts && !exts.has(path.extname(entry.name))) continue;
53
+ try {
54
+ max = Math.max(max, fs.statSync(full).mtimeMs);
55
+ } catch {
56
+ /* ignore unreadable entries */
57
+ }
58
+ }
59
+ };
60
+ if (fs.existsSync(dir)) walk(dir, 0);
61
+ return max;
62
+ }
63
+
64
+ /** mtime (ms) of a single file, or 0 if missing/unreadable. */
65
+ export function fileMtime(filePath) {
66
+ try {
67
+ return fs.statSync(filePath).mtimeMs;
68
+ } catch {
69
+ return 0;
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Is `artifactPath` stale relative to its source dirs/files?
75
+ *
76
+ * @param {string} artifactPath the built artifact (or its marker file)
77
+ * @param {{ sourceDirs?: string[], sourceFiles?: string[], exts?: Set<string>|null }} [opts]
78
+ * @returns {{ stale: boolean, reason: string, artifactMtime: number,
79
+ * newestSourceMtime: number, newestSource: string|null }}
80
+ */
81
+ export function artifactStaleness(
82
+ artifactPath,
83
+ { sourceDirs = [], sourceFiles = [], exts = null } = {},
84
+ ) {
85
+ const artifactMtime = fileMtime(artifactPath);
86
+ if (!artifactMtime) {
87
+ return {
88
+ stale: true,
89
+ reason: `artifact missing: ${artifactPath}`,
90
+ artifactMtime: 0,
91
+ newestSourceMtime: 0,
92
+ newestSource: null,
93
+ };
94
+ }
95
+ let newestSourceMtime = 0;
96
+ let newestSource = null;
97
+ const consider = (mtime, label) => {
98
+ if (mtime > newestSourceMtime) {
99
+ newestSourceMtime = mtime;
100
+ newestSource = label;
101
+ }
102
+ };
103
+ for (const dir of sourceDirs) consider(maxMtimeUnder(dir, { exts }), dir);
104
+ for (const file of sourceFiles) consider(fileMtime(file), file);
105
+
106
+ if (newestSourceMtime > artifactMtime) {
107
+ return {
108
+ stale: true,
109
+ reason: `source newer than artifact (${newestSource})`,
110
+ artifactMtime,
111
+ newestSourceMtime,
112
+ newestSource,
113
+ };
114
+ }
115
+ return {
116
+ stale: false,
117
+ reason: "fresh",
118
+ artifactMtime,
119
+ newestSourceMtime,
120
+ newestSource,
121
+ };
122
+ }
@@ -0,0 +1,98 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+
6
+ import {
7
+ artifactStaleness,
8
+ fileMtime,
9
+ maxMtimeUnder,
10
+ } from "./artifact-staleness.mjs";
11
+
12
+ let tmp: string;
13
+
14
+ beforeEach(() => {
15
+ tmp = fs.mkdtempSync(path.join(os.tmpdir(), "artifact-staleness-"));
16
+ });
17
+
18
+ afterEach(() => {
19
+ fs.rmSync(tmp, { recursive: true, force: true });
20
+ });
21
+
22
+ function touch(file: string, mtimeMs: number) {
23
+ fs.mkdirSync(path.dirname(file), { recursive: true });
24
+ fs.writeFileSync(file, "x");
25
+ fs.utimesSync(file, mtimeMs / 1000, mtimeMs / 1000);
26
+ }
27
+
28
+ describe("maxMtimeUnder", () => {
29
+ it("returns the newest file mtime and skips build/dep dirs", () => {
30
+ touch(path.join(tmp, "src", "a.ts"), 1_000_000);
31
+ touch(path.join(tmp, "src", "nested", "b.ts"), 3_000_000);
32
+ touch(path.join(tmp, "node_modules", "junk.js"), 9_000_000);
33
+ touch(path.join(tmp, "dist", "out.js"), 9_000_000);
34
+ expect(maxMtimeUnder(path.join(tmp, "src"))).toBe(3_000_000);
35
+ });
36
+
37
+ it("honors an extension filter", () => {
38
+ touch(path.join(tmp, "src", "a.ts"), 2_000_000);
39
+ touch(path.join(tmp, "src", "a.png"), 5_000_000);
40
+ expect(
41
+ maxMtimeUnder(path.join(tmp, "src"), { exts: new Set([".ts"]) }),
42
+ ).toBe(2_000_000);
43
+ });
44
+
45
+ it("returns 0 for a missing dir", () => {
46
+ expect(maxMtimeUnder(path.join(tmp, "nope"))).toBe(0);
47
+ });
48
+ });
49
+
50
+ describe("fileMtime", () => {
51
+ it("returns the mtime of an existing file and 0 for a missing one", () => {
52
+ touch(path.join(tmp, "f"), 4_000_000);
53
+ expect(fileMtime(path.join(tmp, "f"))).toBe(4_000_000);
54
+ expect(fileMtime(path.join(tmp, "missing"))).toBe(0);
55
+ });
56
+ });
57
+
58
+ describe("artifactStaleness", () => {
59
+ it("is stale when the artifact is missing", () => {
60
+ const result = artifactStaleness(path.join(tmp, "art"), {
61
+ sourceDirs: [tmp],
62
+ });
63
+ expect(result.stale).toBe(true);
64
+ expect(result.reason).toMatch(/artifact missing/);
65
+ });
66
+
67
+ it("is stale when a source dir is newer than the artifact", () => {
68
+ touch(path.join(tmp, "artifact"), 2_000_000);
69
+ touch(path.join(tmp, "src", "code.ts"), 5_000_000);
70
+ const result = artifactStaleness(path.join(tmp, "artifact"), {
71
+ sourceDirs: [path.join(tmp, "src")],
72
+ });
73
+ expect(result.stale).toBe(true);
74
+ expect(result.reason).toMatch(/source newer than artifact/);
75
+ expect(result.newestSource).toBe(path.join(tmp, "src"));
76
+ });
77
+
78
+ it("is stale when a source FILE is newer than the artifact", () => {
79
+ touch(path.join(tmp, "artifact"), 2_000_000);
80
+ touch(path.join(tmp, "build-script.mjs"), 6_000_000);
81
+ const result = artifactStaleness(path.join(tmp, "artifact"), {
82
+ sourceFiles: [path.join(tmp, "build-script.mjs")],
83
+ });
84
+ expect(result.stale).toBe(true);
85
+ });
86
+
87
+ it("is fresh when the artifact is newer than all sources", () => {
88
+ touch(path.join(tmp, "src", "code.ts"), 2_000_000);
89
+ touch(path.join(tmp, "build-script.mjs"), 1_000_000);
90
+ touch(path.join(tmp, "artifact"), 5_000_000);
91
+ const result = artifactStaleness(path.join(tmp, "artifact"), {
92
+ sourceDirs: [path.join(tmp, "src")],
93
+ sourceFiles: [path.join(tmp, "build-script.mjs")],
94
+ });
95
+ expect(result.stale).toBe(false);
96
+ expect(result.reason).toBe("fresh");
97
+ });
98
+ });
@@ -8,7 +8,7 @@
8
8
  * A.scheduler.sink ── DuetSink(aToB) ──→ PcmRingBuffer ──→ B.micSource.push
9
9
  * B.scheduler.sink ── DuetSink(bToA) ──→ PcmRingBuffer ──→ A.micSource.push
10
10
  *
11
- * The TTS emits 24 kHz mono; the VAD + Qwen3-ASR want 16 kHz mono — one
11
+ * The TTS emits 24 kHz mono; the VAD + local ASR want 16 kHz mono — one
12
12
  * linear-interpolation resample in the `DuetSink`, zero file writes.
13
13
  *
14
14
  * `DuetSink` also reports the **`peer-utterance-end`** instant: when the
@@ -0,0 +1,80 @@
1
+ function escapeXmlText(value) {
2
+ return String(value)
3
+ .replace(/&/g, "&amp;")
4
+ .replace(/</g, "&lt;")
5
+ .replace(/>/g, "&gt;")
6
+ .replace(/"/g, "&quot;")
7
+ .replace(/'/g, "&apos;");
8
+ }
9
+
10
+ function insertBeforeRootPlistDictClose(content, insertion) {
11
+ const rootClose = "\n</dict>\n</plist>";
12
+ const index = content.lastIndexOf(rootClose);
13
+ if (index >= 0) {
14
+ return `${content.slice(0, index)}\n${insertion}${content.slice(index + "\n</dict>".length)}`;
15
+ }
16
+ const fallbackIndex = content.lastIndexOf("</dict>");
17
+ if (fallbackIndex < 0) {
18
+ throw new Error("Info.plist: could not locate top-level </dict>");
19
+ }
20
+ return `${content.slice(0, fallbackIndex)}${insertion}${content.slice(fallbackIndex + "</dict>".length)}`;
21
+ }
22
+
23
+ function findUrlTypesArrayRange(content) {
24
+ const keyIndex = content.indexOf("<key>CFBundleURLTypes</key>");
25
+ if (keyIndex < 0) return null;
26
+ const openMatch = /<array\b[^>]*>/g;
27
+ openMatch.lastIndex = keyIndex;
28
+ const firstOpen = openMatch.exec(content);
29
+ if (!firstOpen) {
30
+ throw new Error("Info.plist: CFBundleURLTypes has no array value");
31
+ }
32
+
33
+ const tagRe = /<\/?array\b[^>]*>/g;
34
+ tagRe.lastIndex = firstOpen.index;
35
+ let depth = 0;
36
+ for (let match = tagRe.exec(content); match; match = tagRe.exec(content)) {
37
+ if (match[0].startsWith("</")) {
38
+ depth -= 1;
39
+ if (depth === 0) return { start: firstOpen.index, close: match.index };
40
+ if (depth < 0) break;
41
+ } else {
42
+ depth += 1;
43
+ }
44
+ }
45
+
46
+ throw new Error("Info.plist: CFBundleURLTypes array is not closed");
47
+ }
48
+
49
+ export function ensurePlistUrlScheme(content, urlScheme) {
50
+ const trimmedScheme = String(urlScheme).trim();
51
+ if (!trimmedScheme) {
52
+ throw new Error("Cannot patch iOS Info.plist without a URL scheme");
53
+ }
54
+
55
+ const escapedScheme = escapeXmlText(trimmedScheme);
56
+ const entry = `
57
+ <dict>
58
+ <key>CFBundleURLName</key>
59
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
60
+ <key>CFBundleURLSchemes</key>
61
+ <array>
62
+ <string>${escapedScheme}</string>
63
+ </array>
64
+ </dict>`;
65
+ const urlTypesArrayRange = findUrlTypesArrayRange(content);
66
+ if (urlTypesArrayRange === null) {
67
+ return insertBeforeRootPlistDictClose(
68
+ content,
69
+ `\t<key>CFBundleURLTypes</key>\n\t<array>${entry}\n\t</array>\n</dict>`,
70
+ );
71
+ }
72
+ const urlTypesContent = content.slice(
73
+ urlTypesArrayRange.start,
74
+ urlTypesArrayRange.close,
75
+ );
76
+ if (urlTypesContent.includes(`<string>${escapedScheme}</string>`)) {
77
+ return content;
78
+ }
79
+ return `${content.slice(0, urlTypesArrayRange.close)}${entry}${content.slice(urlTypesArrayRange.close)}`;
80
+ }
@@ -0,0 +1,97 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ import { artifactStaleness } from "./artifact-staleness.mjs";
6
+
7
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
+ const appCoreScriptsDir = path.resolve(__dirname, "..");
9
+
10
+ /**
11
+ * Brand-separation invariant (issue #9309): the shared canonical Android tree
12
+ * is used only for the elizaOS app itself. Whitelabel builds use appDir/android
13
+ * so identity overlays cannot corrupt another brand's native project.
14
+ */
15
+ export function androidUsesAppDirFor(appId, env = process.env) {
16
+ return env.ELIZA_ANDROID_USE_APP_DIR === "1" || appId !== "ai.elizaos.app";
17
+ }
18
+
19
+ const MTP_BUILD_SCRIPT = path.resolve(
20
+ appCoreScriptsDir,
21
+ "build-llama-cpp-mtp.mjs",
22
+ );
23
+
24
+ // The builder derives its repo root from packages/app-core/scripts, not from
25
+ // run-mobile-build's configurable repoRoot. Keep this identical so the
26
+ // staleness gate checks the same source tree the builder compiles.
27
+ export const mtpBuilderRepoRoot = path.resolve(
28
+ appCoreScriptsDir,
29
+ "..",
30
+ "..",
31
+ "..",
32
+ );
33
+
34
+ export const MTP_FORK_SRC_CANDIDATES = [
35
+ process.env.ELIZA_MTP_LLAMA_CPP_SRC?.trim(),
36
+ path.join(
37
+ mtpBuilderRepoRoot,
38
+ "plugins",
39
+ "plugin-local-inference",
40
+ "native",
41
+ "llama.cpp",
42
+ ),
43
+ path.join(
44
+ mtpBuilderRepoRoot,
45
+ "packages",
46
+ "native",
47
+ "ios-deps",
48
+ "llama.cpp",
49
+ "src",
50
+ ),
51
+ ].filter(Boolean);
52
+
53
+ /**
54
+ * Decide whether a staged MTP slice can be reused or is stale relative to the
55
+ * fork it was built from.
56
+ */
57
+ export function mtpSliceReuse(capabilitiesPath, forkSrc, currentRevision) {
58
+ if (!fs.existsSync(capabilitiesPath)) {
59
+ return { reusable: false, reason: "no CAPABILITIES.json" };
60
+ }
61
+ let recordedRevision = null;
62
+ try {
63
+ recordedRevision = JSON.parse(fs.readFileSync(capabilitiesPath, "utf8"))
64
+ ?.fork?.revision;
65
+ } catch {
66
+ return { reusable: false, reason: "unreadable CAPABILITIES.json" };
67
+ }
68
+ if (recordedRevision === "unknown") recordedRevision = null;
69
+ if (
70
+ recordedRevision &&
71
+ currentRevision &&
72
+ recordedRevision !== currentRevision
73
+ ) {
74
+ return {
75
+ reusable: false,
76
+ reason: `fork revision changed (${recordedRevision} -> ${currentRevision})`,
77
+ };
78
+ }
79
+ if (forkSrc) {
80
+ const staleness = artifactStaleness(capabilitiesPath, {
81
+ sourceDirs: [
82
+ path.join(forkSrc, "ggml"),
83
+ path.join(forkSrc, "src"),
84
+ path.join(forkSrc, "common"),
85
+ ],
86
+ sourceFiles: [path.join(forkSrc, "CMakeLists.txt"), MTP_BUILD_SCRIPT],
87
+ });
88
+ if (staleness.stale) {
89
+ return { reusable: false, reason: staleness.reason };
90
+ }
91
+ }
92
+ return { reusable: true, reason: "fresh" };
93
+ }
94
+
95
+ export function mtpForceRebuildRequested(reuse, env = process.env) {
96
+ return env.ELIZA_IOS_REBUILD_MTP === "1" || !reuse.reusable;
97
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Type declarations for `renderer-build-manifest.mjs` — the deterministic build
3
+ * stamp for the web/renderer bundle (issue #9309). Imported by the vite
4
+ * `renderer-build-manifest` plugin and the platform build orchestrators.
5
+ */
6
+
7
+ export const RENDERER_BUILD_MANIFEST_FILENAME: "eliza-renderer-build.json";
8
+ export const RENDERER_BUILD_MANIFEST_SCHEMA: "elizaos.renderer.build/v1";
9
+
10
+ export interface RendererBuildManifest {
11
+ schema: string;
12
+ buildId: string;
13
+ indexHtmlSha256: string;
14
+ assetCount: number;
15
+ builtAt: string;
16
+ commit: string | null;
17
+ variant: string | null;
18
+ capacitorTarget: string | null;
19
+ runtimeMode: string | null;
20
+ }
21
+
22
+ export interface RendererBuildManifestMeta {
23
+ builtAt?: string;
24
+ commit?: string | null;
25
+ variant?: string | null;
26
+ capacitorTarget?: string | null;
27
+ runtimeMode?: string | null;
28
+ }
29
+
30
+ export function computeRendererFingerprint(distDir: string): {
31
+ buildId: string;
32
+ indexHtmlSha256: string;
33
+ assetCount: number;
34
+ };
35
+
36
+ export function buildRendererManifest(
37
+ distDir: string,
38
+ meta?: RendererBuildManifestMeta,
39
+ ): RendererBuildManifest;
40
+
41
+ export function writeRendererBuildManifest(
42
+ distDir: string,
43
+ meta?: RendererBuildManifestMeta,
44
+ ): RendererBuildManifest;
45
+
46
+ export function readRendererBuildManifest(
47
+ dir: string,
48
+ ): RendererBuildManifest | null;
49
+
50
+ export function assertStagedRendererMatchesBuild(
51
+ freshDistDir: string,
52
+ stagedDir: string,
53
+ opts?: { label?: string },
54
+ ): RendererBuildManifest;
55
+
56
+ export function overlayFreshRendererIntoPublic(
57
+ freshDistDir: string,
58
+ targetPublicDir: string,
59
+ opts?: { label?: string },
60
+ ): RendererBuildManifest;
61
+
62
+ export function assertRendererRebuiltSince(
63
+ distDir: string,
64
+ opts: { notBefore: number; expectVariant?: string | null; label?: string },
65
+ ): RendererBuildManifest;