@elizaos/app-core 2.0.0-beta.3 → 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 (1530) 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.js +5 -5
  88. package/api/server-cors.d.ts.map +1 -1
  89. package/api/server-cors.js +13 -2
  90. package/api/server-first-run-helpers.d.ts +26 -0
  91. package/api/server-first-run-helpers.d.ts.map +1 -0
  92. package/api/server-first-run-helpers.js +271 -0
  93. package/api/server-security.js +1 -1
  94. package/api/server-startup.d.ts.map +1 -1
  95. package/api/server-startup.js +3 -4
  96. package/api/server-wallet-trade.js +1 -1
  97. package/api/server.d.ts +4 -4
  98. package/api/server.d.ts.map +1 -1
  99. package/api/server.js +222 -88
  100. package/api/setup-contract.d.ts +63 -0
  101. package/api/setup-contract.d.ts.map +1 -0
  102. package/api/setup-contract.js +39 -0
  103. package/api/training-benchmarks.d.ts +97 -0
  104. package/api/training-benchmarks.d.ts.map +1 -0
  105. package/api/training-benchmarks.js +307 -0
  106. package/api/workbench-compat-routes.js +2 -2
  107. package/benchmark/cerebras-autowire.d.ts +28 -0
  108. package/benchmark/cerebras-autowire.d.ts.map +1 -0
  109. package/benchmark/cerebras-autowire.js +62 -0
  110. package/benchmark/lifeops-bench-handler.d.ts +36 -0
  111. package/benchmark/lifeops-bench-handler.d.ts.map +1 -1
  112. package/benchmark/lifeops-bench-handler.js +63 -1
  113. package/benchmark/lifeops-fake-backend.d.ts +39 -0
  114. package/benchmark/lifeops-fake-backend.d.ts.map +1 -1
  115. package/benchmark/lifeops-fake-backend.js +993 -21
  116. package/benchmark/mock-plugin.d.ts.map +1 -1
  117. package/benchmark/mock-plugin.js +0 -24
  118. package/benchmark/plugin.d.ts +2 -1
  119. package/benchmark/plugin.d.ts.map +1 -1
  120. package/benchmark/plugin.js +989 -68
  121. package/benchmark/replay-capture.d.ts +2 -2
  122. package/benchmark/replay-capture.d.ts.map +1 -1
  123. package/benchmark/replay-capture.js +3 -3
  124. package/benchmark/server-utils.d.ts +162 -9
  125. package/benchmark/server-utils.d.ts.map +1 -1
  126. package/benchmark/server-utils.js +625 -62
  127. package/benchmark/server.d.ts.map +1 -1
  128. package/benchmark/server.js +1962 -118
  129. package/boot-profile.d.ts +3 -0
  130. package/boot-profile.d.ts.map +1 -0
  131. package/boot-profile.js +30 -0
  132. package/browser.d.ts +23 -1
  133. package/browser.d.ts.map +1 -1
  134. package/browser.js +20 -1
  135. package/cli/argv.js +1 -1
  136. package/cli/banner.js +1 -1
  137. package/cli/command-format.js +2 -2
  138. package/cli/doctor/checks.d.ts.map +1 -1
  139. package/cli/doctor/checks.js +6 -6
  140. package/cli/plugins-cli.d.ts.map +1 -1
  141. package/cli/plugins-cli.js +77 -32
  142. package/cli/profile.d.ts.map +1 -1
  143. package/cli/profile.js +5 -4
  144. package/cli/program/build-program.js +4 -4
  145. package/cli/program/command-registry.d.ts.map +1 -1
  146. package/cli/program/command-registry.js +13 -11
  147. package/cli/program/help.js +5 -5
  148. package/cli/program/preaction.js +5 -5
  149. package/cli/program/register.auth.d.ts.map +1 -1
  150. package/cli/program/register.auth.js +6 -12
  151. package/cli/program/register.capability-router.d.ts +29 -0
  152. package/cli/program/register.capability-router.d.ts.map +1 -0
  153. package/cli/program/register.capability-router.js +568 -0
  154. package/cli/program/register.config.js +1 -1
  155. package/cli/program/register.configure.d.ts.map +1 -1
  156. package/cli/program/register.configure.js +1 -1
  157. package/cli/program/register.dashboard.d.ts.map +1 -1
  158. package/cli/program/register.dashboard.js +6 -7
  159. package/cli/program/register.db.d.ts.map +1 -1
  160. package/cli/program/register.db.js +3 -4
  161. package/cli/program/register.doctor.js +7 -7
  162. package/cli/program/register.setup.d.ts.map +1 -1
  163. package/cli/program/register.setup.js +14 -10
  164. package/cli/program/register.start.d.ts.map +1 -1
  165. package/cli/program/register.start.js +5 -3
  166. package/cli/program/register.subclis.js +3 -3
  167. package/cli/program/register.update.d.ts +6 -0
  168. package/cli/program/register.update.d.ts.map +1 -1
  169. package/cli/program/register.update.js +58 -6
  170. package/cli/program.js +1 -1
  171. package/cli/run-main.js +4 -4
  172. package/config/app-config.d.ts +2 -0
  173. package/config/app-config.d.ts.map +1 -0
  174. package/config/app-config.js +1 -0
  175. package/connectors/capacitor-jsc.d.ts.map +1 -1
  176. package/connectors/capacitor-jsc.js +16 -10
  177. package/connectors/capacitor-quickjs.d.ts.map +1 -1
  178. package/connectors/capacitor-quickjs.js +18 -13
  179. package/connectors/capacitor-sqlite.d.ts.map +1 -1
  180. package/connectors/capacitor-sqlite.js +27 -12
  181. package/dispatch/approval-queue.d.ts +37 -0
  182. package/dispatch/approval-queue.d.ts.map +1 -0
  183. package/dispatch/approval-queue.js +25 -0
  184. package/dispatch/channel-registry.d.ts +30 -0
  185. package/dispatch/channel-registry.d.ts.map +1 -0
  186. package/dispatch/channel-registry.js +22 -0
  187. package/dispatch/connector-registry.d.ts +39 -0
  188. package/dispatch/connector-registry.d.ts.map +1 -0
  189. package/dispatch/connector-registry.js +24 -0
  190. package/dispatch/index.d.ts +14 -0
  191. package/dispatch/index.d.ts.map +1 -0
  192. package/dispatch/index.js +13 -0
  193. package/dispatch/send-policy.d.ts +36 -0
  194. package/dispatch/send-policy.d.ts.map +1 -0
  195. package/dispatch/send-policy.js +16 -0
  196. package/entry.js +28 -11
  197. package/first-run/first-run-config.d.ts +55 -0
  198. package/first-run/first-run-config.d.ts.map +1 -0
  199. package/first-run/first-run-config.js +178 -0
  200. package/first-run/runtime-target.d.ts +4 -0
  201. package/first-run/runtime-target.d.ts.map +1 -0
  202. package/first-run/runtime-target.js +13 -0
  203. package/index.d.ts +16 -3
  204. package/index.d.ts.map +1 -1
  205. package/index.js +57 -33
  206. package/package.json +159 -50
  207. package/packaging/debian/apt-repo-config/README.md +18 -0
  208. package/packaging/debian/apt-repo-config/conf/distributions +11 -0
  209. package/packaging/flatpak/README.md +26 -16
  210. package/packaging/flatpak/ai.elizaos.App.metainfo.xml +17 -12
  211. package/packaging/flatpak/ai.elizaos.App.store.yml +5 -5
  212. package/packaging/flatpak/ai.elizaos.App.yml +10 -24
  213. package/packaging/flatpak/elizaos-app-wrapper.store.sh +2 -2
  214. package/packaging/flatpak/generate-sources.sh +74 -0
  215. package/packaging/flatpak/node-sources.json +7930 -0
  216. package/packaging/inno/build-inno.ps1 +34 -9
  217. package/packaging/msix/AppxManifest.store.xml +1 -1
  218. package/packaging/msix/README.md +39 -19
  219. package/packaging/msix/build-msix.ps1 +44 -14
  220. package/packaging/snap/snapcraft.yaml +22 -21
  221. package/packaging/test-packaging.sh +2 -2
  222. package/permissions/types.d.ts +1 -1
  223. package/permissions/types.js +1 -1
  224. package/platform/elizaos-agent-browser-stub.d.ts +144 -0
  225. package/platform/elizaos-agent-browser-stub.d.ts.map +1 -0
  226. package/platform/elizaos-agent-browser-stub.js +158 -0
  227. package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts +34 -0
  228. package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts.map +1 -0
  229. package/platform/elizaos-plugin-elizacloud-browser-stub.js +51 -0
  230. package/platform/empty-node-module.d.ts +148 -0
  231. package/platform/empty-node-module.d.ts.map +1 -1
  232. package/platform/empty-node-module.js +140 -3
  233. package/platform/ios-runtime-backends.d.ts +83 -0
  234. package/platform/ios-runtime-backends.d.ts.map +1 -0
  235. package/platform/ios-runtime-backends.js +133 -0
  236. package/platform/ios-runtime-bridge.d.ts +15 -0
  237. package/platform/ios-runtime-bridge.d.ts.map +1 -0
  238. package/platform/ios-runtime-bridge.js +527 -0
  239. package/platform/native-library-policy.d.ts +23 -0
  240. package/platform/native-library-policy.d.ts.map +1 -0
  241. package/platform/native-library-policy.js +112 -0
  242. package/platform/native-plugin-entrypoints.d.ts +19 -0
  243. package/platform/native-plugin-entrypoints.d.ts.map +1 -0
  244. package/platform/native-plugin-entrypoints.js +29 -0
  245. package/platforms/android/README.md +68 -10
  246. package/platforms/android/app/build.gradle +268 -3
  247. package/platforms/android/app/capacitor.build.gradle +18 -1
  248. package/platforms/android/app/proguard-rules.pro +17 -2
  249. package/platforms/android/app/src/androidTest/java/ai/elizaos/app/ElizaOsInstrumentedTest.java +1 -1
  250. package/platforms/android/app/src/main/AndroidManifest.xml +334 -17
  251. package/platforms/android/app/src/main/assets/runners/eliza-tasks.js +177 -0
  252. package/platforms/android/app/src/main/elizavoice-jni/CMakeLists.txt +75 -0
  253. package/platforms/android/app/src/main/elizavoice-jni/elizavoice-jni.cpp +1045 -0
  254. package/platforms/android/app/src/main/java/ai/elizaos/app/AgentPlugin.java +111 -171
  255. package/platforms/android/app/src/main/java/ai/elizaos/app/AndroidVirtualizationBridge.java +284 -0
  256. package/platforms/android/app/src/main/java/ai/elizaos/app/BatteryOptimizationPlugin.java +95 -0
  257. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAccessibilityService.java +55 -0
  258. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +1198 -141
  259. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAndroidSystemBridge.java +83 -0
  260. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAssistActivity.java +50 -1
  261. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBootReceiver.java +90 -8
  262. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBrowserActivity.java +2 -2
  263. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCalendarActivity.java +1 -1
  264. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCameraActivity.java +1 -1
  265. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaClockActivity.java +2 -2
  266. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaContactsActivity.java +1 -1
  267. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaDialActivity.java +1 -1
  268. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaInCallService.java +1 -1
  269. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaMmsReceiver.java +1 -1
  270. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNativeBridge.java +22 -0
  271. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNotificationListenerService.java +45 -0
  272. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaQuickActionsWidgetProvider.java +68 -0
  273. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaShareActivity.java +132 -0
  274. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsComposeActivity.java +1 -1
  275. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsGatewayService.java +268 -0
  276. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsReceiver.java +12 -1
  277. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaTasksWorker.java +194 -0
  278. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceCaptureService.java +198 -0
  279. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceNative.java +160 -0
  280. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +450 -0
  281. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceTileService.java +39 -0
  282. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaWorkScheduler.java +60 -0
  283. package/platforms/android/app/src/main/java/ai/elizaos/app/GatewayConnectionService.java +53 -19
  284. package/platforms/android/app/src/main/java/ai/elizaos/app/MainActivity.java +160 -33
  285. package/platforms/android/app/src/main/java/ai/elizaos/app/ResourceProbePlugin.java +169 -0
  286. package/platforms/android/app/src/main/java/ai/elizaos/app/VoiceCapturePlugin.java +119 -0
  287. package/platforms/android/app/src/main/res/drawable/eliza_widget_background.xml +10 -0
  288. package/platforms/android/app/src/main/res/drawable/eliza_widget_button_background.xml +13 -0
  289. package/platforms/android/app/src/main/res/drawable/splash.png +0 -0
  290. package/platforms/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  291. package/platforms/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  292. package/platforms/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  293. package/platforms/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  294. package/platforms/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  295. package/platforms/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  296. package/platforms/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  297. package/platforms/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  298. package/platforms/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  299. package/platforms/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  300. package/platforms/android/app/src/main/res/layout/eliza_quick_actions_widget.xml +86 -0
  301. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +2 -1
  302. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +2 -1
  303. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  304. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  305. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png +0 -0
  306. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  307. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  308. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  309. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png +0 -0
  310. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  311. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  312. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  313. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png +0 -0
  314. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  315. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  316. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  317. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png +0 -0
  318. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  319. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  320. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  321. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png +0 -0
  322. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  323. package/platforms/android/app/src/main/res/values/android_app_actions.xml +48 -0
  324. package/platforms/android/app/src/main/res/values/colors.xml +8 -0
  325. package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +2 -2
  326. package/platforms/android/app/src/main/res/values/strings.xml +2 -2
  327. package/platforms/android/app/src/main/res/values/styles.xml +25 -1
  328. package/platforms/android/app/src/main/res/xml/eliza_accessibility_service.xml +9 -0
  329. package/platforms/android/app/src/main/res/xml/eliza_quick_actions_widget.xml +13 -0
  330. package/platforms/android/app/src/main/res/xml/shortcuts.xml +121 -0
  331. package/platforms/android/build.gradle +2 -2
  332. package/platforms/android/capacitor-cordova-android-plugins/build.gradle +9 -3
  333. package/platforms/android/capacitor-cordova-android-plugins/cordova.variables.gradle +6 -2
  334. package/platforms/android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml +7 -2
  335. package/platforms/android/capacitor-cordova-android-plugins/src/main/java/.gitkeep +0 -1
  336. package/platforms/android/capacitor.settings.gradle +66 -16
  337. package/platforms/android/gradle.properties +1 -0
  338. package/platforms/android/update-manifest/generate-manifest.mjs +97 -0
  339. package/platforms/android/update-manifest/schema.json +26 -0
  340. package/platforms/apple-store-entitlements.reviewed.json +155 -0
  341. package/platforms/electrobun/.generated/brand-config.json +3 -2
  342. package/platforms/electrobun/LICENSE +21 -0
  343. package/platforms/electrobun/README.md +15 -1
  344. package/platforms/electrobun/assets/appIcon.icns +0 -0
  345. package/platforms/electrobun/assets/appIcon.ico +0 -0
  346. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128.png +0 -0
  347. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128@2x.png +0 -0
  348. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16.png +0 -0
  349. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16@2x.png +0 -0
  350. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256.png +0 -0
  351. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256@2x.png +0 -0
  352. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32.png +0 -0
  353. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32@2x.png +0 -0
  354. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512.png +0 -0
  355. package/platforms/electrobun/assets/brand-config.json +6 -6
  356. package/platforms/electrobun/biome.json +9 -9
  357. package/platforms/electrobun/docs/capability-collapse-matrix.json +318 -0
  358. package/platforms/electrobun/docs/capability-collapse-matrix.md +129 -0
  359. package/platforms/electrobun/docs/capability-routing.md +86 -0
  360. package/platforms/electrobun/docs/convergence-audit.json +3505 -0
  361. package/platforms/electrobun/docs/convergence-audit.md +694 -0
  362. package/platforms/electrobun/docs/database-boot-policy.md +90 -0
  363. package/platforms/electrobun/docs/riscv64-port.md +175 -0
  364. package/platforms/electrobun/docs/startup-first-run-cleanup.md +18 -0
  365. package/platforms/electrobun/docs/trace-first-annotations.md +52 -0
  366. package/platforms/electrobun/docs/ui-boundary-audit.json +580 -0
  367. package/platforms/electrobun/docs/ui-boundary-audit.md +257 -0
  368. package/platforms/electrobun/electrobun.config.ts +592 -364
  369. package/platforms/electrobun/entitlements/JUSTIFICATIONS.md +141 -0
  370. package/platforms/electrobun/entitlements/README.md +34 -6
  371. package/platforms/electrobun/entitlements/mas-bun.entitlements +15 -0
  372. package/platforms/electrobun/entitlements/mas.entitlements +6 -4
  373. package/platforms/electrobun/native/macos/window-effects.mm +1522 -0
  374. package/platforms/electrobun/package.json +18 -12
  375. package/platforms/electrobun/remotes/fs/README.md +70 -0
  376. package/platforms/electrobun/remotes/fs/electrobun.config.ts +38 -0
  377. package/platforms/electrobun/remotes/fs/package.json +12 -0
  378. package/platforms/electrobun/remotes/fs/plugin.json +25 -0
  379. package/platforms/electrobun/remotes/fs/src/bun/errors.ts +57 -0
  380. package/platforms/electrobun/remotes/fs/src/bun/file-limits.ts +50 -0
  381. package/platforms/electrobun/remotes/fs/src/bun/fs-service.ts +389 -0
  382. package/platforms/electrobun/remotes/fs/src/bun/path-guard.ts +270 -0
  383. package/platforms/electrobun/remotes/fs/src/bun/protocol.ts +149 -0
  384. package/platforms/electrobun/remotes/fs/src/bun/worker.ts +174 -0
  385. package/platforms/electrobun/remotes/fs/src/dev/phase5-smoke.ts +171 -0
  386. package/platforms/electrobun/remotes/fs/src/web/index.html +8 -0
  387. package/platforms/electrobun/remotes/git/README.md +75 -0
  388. package/platforms/electrobun/remotes/git/electrobun.config.ts +44 -0
  389. package/platforms/electrobun/remotes/git/package.json +12 -0
  390. package/platforms/electrobun/remotes/git/plugin.json +31 -0
  391. package/platforms/electrobun/remotes/git/src/bun/errors.ts +69 -0
  392. package/platforms/electrobun/remotes/git/src/bun/git-command.ts +156 -0
  393. package/platforms/electrobun/remotes/git/src/bun/git-service.ts +446 -0
  394. package/platforms/electrobun/remotes/git/src/bun/operation-history.ts +124 -0
  395. package/platforms/electrobun/remotes/git/src/bun/protocol.ts +252 -0
  396. package/platforms/electrobun/remotes/git/src/bun/worker.ts +316 -0
  397. package/platforms/electrobun/remotes/git/src/dev/phase7-smoke.ts +141 -0
  398. package/platforms/electrobun/remotes/git/src/web/index.html +8 -0
  399. package/platforms/electrobun/remotes/local-model/README.md +138 -0
  400. package/platforms/electrobun/remotes/local-model/electrobun.config.ts +46 -0
  401. package/platforms/electrobun/remotes/local-model/package.json +12 -0
  402. package/platforms/electrobun/remotes/local-model/plugin.json +33 -0
  403. package/platforms/electrobun/remotes/local-model/src/bun/download-state.ts +115 -0
  404. package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +425 -0
  405. package/platforms/electrobun/remotes/local-model/src/bun/errors.ts +74 -0
  406. package/platforms/electrobun/remotes/local-model/src/bun/hf-eliza1-client.ts +169 -0
  407. package/platforms/electrobun/remotes/local-model/src/bun/local-inference-api-client.ts +245 -0
  408. package/platforms/electrobun/remotes/local-model/src/bun/model-service.ts +490 -0
  409. package/platforms/electrobun/remotes/local-model/src/bun/protocol.ts +301 -0
  410. package/platforms/electrobun/remotes/local-model/src/bun/worker.ts +248 -0
  411. package/platforms/electrobun/remotes/local-model/src/dev/phase8-smoke.ts +117 -0
  412. package/platforms/electrobun/remotes/local-model/src/web/index.html +13 -0
  413. package/platforms/electrobun/remotes/pty/README.md +65 -0
  414. package/platforms/electrobun/remotes/pty/electrobun.config.ts +47 -0
  415. package/platforms/electrobun/remotes/pty/package.json +12 -0
  416. package/platforms/electrobun/remotes/pty/plugin.json +34 -0
  417. package/platforms/electrobun/remotes/pty/src/bun/errors.ts +57 -0
  418. package/platforms/electrobun/remotes/pty/src/bun/output-buffer.ts +127 -0
  419. package/platforms/electrobun/remotes/pty/src/bun/protocol.ts +192 -0
  420. package/platforms/electrobun/remotes/pty/src/bun/pty-service.ts +562 -0
  421. package/platforms/electrobun/remotes/pty/src/bun/worker.ts +218 -0
  422. package/platforms/electrobun/remotes/pty/src/dev/phase6-smoke.ts +127 -0
  423. package/platforms/electrobun/remotes/pty/src/web/index.html +8 -0
  424. package/platforms/electrobun/remotes/runtime/README.md +370 -0
  425. package/platforms/electrobun/remotes/runtime/electrobun.config.ts +48 -0
  426. package/platforms/electrobun/remotes/runtime/package.json +14 -0
  427. package/platforms/electrobun/remotes/runtime/plugin.json +30 -0
  428. package/platforms/electrobun/remotes/runtime/src/bun/api-client.ts +620 -0
  429. package/platforms/electrobun/remotes/runtime/src/bun/errors.ts +45 -0
  430. package/platforms/electrobun/remotes/runtime/src/bun/log-buffer.ts +33 -0
  431. package/platforms/electrobun/remotes/runtime/src/bun/protocol.ts +366 -0
  432. package/platforms/electrobun/remotes/runtime/src/bun/route-discovery.ts +419 -0
  433. package/platforms/electrobun/remotes/runtime/src/bun/runtime-manager.ts +423 -0
  434. package/platforms/electrobun/remotes/runtime/src/bun/sse-parser.ts +99 -0
  435. package/platforms/electrobun/remotes/runtime/src/bun/stream-manager.ts +887 -0
  436. package/platforms/electrobun/remotes/runtime/src/bun/worker.ts +1231 -0
  437. package/platforms/electrobun/remotes/runtime/src/dev/phase1-smoke.ts +34 -0
  438. package/platforms/electrobun/remotes/runtime/src/dev/phase2-smoke.ts +86 -0
  439. package/platforms/electrobun/remotes/runtime/src/dev/phase3-smoke.ts +141 -0
  440. package/platforms/electrobun/remotes/runtime/src/web/index.css +187 -0
  441. package/platforms/electrobun/remotes/runtime/src/web/index.html +76 -0
  442. package/platforms/electrobun/remotes/runtime/src/web/index.ts +192 -0
  443. package/platforms/electrobun/remotes/surface/README.md +201 -0
  444. package/platforms/electrobun/remotes/surface/electrobun.config.ts +38 -0
  445. package/platforms/electrobun/remotes/surface/package.json +12 -0
  446. package/platforms/electrobun/remotes/surface/plugin.json +28 -0
  447. package/platforms/electrobun/remotes/surface/src/bun/worker.ts +132 -0
  448. package/platforms/electrobun/remotes/surface/src/dev/phase4-smoke.ts +566 -0
  449. package/platforms/electrobun/remotes/surface/src/protocol/event-types.ts +84 -0
  450. package/platforms/electrobun/remotes/surface/src/protocol/runtime-client.ts +673 -0
  451. package/platforms/electrobun/remotes/surface/src/web/app.ts +595 -0
  452. package/platforms/electrobun/remotes/surface/src/web/index.css +460 -0
  453. package/platforms/electrobun/remotes/surface/src/web/index.html +466 -0
  454. package/platforms/electrobun/remotes/surface/src/web/index.ts +5 -0
  455. package/platforms/electrobun/remotes/surface/src/web/render.ts +455 -0
  456. package/platforms/electrobun/remotes/surface/src/web/state.ts +427 -0
  457. package/platforms/electrobun/scripts/build-macos-effects.sh +4 -0
  458. package/platforms/electrobun/scripts/ensure-build-folder.ts +28 -0
  459. package/platforms/electrobun/scripts/ensure-whisper-gguf.sh +55 -0
  460. package/platforms/electrobun/scripts/ensure-whisper-model.sh +22 -80
  461. package/platforms/electrobun/scripts/generate-convergence-audit.ts +1203 -0
  462. package/platforms/electrobun/scripts/local-adhoc-sign-macos.ts +159 -159
  463. package/platforms/electrobun/scripts/postwrap-diagnostics.ts +424 -339
  464. package/platforms/electrobun/scripts/postwrap-sign-runtime-macos.ts +302 -271
  465. package/platforms/electrobun/scripts/smoke-test-windows.ps1 +17 -16
  466. package/platforms/electrobun/scripts/smoke-test.sh +5 -7
  467. package/platforms/electrobun/scripts/sync-web-assets.mjs +13 -13
  468. package/platforms/electrobun/scripts/verify-rpc-handlers.ts +109 -110
  469. package/platforms/electrobun/scripts/verify-windows-installer-proof.ps1 +3 -8
  470. package/platforms/electrobun/src/__stubs__/bun-ffi.ts +31 -31
  471. package/platforms/electrobun/src/__stubs__/electrobun-bun.ts +1 -1
  472. package/platforms/electrobun/src/agent-ready-state.ts +8 -8
  473. package/platforms/electrobun/src/agent-reset-from-main.test.ts +162 -0
  474. package/platforms/electrobun/src/agent-reset-from-main.ts +62 -62
  475. package/platforms/electrobun/src/agent-status-rpc.test.ts +95 -0
  476. package/platforms/electrobun/src/agent-status-rpc.ts +156 -0
  477. package/platforms/electrobun/src/api-base.test.ts +247 -0
  478. package/platforms/electrobun/src/api-base.ts +202 -93
  479. package/platforms/electrobun/src/application-menu-action-registry.ts +9 -9
  480. package/platforms/electrobun/src/application-menu.ts +348 -348
  481. package/platforms/electrobun/src/background-notice.ts +36 -36
  482. package/platforms/electrobun/src/boot-progress.test.ts +188 -0
  483. package/platforms/electrobun/src/boot-progress.ts +111 -0
  484. package/platforms/electrobun/src/brand-config.test.ts +39 -0
  485. package/platforms/electrobun/src/brand-config.ts +141 -129
  486. package/platforms/electrobun/src/bridge/browser-tabs-renderer-registry.ts +28 -28
  487. package/platforms/electrobun/src/bridge/electrobun-boot-config.ts +42 -0
  488. package/platforms/electrobun/src/bridge/electrobun-crypto-ready.ts +120 -0
  489. package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +342 -357
  490. package/platforms/electrobun/src/bridge/electrobun-stub.ts +13 -13
  491. package/platforms/electrobun/src/browser-workspace-bridge-server.ts +285 -243
  492. package/platforms/electrobun/src/cloud-auth-window.ts +136 -136
  493. package/platforms/electrobun/src/cloud-disconnect-from-main.ts +90 -90
  494. package/platforms/electrobun/src/config-and-auth-rpc.test.ts +256 -0
  495. package/platforms/electrobun/src/config-and-auth-rpc.ts +302 -0
  496. package/platforms/electrobun/src/conversations-and-character-rpc.test.ts +185 -0
  497. package/platforms/electrobun/src/conversations-and-character-rpc.ts +131 -0
  498. package/platforms/electrobun/src/dashboard-rpc.test.ts +200 -0
  499. package/platforms/electrobun/src/dashboard-rpc.ts +344 -0
  500. package/platforms/electrobun/src/database/database-lock.ts +141 -0
  501. package/platforms/electrobun/src/database/database-mode.ts +149 -0
  502. package/platforms/electrobun/src/database/database-recovery.ts +72 -0
  503. package/platforms/electrobun/src/database/database-snapshot.ts +190 -0
  504. package/platforms/electrobun/src/database/database.test.ts +196 -0
  505. package/platforms/electrobun/src/database/index.ts +5 -0
  506. package/platforms/electrobun/src/database/pglite-paths.ts +100 -0
  507. package/platforms/electrobun/src/desktop-deep-link-events.test.ts +30 -0
  508. package/platforms/electrobun/src/desktop-deep-link-events.ts +17 -0
  509. package/platforms/electrobun/src/desktop-http-request.test.ts +73 -73
  510. package/platforms/electrobun/src/desktop-http-request.ts +85 -85
  511. package/platforms/electrobun/src/desktop-pill-config.test.ts +27 -0
  512. package/platforms/electrobun/src/desktop-pill-config.ts +40 -0
  513. package/platforms/electrobun/src/desktop-test-bridge-server.ts +204 -204
  514. package/platforms/electrobun/src/desktop-tray-config.test.ts +87 -0
  515. package/platforms/electrobun/src/desktop-tray-config.ts +84 -0
  516. package/platforms/electrobun/src/devtools-layout.ts +41 -41
  517. package/platforms/electrobun/src/diagnostic-format.test.ts +71 -0
  518. package/platforms/electrobun/src/diagnostic-format.ts +75 -36
  519. package/platforms/electrobun/src/dynamic-view-rpc-schema.test.ts +37 -0
  520. package/platforms/electrobun/src/dynamic-views/README.md +44 -0
  521. package/platforms/electrobun/src/dynamic-views/demo/agent-run-trace.html +135 -0
  522. package/platforms/electrobun/src/dynamic-views/errors.ts +29 -0
  523. package/platforms/electrobun/src/dynamic-views/host.test.ts +353 -0
  524. package/platforms/electrobun/src/dynamic-views/host.ts +332 -0
  525. package/platforms/electrobun/src/dynamic-views/index.ts +57 -0
  526. package/platforms/electrobun/src/dynamic-views/kiosk-canvas.ts +89 -0
  527. package/platforms/electrobun/src/dynamic-views/registry.test.ts +139 -0
  528. package/platforms/electrobun/src/dynamic-views/registry.ts +196 -0
  529. package/platforms/electrobun/src/dynamic-views/session-manager.test.ts +355 -0
  530. package/platforms/electrobun/src/dynamic-views/session-manager.ts +348 -0
  531. package/platforms/electrobun/src/dynamic-views/types.ts +105 -0
  532. package/platforms/electrobun/src/electrobun-boot-config.test.ts +50 -0
  533. package/platforms/electrobun/src/electrobun-config.test.ts +62 -0
  534. package/platforms/electrobun/src/electrobun-crypto-ready.test.ts +65 -0
  535. package/platforms/electrobun/src/electrobun-window-options.ts +25 -0
  536. package/platforms/electrobun/src/extension-rpc.test.ts +88 -0
  537. package/platforms/electrobun/src/extension-rpc.ts +102 -0
  538. package/platforms/electrobun/src/fatal-shutdown.test.ts +10 -10
  539. package/platforms/electrobun/src/fatal-shutdown.ts +1 -1
  540. package/platforms/electrobun/src/first-party-remotes.test.ts +169 -0
  541. package/platforms/electrobun/src/first-party-remotes.ts +297 -0
  542. package/platforms/electrobun/src/first-run-rpc.test.ts +192 -0
  543. package/platforms/electrobun/src/first-run-rpc.ts +146 -0
  544. package/platforms/electrobun/src/floating-chat-window.ts +181 -181
  545. package/platforms/electrobun/src/inbox-rpc.test.ts +123 -0
  546. package/platforms/electrobun/src/inbox-rpc.ts +158 -0
  547. package/platforms/electrobun/src/index.ts +2555 -2096
  548. package/platforms/electrobun/src/kiosk-mode.ts +50 -0
  549. package/platforms/electrobun/src/launch/index.ts +4 -0
  550. package/platforms/electrobun/src/launch/launch-dynamic-view.ts +37 -0
  551. package/platforms/electrobun/src/launch/launch-orchestrator.test.ts +224 -0
  552. package/platforms/electrobun/src/launch/launch-orchestrator.ts +456 -0
  553. package/platforms/electrobun/src/launch/launch-store.test.ts +97 -0
  554. package/platforms/electrobun/src/launch/launch-store.ts +134 -0
  555. package/platforms/electrobun/src/launch/types.ts +103 -0
  556. package/platforms/electrobun/src/launch/views/launch-diagnostics.html +205 -0
  557. package/platforms/electrobun/src/lifecycle/agent-ready-publish.test.ts +50 -0
  558. package/platforms/electrobun/src/lifecycle/agent-ready-publish.ts +27 -0
  559. package/platforms/electrobun/src/lifecycle/api-base-owner.ts +42 -31
  560. package/platforms/electrobun/src/lifecycle/desktop-session-prime.ts +44 -44
  561. package/platforms/electrobun/src/logger.ts +14 -14
  562. package/platforms/electrobun/src/main-window-runtime.ts +83 -83
  563. package/platforms/electrobun/src/main-window-session.test.ts +109 -0
  564. package/platforms/electrobun/src/main-window-session.ts +87 -51
  565. package/platforms/electrobun/src/menu-reset-from-main.ts +158 -158
  566. package/platforms/electrobun/src/native/agent-env.test.ts +52 -0
  567. package/platforms/electrobun/src/native/agent-runtime-layout.test.ts +42 -0
  568. package/platforms/electrobun/src/native/agent-state-dir.test.ts +91 -0
  569. package/platforms/electrobun/src/native/agent.ts +2122 -1682
  570. package/platforms/electrobun/src/native/auth-bridge.test.ts +67 -0
  571. package/platforms/electrobun/src/native/auth-bridge.ts +464 -360
  572. package/platforms/electrobun/src/native/browser-workspace.ts +723 -471
  573. package/platforms/electrobun/src/native/camera.ts +50 -50
  574. package/platforms/electrobun/src/native/canvas.ts +444 -445
  575. package/platforms/electrobun/src/native/credentials.ts +673 -616
  576. package/platforms/electrobun/src/native/desktop-window.test.ts +300 -0
  577. package/platforms/electrobun/src/native/desktop.ts +2196 -2156
  578. package/platforms/electrobun/src/native/editor-bridge.ts +201 -201
  579. package/platforms/electrobun/src/native/file-watcher.ts +154 -154
  580. package/platforms/electrobun/src/native/gateway.ts +179 -180
  581. package/platforms/electrobun/src/native/gpu-window.ts +256 -256
  582. package/platforms/electrobun/src/native/index.ts +76 -74
  583. package/platforms/electrobun/src/native/location.test.ts +44 -0
  584. package/platforms/electrobun/src/native/location.ts +90 -80
  585. package/platforms/electrobun/src/native/loopback-port.ts +60 -60
  586. package/platforms/electrobun/src/native/mac-window-effects.ts +166 -104
  587. package/platforms/electrobun/src/native/music-player.ts +38 -38
  588. package/platforms/electrobun/src/native/permissions-shared.ts +249 -150
  589. package/platforms/electrobun/src/native/permissions.ts +301 -208
  590. package/platforms/electrobun/src/native/power-state.ts +129 -129
  591. package/platforms/electrobun/src/native/remote-plugin-host.test.ts +1394 -0
  592. package/platforms/electrobun/src/native/remote-plugin-host.ts +1531 -0
  593. package/platforms/electrobun/src/native/screencapture.ts +667 -573
  594. package/platforms/electrobun/src/native/steward.ts +207 -204
  595. package/platforms/electrobun/src/native/swabble.ts +68 -324
  596. package/platforms/electrobun/src/native/talkmode.ts +253 -422
  597. package/platforms/electrobun/src/native/webgpu-browser-support.test.ts +18 -0
  598. package/platforms/electrobun/src/native/webgpu-browser-support.ts +165 -147
  599. package/platforms/electrobun/src/native/whisper-env.test.ts +71 -0
  600. package/platforms/electrobun/src/native/whisper-env.ts +68 -0
  601. package/platforms/electrobun/src/native-onboarding.ts +270 -0
  602. package/platforms/electrobun/src/onboarding-overlay-window.ts +141 -0
  603. package/platforms/electrobun/src/persisted-deployment.ts +91 -0
  604. package/platforms/electrobun/src/pill-window.test.ts +91 -0
  605. package/platforms/electrobun/src/pill-window.ts +99 -0
  606. package/platforms/electrobun/src/preload-validation.ts +44 -44
  607. package/platforms/electrobun/src/preload.js +1 -1
  608. package/platforms/electrobun/src/print-electrobun-dev-settings-banner.ts +120 -120
  609. package/platforms/electrobun/src/renderer-api-proxy.test.ts +73 -0
  610. package/platforms/electrobun/src/renderer-api-proxy.ts +86 -0
  611. package/platforms/electrobun/src/renderer-static.test.ts +53 -0
  612. package/platforms/electrobun/src/renderer-static.ts +144 -57
  613. package/platforms/electrobun/src/rpc-handler-slices.ts +121 -0
  614. package/platforms/electrobun/src/rpc-handlers.test.ts +267 -0
  615. package/platforms/electrobun/src/rpc-handlers.ts +1306 -913
  616. package/platforms/electrobun/src/rpc-parse-utils.ts +57 -0
  617. package/platforms/electrobun/src/rpc-port-resolver.test.ts +45 -0
  618. package/platforms/electrobun/src/rpc-port-resolver.ts +31 -0
  619. package/platforms/electrobun/src/rpc-schema.ts +2556 -1619
  620. package/platforms/electrobun/src/runtime-layout.ts +105 -105
  621. package/platforms/electrobun/src/runtime-permissions.ts +95 -95
  622. package/platforms/electrobun/src/runtime-rpc.test.ts +126 -0
  623. package/platforms/electrobun/src/runtime-rpc.ts +237 -0
  624. package/platforms/electrobun/src/screenshot-dev-server.ts +87 -87
  625. package/platforms/electrobun/src/settings-mutations-rpc.test.ts +193 -0
  626. package/platforms/electrobun/src/settings-mutations-rpc.ts +220 -0
  627. package/platforms/electrobun/src/startup-trace.ts +274 -270
  628. package/platforms/electrobun/src/subscription-rpc.test.ts +89 -0
  629. package/platforms/electrobun/src/subscription-rpc.ts +192 -0
  630. package/platforms/electrobun/src/surface-windows.test.ts +355 -0
  631. package/platforms/electrobun/src/surface-windows.ts +410 -410
  632. package/platforms/electrobun/src/trace/README.md +73 -0
  633. package/platforms/electrobun/src/trace/errors.ts +21 -0
  634. package/platforms/electrobun/src/trace/index.ts +40 -0
  635. package/platforms/electrobun/src/trace/trace-dynamic-view.ts +40 -0
  636. package/platforms/electrobun/src/trace/trace-host-requests.ts +473 -0
  637. package/platforms/electrobun/src/trace/trace-service.test.ts +186 -0
  638. package/platforms/electrobun/src/trace/trace-service.ts +324 -0
  639. package/platforms/electrobun/src/trace/trace-store.test.ts +141 -0
  640. package/platforms/electrobun/src/trace/trace-store.ts +551 -0
  641. package/platforms/electrobun/src/trace/types.ts +250 -0
  642. package/platforms/electrobun/src/trace/views/agent-run-trace.html +311 -0
  643. package/platforms/electrobun/src/types/web-speech.d.ts +28 -28
  644. package/platforms/electrobun/src/types.ts +5 -5
  645. package/platforms/electrobun/src/update-availability.test.ts +72 -0
  646. package/platforms/electrobun/src/update-availability.ts +90 -0
  647. package/platforms/electrobun/src/update-rpc.test.ts +83 -0
  648. package/platforms/electrobun/src/update-rpc.ts +123 -0
  649. package/platforms/electrobun/src/voice/README.md +184 -0
  650. package/platforms/electrobun/src/voice/errors.ts +42 -0
  651. package/platforms/electrobun/src/voice/index.ts +78 -0
  652. package/platforms/electrobun/src/voice/types.ts +316 -0
  653. package/platforms/electrobun/src/voice/voice-host-requests.ts +259 -0
  654. package/platforms/electrobun/src/voice/voice-latency-budget.test.ts +66 -0
  655. package/platforms/electrobun/src/voice/voice-latency-budget.ts +243 -0
  656. package/platforms/electrobun/src/voice/voice-live-validation.test.ts +352 -0
  657. package/platforms/electrobun/src/voice/voice-live-validation.ts +838 -0
  658. package/platforms/electrobun/src/voice/voice-pipeline.ts +250 -0
  659. package/platforms/electrobun/src/voice/voice-playback-adapter.ts +31 -0
  660. package/platforms/electrobun/src/voice/voice-runtime-adapter.test.ts +213 -0
  661. package/platforms/electrobun/src/voice/voice-runtime-adapter.ts +686 -0
  662. package/platforms/electrobun/src/voice/voice-service.test.ts +561 -0
  663. package/platforms/electrobun/src/voice/voice-service.ts +1027 -0
  664. package/platforms/electrobun/src/voice/voice-stream-coordinator.test.ts +115 -0
  665. package/platforms/electrobun/src/voice/voice-stream-coordinator.ts +270 -0
  666. package/platforms/electrobun/src/voice/voice-trace.ts +97 -0
  667. package/platforms/electrobun/src/voice/voice-tts-chunker.test.ts +91 -0
  668. package/platforms/electrobun/src/voice/voice-tts-chunker.ts +194 -0
  669. package/platforms/electrobun/src/windows-cef-profile.ts +88 -88
  670. package/platforms/electrobun/tsconfig.json +73 -13
  671. package/platforms/electrobun/update-channels.json +22 -0
  672. package/platforms/electrobun/vitest.electrobun.config.ts +72 -42
  673. package/platforms/ios/App/App/App.entitlements +4 -0
  674. package/platforms/ios/App/App/AppDelegate.swift +80 -18
  675. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ios-marketing-1024.png +0 -0
  676. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@1x.png +0 -0
  677. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@2x.png +0 -0
  678. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@1x.png +0 -0
  679. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@2x.png +0 -0
  680. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@1x.png +0 -0
  681. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@2x.png +0 -0
  682. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@1x.png +0 -0
  683. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@2x.png +0 -0
  684. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-83_5x83_5@2x.png +0 -0
  685. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@2x.png +0 -0
  686. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@3x.png +0 -0
  687. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@2x.png +0 -0
  688. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@3x.png +0 -0
  689. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@2x.png +0 -0
  690. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@3x.png +0 -0
  691. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@2x.png +0 -0
  692. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@3x.png +0 -0
  693. package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +1 -4
  694. package/platforms/ios/App/App/ComputerUseBridge.swift +589 -0
  695. package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.entitlements +12 -0
  696. package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.swift +34 -0
  697. package/platforms/ios/App/App/DeviceActivityMonitorExtension/Info.plist +29 -0
  698. package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.entitlements +12 -0
  699. package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.swift +53 -0
  700. package/platforms/ios/App/App/DeviceActivityReportExtension/Info.plist +27 -0
  701. package/platforms/ios/App/App/ElizaAppIntents.swift +183 -0
  702. package/platforms/ios/App/App/ElizaIntentPlugin.swift +342 -5
  703. package/platforms/ios/App/App/Info.plist +17 -1
  704. package/platforms/ios/App/App/runners/eliza-tasks.js +177 -0
  705. package/platforms/ios/App/App.xcodeproj/project.pbxproj +262 -6
  706. package/platforms/ios/App/BroadcastExtension/SampleHandler.swift +100 -0
  707. package/platforms/ios/App/Podfile +5 -0
  708. package/platforms/ios/App/Podfile.lock +83 -59
  709. package/register-runtime-hooks.js +11 -5
  710. package/registry/app-registry.d.ts +14 -0
  711. package/registry/app-registry.d.ts.map +1 -0
  712. package/registry/app-registry.js +29 -0
  713. package/registry/entries/apps/app-polymarket.json +31 -0
  714. package/registry/entries/apps/clawville.json +27 -0
  715. package/registry/entries/apps/companion.json +28 -0
  716. package/registry/entries/apps/database-viewer.json +27 -0
  717. package/registry/entries/apps/defense-of-the-agents.json +27 -0
  718. package/registry/entries/apps/documents.json +30 -0
  719. package/registry/entries/apps/feed.json +27 -0
  720. package/registry/entries/apps/hyperliquid.json +31 -0
  721. package/registry/entries/apps/log-viewer.json +27 -0
  722. package/registry/entries/apps/memory-viewer.json +27 -0
  723. package/registry/entries/apps/model-tester.json +31 -0
  724. package/registry/entries/apps/plugin-viewer.json +27 -0
  725. package/registry/entries/apps/relationship-viewer.json +27 -0
  726. package/registry/entries/apps/runtime-debugger.json +27 -0
  727. package/registry/entries/apps/shopify.json +31 -0
  728. package/registry/entries/apps/skills-viewer.json +27 -0
  729. package/registry/entries/apps/steward.json +31 -0
  730. package/registry/entries/apps/training.json +54 -0
  731. package/registry/entries/apps/trajectory-viewer.json +27 -0
  732. package/registry/entries/apps/vincent.json +31 -0
  733. package/registry/entries/connectors/bluebubbles.json +99 -0
  734. package/registry/entries/connectors/bluesky.json +173 -0
  735. package/registry/entries/connectors/discord.json +119 -0
  736. package/registry/entries/connectors/farcaster.json +174 -0
  737. package/registry/entries/connectors/feishu.json +79 -0
  738. package/registry/entries/connectors/google-chat.json +120 -0
  739. package/registry/entries/connectors/google.json +82 -0
  740. package/registry/entries/connectors/imessage.json +96 -0
  741. package/registry/entries/connectors/instagram.json +64 -0
  742. package/registry/entries/connectors/line.json +86 -0
  743. package/registry/entries/connectors/matrix.json +94 -0
  744. package/registry/entries/connectors/mattermost.json +110 -0
  745. package/registry/entries/connectors/msteams.json +104 -0
  746. package/registry/entries/connectors/nextcloud-talk.json +104 -0
  747. package/registry/entries/connectors/nostr.json +70 -0
  748. package/registry/entries/connectors/signal.json +81 -0
  749. package/registry/entries/connectors/slack.json +102 -0
  750. package/registry/entries/connectors/telegram.json +71 -0
  751. package/registry/entries/connectors/tlon.json +94 -0
  752. package/registry/entries/connectors/twitch.json +110 -0
  753. package/registry/entries/connectors/whatsapp.json +113 -0
  754. package/registry/entries/connectors/x.json +231 -0
  755. package/registry/entries/connectors/zalo.json +112 -0
  756. package/registry/entries/connectors/zalouser.json +122 -0
  757. package/registry/entries/plugins/agent-orchestrator.json +33 -0
  758. package/registry/entries/plugins/agent-skills.json +72 -0
  759. package/registry/entries/plugins/anthropic.json +73 -0
  760. package/registry/entries/plugins/app-control.json +23 -0
  761. package/registry/entries/plugins/auto-trader.json +203 -0
  762. package/registry/entries/plugins/background-runner.json +26 -0
  763. package/registry/entries/plugins/blooio.json +102 -0
  764. package/registry/entries/plugins/browser.json +75 -0
  765. package/registry/entries/plugins/cli.json +40 -0
  766. package/registry/entries/plugins/clipboard.json +44 -0
  767. package/registry/entries/plugins/coding-tools.json +71 -0
  768. package/registry/entries/plugins/commands.json +63 -0
  769. package/registry/entries/plugins/computeruse.json +74 -0
  770. package/registry/entries/plugins/copilot-proxy.json +93 -0
  771. package/registry/entries/plugins/directives.json +63 -0
  772. package/registry/entries/plugins/edge-tts.json +97 -0
  773. package/registry/entries/plugins/elevenlabs.json +169 -0
  774. package/registry/entries/plugins/elizacloud.json +208 -0
  775. package/registry/entries/plugins/evm.json +134 -0
  776. package/registry/entries/plugins/experience.json +34 -0
  777. package/registry/entries/plugins/facewear.json +131 -0
  778. package/registry/entries/plugins/form.json +26 -0
  779. package/registry/entries/plugins/github.json +93 -0
  780. package/registry/entries/plugins/gmail-watch.json +25 -0
  781. package/registry/entries/plugins/goals.json +77 -0
  782. package/registry/entries/plugins/google-genai.json +106 -0
  783. package/registry/entries/plugins/groq.json +93 -0
  784. package/registry/entries/plugins/hedera.json +48 -0
  785. package/registry/entries/plugins/inmemorydb.json +25 -0
  786. package/registry/entries/plugins/linear.json +51 -0
  787. package/registry/entries/plugins/local-inference.json +142 -0
  788. package/registry/entries/plugins/local-storage.json +36 -0
  789. package/registry/entries/plugins/localdb.json +25 -0
  790. package/registry/entries/plugins/mcp.json +44 -0
  791. package/registry/entries/plugins/memory.json +124 -0
  792. package/registry/entries/plugins/minecraft.json +79 -0
  793. package/registry/entries/plugins/moltbook.json +83 -0
  794. package/registry/entries/plugins/music.json +155 -0
  795. package/registry/entries/plugins/mysticism.json +48 -0
  796. package/registry/entries/plugins/nearai.json +82 -0
  797. package/registry/entries/plugins/ngrok.json +69 -0
  798. package/registry/entries/plugins/ollama.json +96 -0
  799. package/registry/entries/plugins/openai.json +189 -0
  800. package/registry/entries/plugins/openrouter.json +188 -0
  801. package/registry/entries/plugins/pdf.json +26 -0
  802. package/registry/entries/plugins/plugin-manager.json +23 -0
  803. package/registry/entries/plugins/prose.json +48 -0
  804. package/registry/entries/plugins/rlm.json +26 -0
  805. package/registry/entries/plugins/roblox.json +88 -0
  806. package/registry/entries/plugins/rss.json +64 -0
  807. package/registry/entries/plugins/s3-storage.json +91 -0
  808. package/registry/entries/plugins/scheduling.json +35 -0
  809. package/registry/entries/plugins/shell.json +94 -0
  810. package/registry/entries/plugins/social-alpha.json +72 -0
  811. package/registry/entries/plugins/tailscale.json +81 -0
  812. package/registry/entries/plugins/tee.json +53 -0
  813. package/registry/entries/plugins/todos.json +26 -0
  814. package/registry/entries/plugins/trajectory-logger.json +33 -0
  815. package/registry/entries/plugins/trust.json +39 -0
  816. package/registry/entries/plugins/tts.json +71 -0
  817. package/registry/entries/plugins/tunnel.json +45 -0
  818. package/registry/entries/plugins/twilio.json +168 -0
  819. package/registry/entries/plugins/vercel-ai-gateway.json +128 -0
  820. package/registry/entries/plugins/video.json +23 -0
  821. package/registry/entries/plugins/vision.json +43 -0
  822. package/registry/entries/plugins/webhooks.json +23 -0
  823. package/registry/entries/plugins/workflow.json +25 -0
  824. package/registry/entries/plugins/xai.json +75 -0
  825. package/registry/index.d.ts +2 -1
  826. package/registry/index.d.ts.map +1 -1
  827. package/registry/index.js +46 -12
  828. package/registry/loader.d.ts +2 -1
  829. package/registry/loader.d.ts.map +1 -1
  830. package/registry/loader.js +49 -2
  831. package/registry/schema.d.ts +244 -34
  832. package/registry/schema.d.ts.map +1 -1
  833. package/registry/schema.js +36 -0
  834. package/runtime/android-avf-microdroid-bridge.d.ts +29 -0
  835. package/runtime/android-avf-microdroid-bridge.d.ts.map +1 -0
  836. package/runtime/android-avf-microdroid-bridge.js +149 -0
  837. package/runtime/api-dev-settings-banner.d.ts.map +1 -1
  838. package/runtime/api-dev-settings-banner.js +5 -13
  839. package/runtime/app-core-runtime-hooks.d.ts +21 -0
  840. package/runtime/app-core-runtime-hooks.d.ts.map +1 -0
  841. package/runtime/app-core-runtime-hooks.js +10 -0
  842. package/runtime/autonomy-policy.d.ts +2 -0
  843. package/runtime/autonomy-policy.d.ts.map +1 -0
  844. package/runtime/autonomy-policy.js +4 -0
  845. package/runtime/desktop/AppWindowRenderer.d.ts +17 -0
  846. package/runtime/desktop/AppWindowRenderer.d.ts.map +1 -0
  847. package/runtime/desktop/AppWindowRenderer.js +360 -0
  848. package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts +2 -0
  849. package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts.map +1 -0
  850. package/runtime/desktop/DesktopSurfaceNavigationRuntime.js +41 -0
  851. package/runtime/desktop/DesktopTrayRuntime.d.ts +2 -0
  852. package/runtime/desktop/DesktopTrayRuntime.d.ts.map +1 -0
  853. package/runtime/desktop/DesktopTrayRuntime.js +174 -0
  854. package/runtime/desktop/DetachedShellRoot.d.ts +10 -0
  855. package/runtime/desktop/DetachedShellRoot.d.ts.map +1 -0
  856. package/runtime/desktop/DetachedShellRoot.js +111 -0
  857. package/runtime/desktop/index.d.ts +6 -0
  858. package/runtime/desktop/index.d.ts.map +1 -0
  859. package/runtime/desktop/index.js +5 -0
  860. package/runtime/desktop/tray-menu.d.ts +20 -0
  861. package/runtime/desktop/tray-menu.d.ts.map +1 -0
  862. package/runtime/desktop/tray-menu.js +143 -0
  863. package/runtime/dev-server.d.ts +1 -1
  864. package/runtime/dev-server.d.ts.map +1 -1
  865. package/runtime/dev-server.js +93 -17
  866. package/runtime/eliza.d.ts +75 -1
  867. package/runtime/eliza.d.ts.map +1 -1
  868. package/runtime/eliza.js +596 -122
  869. package/runtime/ensure-text-to-speech-handler.d.ts.map +1 -1
  870. package/runtime/ensure-text-to-speech-handler.js +10 -3
  871. package/runtime/mobile-safe-runtime.d.ts +181 -2
  872. package/runtime/mobile-safe-runtime.d.ts.map +1 -1
  873. package/runtime/mobile-safe-runtime.js +1019 -12
  874. package/runtime/mode/remote-forwarder.d.ts.map +1 -1
  875. package/runtime/mode/remote-forwarder.js +2 -2
  876. package/runtime/mode/route-mode-guard.d.ts +1 -2
  877. package/runtime/mode/route-mode-guard.d.ts.map +1 -1
  878. package/runtime/mode/route-mode-guard.js +4 -5
  879. package/runtime/mode/route-mode-matrix.d.ts.map +1 -1
  880. package/runtime/mode/route-mode-matrix.js +14 -1
  881. package/runtime/mode/runtime-mode.d.ts +1 -1
  882. package/runtime/mode/runtime-mode.js +1 -1
  883. package/runtime/runtime-bootstrap-policy.d.ts.map +1 -1
  884. package/runtime/runtime-bootstrap-policy.js +14 -2
  885. package/runtime/telegram-standalone-handler.d.ts.map +1 -1
  886. package/runtime/telegram-standalone-handler.js +10 -9
  887. package/runtime/tts-cache-wiring.d.ts +29 -0
  888. package/runtime/tts-cache-wiring.d.ts.map +1 -0
  889. package/runtime/tts-cache-wiring.js +114 -0
  890. package/runtime/voice-warmup.d.ts +81 -0
  891. package/runtime/voice-warmup.d.ts.map +1 -0
  892. package/runtime/voice-warmup.js +111 -0
  893. package/scripts/android-sms-gateway-template.test.mjs +1014 -0
  894. package/scripts/aosp/README.md +19 -15
  895. package/scripts/aosp/compile-libllama.mjs +1344 -248
  896. package/scripts/aosp/compile-shim.mjs +47 -18
  897. package/scripts/aosp/deploy-pixel.mjs +405 -0
  898. package/scripts/aosp/lib/load-variant-config.mjs +3 -3
  899. package/scripts/aosp/llama-cpp-patches/README.md +8 -8
  900. package/scripts/aosp/llama-cpp-patches/apply-patches.mjs +23 -6
  901. package/scripts/aosp/llama-cpp-patches/polarquant/README.md +37 -0
  902. package/scripts/aosp/llama-cpp-patches/qjl/README.md +37 -0
  903. package/scripts/aosp/seccomp-shim/sigsys-handler-arm64.c +169 -0
  904. package/scripts/aosp/seccomp-shim/sigsys-handler-riscv64.c +217 -0
  905. package/scripts/aosp/smoke-cuttlefish.mjs +34 -4
  906. package/scripts/aosp/stage-default-models.mjs +18 -18
  907. package/scripts/aosp/variant-config-schema.ts +2 -2
  908. package/scripts/assert-required-bundled-packages.test.ts +534 -0
  909. package/scripts/audit-apple-store-sandbox.mjs +146 -0
  910. package/scripts/audit-live-test-surface.mjs +5 -2
  911. package/scripts/build-capacitor-app.mjs +21 -0
  912. package/scripts/build-flatpak.mjs +5 -5
  913. package/scripts/build-helpers/arm64-simd.mjs +72 -0
  914. package/scripts/build-helpers/omnivoice-merged.mjs +87 -0
  915. package/scripts/build-helpers/verify-fused-symbols.mjs +567 -0
  916. package/scripts/build-image.sh +1 -1
  917. package/scripts/build-llama-cpp-mtp.mjs +487 -0
  918. package/scripts/build-native-plugins.mjs +230 -18
  919. package/scripts/build-patched-electrobun-cli.mjs +68 -10
  920. package/scripts/build-win.mjs +1 -1
  921. package/scripts/bun-riscv64/Dockerfile +418 -0
  922. package/scripts/bun-riscv64/README.md +316 -0
  923. package/scripts/bun-riscv64/build.sh +469 -0
  924. package/scripts/bun-riscv64/bun-patches/0001-config-add-riscv64-arch.patch +74 -0
  925. package/scripts/bun-riscv64/bun-patches/0002-flags-add-riscv64-march-mabi.patch +16 -0
  926. package/scripts/bun-riscv64/bun-patches/0003-zig-add-riscv64-target-triple-and-cpu.patch +26 -0
  927. package/scripts/bun-riscv64/bun-patches/0004-webkit-force-local-mode-on-riscv64.patch +33 -0
  928. package/scripts/bun-riscv64/bun-patches/0005-tinycc-disable-on-riscv64.patch +16 -0
  929. package/scripts/bun-riscv64/bun-patches/0006-build-add-riscv64-cli-validation.patch +15 -0
  930. package/scripts/bun-riscv64/bun-patches/0007-deps-per-dep-riscv64-checks.patch +24 -0
  931. package/scripts/bun-riscv64/bun-patches/0008-source-stabilize-riscv64-musl-build.patch +226 -0
  932. package/scripts/bun-riscv64/bun-patches/0009-disable-wasm-streaming-hooks-for-c-loop.patch +162 -0
  933. package/scripts/bun-riscv64/bun-patches/0010-disable-inspector-profiler-for-riscv64-c-loop.patch +80 -0
  934. package/scripts/bun-riscv64/bun-patches/0011-process-arch-add-riscv64.patch +23 -0
  935. package/scripts/bun-riscv64/bun-patches/0012-cpu-features-add-riscv64-fallback.patch +13 -0
  936. package/scripts/bun-riscv64/bun-patches/0013-disable-console-inspector-hooks-for-riscv64-c-loop.patch +43 -0
  937. package/scripts/bun-riscv64/bun-patches/0014-disable-custom-inspector-dispatchers-on-riscv64.patch +127 -0
  938. package/scripts/bun-riscv64/bun-patches/0015-disable-jsc-profiler-builtins-on-riscv64.patch +75 -0
  939. package/scripts/bun-riscv64/bun-patches/0016-node-vm-disable-jit-cached-data-on-riscv64-c-loop.patch +96 -0
  940. package/scripts/bun-riscv64/bun-patches/0017-disable-performance-domjit-signature-on-riscv64-c-loop.patch +34 -0
  941. package/scripts/bun-riscv64/bun-patches/0018-fix-serialized-script-identifier-big-endian-path.patch +19 -0
  942. package/scripts/bun-riscv64/bun-patches/0019-add-wtf-timer-fire-bridge-for-c-loop.patch +24 -0
  943. package/scripts/bun-riscv64/bun-patches/0020-run-riscv64-smoke-test-under-qemu.patch +13 -0
  944. package/scripts/bun-riscv64/bun-patches/0021-fix-riscv64-linux-open-flags.patch +25 -0
  945. package/scripts/bun-riscv64/bun-patches/0022-zlib-riscv64-generic-kernels.patch +25 -0
  946. package/scripts/bun-riscv64/bun-patches/README.md +127 -0
  947. package/scripts/bun-riscv64/bun-version.json +202 -0
  948. package/scripts/bun-riscv64/run-build.sh +162 -0
  949. package/scripts/bun-riscv64/rust-core/0001-riscv64-rust-core-port.patch +868 -0
  950. package/scripts/bun-riscv64/rust-core/0002-second-wave-riscv64-source-gaps.patch +130 -0
  951. package/scripts/bun-riscv64/rust-core/0003-third-wave-riscv64-crash-handler-gaps.patch +78 -0
  952. package/scripts/bun-riscv64/rust-core/0004-rust-target-cpu-riscv64.patch +39 -0
  953. package/scripts/bun-riscv64/rust-core/0005-fifth-wave-riscv64-source-gaps.patch +96 -0
  954. package/scripts/bun-riscv64/rust-core/0006-cpp-wasm-and-inspector-guards-riscv64.patch +91 -0
  955. package/scripts/bun-riscv64/rust-core/0007-bun-alloc-max-align-t-riscv64.patch +36 -0
  956. package/scripts/bun-riscv64/rust-core/0008-workspace-lints-warn-not-deny-riscv64.patch +75 -0
  957. package/scripts/bun-riscv64/rust-core/0009-zigglobalobject-wasm-streaming-guards-riscv64.patch +109 -0
  958. package/scripts/bun-riscv64/rust-core/0010-tcc-externs-stub-on-riscv64.patch +62 -0
  959. package/scripts/bun-riscv64/rust-core/0011-clippy-ptr-cast-lints-warn-riscv64.patch +61 -0
  960. package/scripts/bun-riscv64/rust-core/README.md +80 -0
  961. package/scripts/bun-riscv64/rust-core/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
  962. package/scripts/bun-riscv64/rust-core/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
  963. package/scripts/bun-riscv64/rust-core/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
  964. package/scripts/bun-riscv64/rust-core/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
  965. package/scripts/bun-riscv64/rust-core/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +31 -0
  966. package/scripts/bun-riscv64/validate.sh +264 -0
  967. package/scripts/bun-riscv64/webkit-patches/0001-cherry-pick-llint-riscv64.recipe +155 -0
  968. package/scripts/bun-riscv64/webkit-patches/0002-cherry-pick-baseline-jit-riscv64.recipe +40 -0
  969. package/scripts/bun-riscv64/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
  970. package/scripts/bun-riscv64/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
  971. package/scripts/bun-riscv64/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
  972. package/scripts/bun-riscv64/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
  973. package/scripts/bun-riscv64/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +72 -0
  974. package/scripts/bun-riscv64/webkit-patches/README.md +146 -0
  975. package/scripts/check-homepage-public-readiness.mjs +353 -0
  976. package/scripts/check-homepage-release-data.mjs +110 -0
  977. package/scripts/check-i18n.mjs +2 -1
  978. package/scripts/check-real-local-chat.ts +147 -0
  979. package/scripts/check-real-local-provisioning.ts +104 -0
  980. package/scripts/check-real-local-reset.ts +249 -0
  981. package/scripts/check-sms-gateway-completion-audit.mjs +428 -0
  982. package/scripts/check-sms-gateway-readiness.mjs +266 -0
  983. package/scripts/clean-repo.mjs +5 -5
  984. package/scripts/codesign-mas.mjs +222 -16
  985. package/scripts/collect-docker-runtime-deps.mjs +229 -0
  986. package/scripts/continue-sms-gateway-work.mjs +121 -0
  987. package/scripts/copy-runtime-node-modules.ts +903 -195
  988. package/scripts/deploy-cloud-api-production-gateway.mjs +52 -0
  989. package/scripts/desktop-build.mjs +655 -101
  990. package/scripts/dev-platform.mjs +346 -102
  991. package/scripts/dev-startup-smoke.mjs +248 -0
  992. package/scripts/dev-ui.mjs +418 -176
  993. package/scripts/disable-local-eliza-workspace.mjs +35 -0
  994. package/scripts/docker-ci-smoke.sh +298 -96
  995. package/scripts/docker-entrypoint.sh +62 -1
  996. package/scripts/docker-entrypoint.test.ts +283 -0
  997. package/scripts/ensure-avatars.mjs +2 -2
  998. package/scripts/ensure-electrobun-core.mjs +1 -1
  999. package/scripts/ensure-generated-core-proto-js.mjs +1 -1
  1000. package/scripts/ensure-type-package-aliases.mjs +62 -5
  1001. package/scripts/ensure-vision-deps.mjs +20 -1
  1002. package/scripts/entry.ts +1 -1
  1003. package/scripts/ffi-stub/Makefile +64 -0
  1004. package/scripts/ffi-stub/README.md +391 -0
  1005. package/scripts/ffi-stub/asr-ffi-smoke.ts +139 -0
  1006. package/scripts/ffi-stub/ffi-stub.c +539 -0
  1007. package/scripts/ffi-stub/ffi.h +538 -0
  1008. package/scripts/ffi-stub/libelizainference_stub.so +0 -0
  1009. package/scripts/ffi-stub/tts-stream-ffi-smoke.ts +349 -0
  1010. package/scripts/generate-first-run-voicelines.mjs +194 -0
  1011. package/scripts/generate-plugin-index.js +4 -3
  1012. package/scripts/generate-static-asset-manifest.mjs +1 -1
  1013. package/scripts/i18n-dynamic-keys.json +5 -5
  1014. package/scripts/init-submodules.mjs +2 -2
  1015. package/scripts/install-android-sms-gateway.md +177 -0
  1016. package/scripts/install-android-sms-gateway.mjs +1088 -0
  1017. package/scripts/ios-xcframework/README.md +74 -72
  1018. package/scripts/ios-xcframework/build-xcframework.mjs +204 -43
  1019. package/scripts/ios-xcframework/run-physical-device-smoke.mjs +1943 -0
  1020. package/scripts/ios-xcframework/runtime-symbol-shim.c +450 -0
  1021. package/scripts/kernel-patches/cpu-polar-kernels.mjs +441 -0
  1022. package/scripts/kernel-patches/cpu-simd-kernels.mjs +253 -0
  1023. package/scripts/kernel-patches/cpu-thread-parallelism.mjs +368 -0
  1024. package/scripts/kernel-patches/cuda-kernels.mjs +117 -0
  1025. package/scripts/kernel-patches/metal-kernels.mjs +1698 -109
  1026. package/scripts/kernel-patches/server-omnivoice-route.mjs +718 -0
  1027. package/scripts/kernel-patches/server-structured-output.mjs +279 -0
  1028. package/scripts/kernel-patches/vulkan-dispatch-log.mjs +166 -0
  1029. package/scripts/kernel-patches/vulkan-dispatch-log.test.mjs +50 -0
  1030. package/scripts/kernel-patches/vulkan-dispatch-patches/01-vulkan-shaders-gen.patch +30 -16
  1031. package/scripts/kernel-patches/vulkan-dispatch-patches/02-ggml-vulkan-pipelines.patch +75 -30
  1032. package/scripts/kernel-patches/vulkan-kernels.mjs +800 -49
  1033. package/scripts/lib/agent-source-watcher.mjs +174 -0
  1034. package/scripts/lib/agent-source-watcher.test.mjs +184 -0
  1035. package/scripts/lib/api-supervisor.mjs +78 -9
  1036. package/scripts/lib/api-supervisor.test.mjs +121 -0
  1037. package/scripts/lib/app-dir.mjs +2 -16
  1038. package/scripts/lib/apple-entitlement-audit.mjs +655 -0
  1039. package/scripts/lib/apple-entitlement-audit.test.mjs +144 -0
  1040. package/scripts/lib/bun-version-guard.mjs +13 -13
  1041. package/scripts/lib/capacitor-plugin-build-needed.mjs +4 -3
  1042. package/scripts/lib/capacitor-plugin-names.mjs +30 -14
  1043. package/scripts/lib/desktop-preflight.mjs +9 -5
  1044. package/scripts/lib/desktop-startup-embedding-warmup-policy.mjs +51 -0
  1045. package/scripts/lib/desktop-startup-embedding-warmup-policy.test.mjs +55 -0
  1046. package/scripts/lib/duet-bridge.d.mts +63 -0
  1047. package/scripts/lib/duet-bridge.mjs +193 -0
  1048. package/scripts/lib/node-path-env.mjs +4 -2
  1049. package/scripts/lib/orchestrator-desktop-dev-banner.mjs +12 -3
  1050. package/scripts/lib/patch-bun-exports.mjs +90 -27
  1051. package/scripts/lib/patch-bun-exports.test.mjs +79 -0
  1052. package/scripts/lib/renderer-build-action.mjs +35 -0
  1053. package/scripts/lib/renderer-build-action.test.mjs +70 -0
  1054. package/scripts/lib/stage-android-agent.mjs +748 -99
  1055. package/scripts/lib/sync-eliza-env-aliases.mjs +3 -25
  1056. package/scripts/lib/ui-smoke-stub-decision.mjs +33 -0
  1057. package/scripts/lib/ui-smoke-stub-decision.test.mjs +46 -0
  1058. package/scripts/lib/vite-renderer-dist-stale.mjs +5 -0
  1059. package/scripts/lib/voice-latency-report.mjs +154 -0
  1060. package/scripts/lifeops-prompt-benchmark.ts +21 -12
  1061. package/scripts/link-docker-local-app-packages.mjs +89 -36
  1062. package/scripts/local-stt-bench.ts +192 -0
  1063. package/scripts/maintain-cloud-api-production-gateway.mjs +54 -0
  1064. package/scripts/mas-smoke.mjs +459 -0
  1065. package/scripts/mas-smoke.test.mjs +220 -0
  1066. package/scripts/mobile-auth-simulator-smoke.mjs +0 -1
  1067. package/scripts/normalize-eliza-capture.ts +97 -0
  1068. package/scripts/omnivoice-fuse/prepare.mjs +2543 -23
  1069. package/scripts/pack-upstreams.mjs +65 -5
  1070. package/scripts/package-electrobun-linux.mjs +303 -0
  1071. package/scripts/patch-deps.mjs +5 -3
  1072. package/scripts/patches/llama-mobile-kokoro-tts.patch +480 -0
  1073. package/scripts/playwright-ui-live-stack.ts +194 -49
  1074. package/scripts/playwright-ui-smoke-api-stub.mjs +3501 -109
  1075. package/scripts/pre-review-local.mjs +2 -2
  1076. package/scripts/prepare-ios-cocoapods.sh +41 -3
  1077. package/scripts/release-check.ts +180 -84
  1078. package/scripts/release-workflow-drift.test.ts +57 -0
  1079. package/scripts/relink-workspace-packages-to-dist.mjs +21 -4
  1080. package/scripts/rt.mjs +16 -1
  1081. package/scripts/run-biome-check.mjs +1 -1
  1082. package/scripts/run-coding-agent-e2e.mjs +3 -3
  1083. package/scripts/run-eliza-app-core-script.mjs +34 -0
  1084. package/scripts/run-local-plugin-live-smoke.mjs +71 -2
  1085. package/scripts/run-mobile-build-android-app-actions.test.mjs +426 -0
  1086. package/scripts/run-mobile-build.mjs +4757 -607
  1087. package/scripts/run-node-runtime.mjs +184 -7
  1088. package/scripts/run-node-runtime.test.mjs +167 -0
  1089. package/scripts/run-node-tsx.mjs +80 -33
  1090. package/scripts/run-node.mjs +41 -1
  1091. package/scripts/run-production-build.mjs +34 -27
  1092. package/scripts/run-release-check.mjs +19 -0
  1093. package/scripts/run-release-contract-suite.mjs +107 -14
  1094. package/scripts/run-ui-smoke-playwright-suite.mjs +0 -2
  1095. package/scripts/runtime-package-manifest.ts +21 -3
  1096. package/scripts/setup-upstreams.mjs +42 -1
  1097. package/scripts/sms-gateway-status.mjs +194 -0
  1098. package/scripts/stage-android-agent.test.mjs +97 -0
  1099. package/scripts/stage-elizavoice-lib.mjs +203 -0
  1100. package/scripts/startup-integration-script-drift.test.ts +82 -4
  1101. package/scripts/streaming-pipeline-bench.ts +543 -0
  1102. package/scripts/sync-homepage-porkbun-dns.mjs +262 -0
  1103. package/scripts/test-sms-gateway-software.mjs +100 -0
  1104. package/scripts/type-audit.mjs +1 -1
  1105. package/scripts/validate-bluebubbles-outbound.mjs +293 -0
  1106. package/scripts/validate-cdn-assets.mjs +15 -7
  1107. package/scripts/validate-regression-matrix.mjs +109 -8
  1108. package/scripts/verify-android-sms-gateway-e2e.mjs +362 -0
  1109. package/scripts/verify-bluebubbles-gateway-e2e.mjs +191 -0
  1110. package/scripts/verify-bluebubbles-inbound-readiness.mjs +88 -0
  1111. package/scripts/verify-cloud-api-production-deploy.mjs +87 -0
  1112. package/scripts/verify-cloud-sms-onboarding-flow.mjs +336 -0
  1113. package/scripts/voice/freeze-voice.mjs +521 -0
  1114. package/scripts/voice-attribution-smoke.ts +538 -0
  1115. package/scripts/voice-create-profile.mjs +379 -0
  1116. package/scripts/voice-duet.mjs +1355 -0
  1117. package/scripts/voice-e2e-hardware.ts +871 -0
  1118. package/scripts/voice-interactive.mjs +1750 -0
  1119. package/scripts/voice-latency-report.mjs +96 -0
  1120. package/scripts/voice-latency-report.test.ts +176 -0
  1121. package/scripts/voice-preset/build-default-voice-preset.mjs +249 -0
  1122. package/scripts/voice-preset/build-onboarding-voice.mjs +281 -0
  1123. package/scripts/watch-sms-gateway-readiness.mjs +303 -0
  1124. package/scripts/write-homepage-release-data.mjs +458 -26
  1125. package/security/agent-vault-id.d.ts +1 -1
  1126. package/security/agent-vault-id.js +1 -1
  1127. package/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -1
  1128. package/security/hydrate-wallet-keys-from-platform-store.js +23 -14
  1129. package/security/platform-secure-store-node.d.ts +2 -2
  1130. package/security/platform-secure-store-node.js +3 -3
  1131. package/security/wallet-os-store-actions.d.ts +0 -9
  1132. package/security/wallet-os-store-actions.d.ts.map +1 -1
  1133. package/security/wallet-os-store-actions.js +3 -10
  1134. package/services/account-pool.d.ts +23 -14
  1135. package/services/account-pool.d.ts.map +1 -1
  1136. package/services/account-pool.js +86 -24
  1137. package/services/account-usage.d.ts.map +1 -1
  1138. package/services/account-usage.js +2 -5
  1139. package/services/ambient-audio/consent.d.ts +9 -0
  1140. package/services/ambient-audio/consent.d.ts.map +1 -0
  1141. package/services/ambient-audio/consent.js +28 -0
  1142. package/services/ambient-audio/index.d.ts +7 -0
  1143. package/services/ambient-audio/index.d.ts.map +1 -0
  1144. package/services/ambient-audio/index.js +4 -0
  1145. package/services/ambient-audio/replay-buffer.d.ts +14 -0
  1146. package/services/ambient-audio/replay-buffer.d.ts.map +1 -0
  1147. package/services/ambient-audio/replay-buffer.js +66 -0
  1148. package/services/ambient-audio/response-gate.d.ts +3 -0
  1149. package/services/ambient-audio/response-gate.d.ts.map +1 -0
  1150. package/services/ambient-audio/response-gate.js +33 -0
  1151. package/services/ambient-audio/service.d.ts +22 -0
  1152. package/services/ambient-audio/service.d.ts.map +1 -0
  1153. package/services/ambient-audio/service.js +47 -0
  1154. package/services/ambient-audio/types.d.ts +42 -0
  1155. package/services/ambient-audio/types.d.ts.map +1 -0
  1156. package/services/app-updates/update-policy.d.ts +64 -0
  1157. package/services/app-updates/update-policy.d.ts.map +1 -0
  1158. package/services/app-updates/update-policy.js +228 -0
  1159. package/services/auth-store.d.ts +37 -1
  1160. package/services/auth-store.d.ts.map +1 -1
  1161. package/services/auth-store.js +59 -26
  1162. package/services/cloud-jwks-store.d.ts +3 -3
  1163. package/services/cloud-jwks-store.d.ts.map +1 -1
  1164. package/services/cloud-jwks-store.js +5 -8
  1165. package/services/coding-account-bridge.d.ts +71 -0
  1166. package/services/coding-account-bridge.d.ts.map +1 -0
  1167. package/services/coding-account-bridge.js +267 -0
  1168. package/services/connector-target-catalog.d.ts +10 -3
  1169. package/services/connector-target-catalog.d.ts.map +1 -1
  1170. package/services/connector-target-catalog.js +7 -4
  1171. package/services/credential-tunnel-service.d.ts +66 -0
  1172. package/services/credential-tunnel-service.d.ts.map +1 -0
  1173. package/services/credential-tunnel-service.js +227 -0
  1174. package/services/github-credentials.d.ts +1 -1
  1175. package/services/github-credentials.js +1 -1
  1176. package/services/inference-abort.d.ts +47 -0
  1177. package/services/inference-abort.d.ts.map +1 -0
  1178. package/services/inference-abort.js +76 -0
  1179. package/services/persistence.d.ts +2 -3
  1180. package/services/persistence.d.ts.map +1 -1
  1181. package/services/persistence.js +2 -3
  1182. package/services/phrase-chunked-tts.d.ts +136 -0
  1183. package/services/phrase-chunked-tts.d.ts.map +1 -0
  1184. package/services/phrase-chunked-tts.js +208 -0
  1185. package/services/sandbox-registry.d.ts +78 -0
  1186. package/services/sandbox-registry.d.ts.map +1 -0
  1187. package/services/sandbox-registry.js +323 -0
  1188. package/services/secrets-manager-installer.d.ts +8 -1
  1189. package/services/secrets-manager-installer.d.ts.map +1 -1
  1190. package/services/secrets-manager-installer.js +27 -2
  1191. package/services/sensitive-requests/cloud-link-adapter.d.ts +15 -0
  1192. package/services/sensitive-requests/cloud-link-adapter.d.ts.map +1 -0
  1193. package/services/sensitive-requests/cloud-link-adapter.js +73 -0
  1194. package/services/sensitive-requests/index.d.ts +27 -0
  1195. package/services/sensitive-requests/index.d.ts.map +1 -0
  1196. package/services/sensitive-requests/index.js +51 -0
  1197. package/services/sensitive-requests/instruct-dm-only-adapter.d.ts +14 -0
  1198. package/services/sensitive-requests/instruct-dm-only-adapter.d.ts.map +1 -0
  1199. package/services/sensitive-requests/instruct-dm-only-adapter.js +22 -0
  1200. package/services/sensitive-requests/owner-app-inline-adapter.d.ts +3 -0
  1201. package/services/sensitive-requests/owner-app-inline-adapter.d.ts.map +1 -0
  1202. package/services/sensitive-requests/owner-app-inline-adapter.js +146 -0
  1203. package/services/sensitive-requests/owner-app-oauth-adapter.d.ts +3 -0
  1204. package/services/sensitive-requests/owner-app-oauth-adapter.d.ts.map +1 -0
  1205. package/services/sensitive-requests/owner-app-oauth-adapter.js +156 -0
  1206. package/services/sensitive-requests/public-link-adapter.d.ts +14 -0
  1207. package/services/sensitive-requests/public-link-adapter.d.ts.map +1 -0
  1208. package/services/sensitive-requests/public-link-adapter.js +86 -0
  1209. package/services/sensitive-requests/tunnel-link-adapter.d.ts +17 -0
  1210. package/services/sensitive-requests/tunnel-link-adapter.d.ts.map +1 -0
  1211. package/services/sensitive-requests/tunnel-link-adapter.js +38 -0
  1212. package/services/steward-credentials.d.ts +1 -1
  1213. package/services/steward-credentials.d.ts.map +1 -1
  1214. package/services/steward-credentials.js +10 -6
  1215. package/services/steward-sidecar/health-check.d.ts.map +1 -1
  1216. package/services/steward-sidecar/health-check.js +4 -3
  1217. package/services/steward-sidecar/process-management.d.ts +1 -1
  1218. package/services/steward-sidecar/process-management.d.ts.map +1 -1
  1219. package/services/steward-sidecar/process-management.js +9 -3
  1220. package/services/steward-sidecar/types.d.ts +1 -1
  1221. package/services/steward-sidecar/types.d.ts.map +1 -1
  1222. package/services/steward-sidecar/wallet-setup.d.ts.map +1 -1
  1223. package/services/steward-sidecar/wallet-setup.js +8 -7
  1224. package/services/steward-sidecar.d.ts +2 -2
  1225. package/services/steward-sidecar.d.ts.map +1 -1
  1226. package/services/steward-sidecar.js +27 -19
  1227. package/services/task-host-capabilities.d.ts +60 -0
  1228. package/services/task-host-capabilities.d.ts.map +1 -0
  1229. package/services/task-host-capabilities.js +122 -0
  1230. package/services/tool-call-cache/index.d.ts +2 -2
  1231. package/services/tool-call-cache/index.d.ts.map +1 -1
  1232. package/services/tool-call-cache/index.js +1 -1
  1233. package/services/trigger-event-bridge.js +1 -1
  1234. package/services/tunnel-to-mobile/index.d.ts +2 -0
  1235. package/services/tunnel-to-mobile/index.d.ts.map +1 -0
  1236. package/services/tunnel-to-mobile/index.js +1 -0
  1237. package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts +105 -0
  1238. package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts.map +1 -0
  1239. package/services/tunnel-to-mobile/tunnel-to-mobile-client.js +190 -0
  1240. package/services/vault-bootstrap.d.ts.map +1 -1
  1241. package/services/vault-bootstrap.js +48 -21
  1242. package/services/vault-mirror.d.ts +1 -1
  1243. package/services/vault-mirror.d.ts.map +1 -1
  1244. package/services/vault-mirror.js +29 -6
  1245. package/services/voice-profiles/diarization-pipeline.d.ts +6 -0
  1246. package/services/voice-profiles/diarization-pipeline.d.ts.map +1 -0
  1247. package/services/voice-profiles/diarization-pipeline.js +20 -0
  1248. package/services/voice-profiles/index.d.ts +12 -0
  1249. package/services/voice-profiles/index.d.ts.map +1 -0
  1250. package/services/voice-profiles/index.js +5 -0
  1251. package/services/voice-profiles/nickname-evaluator.d.ts +14 -0
  1252. package/services/voice-profiles/nickname-evaluator.d.ts.map +1 -0
  1253. package/services/voice-profiles/nickname-evaluator.js +46 -0
  1254. package/services/voice-profiles/owner-confidence.d.ts +10 -0
  1255. package/services/voice-profiles/owner-confidence.d.ts.map +1 -0
  1256. package/services/voice-profiles/owner-confidence.js +38 -0
  1257. package/services/voice-profiles/private-challenge.d.ts +20 -0
  1258. package/services/voice-profiles/private-challenge.d.ts.map +1 -0
  1259. package/services/voice-profiles/private-challenge.js +44 -0
  1260. package/services/voice-profiles/store.d.ts +21 -0
  1261. package/services/voice-profiles/store.d.ts.map +1 -0
  1262. package/services/voice-profiles/store.js +50 -0
  1263. package/services/voice-profiles/types.d.ts +38 -0
  1264. package/services/voice-profiles/types.d.ts.map +1 -0
  1265. package/services/voice-profiles/types.js +1 -0
  1266. package/styles/electrobun-mac-window-drag.css +4 -4
  1267. package/test/helpers/__tests__/live-agent-test.smoke.test.ts +43 -70
  1268. package/test/helpers/browser-mocks.ts +2 -2
  1269. package/test/helpers/conditional-tests.ts +2 -2
  1270. package/test/helpers/i18n.ts +1 -1
  1271. package/test/helpers/live-agent-test.ts +537 -551
  1272. package/test/helpers/live-provider.test.ts +4 -4
  1273. package/test/helpers/live-provider.ts +41 -7
  1274. package/test/helpers/live-runtime-server.ts +4 -4
  1275. package/test/helpers/pglite-runtime.ts +1 -1
  1276. package/test/helpers/real-runtime.ts +54 -15
  1277. package/test/helpers/trajectory-harness.ts +11 -7
  1278. package/test/scripts/start-eliza-live.ts +9 -0
  1279. package/test/scripts/test-parallel.mjs +1 -1
  1280. package/test/scripts/test-root-unit.mjs +6 -7
  1281. package/ui-compat.d.ts +13 -2
  1282. package/ui-compat.d.ts.map +1 -1
  1283. package/ui-compat.js +19 -3
  1284. package/api/auth-pairing-compat-routes.d.ts +0 -17
  1285. package/api/auth-pairing-compat-routes.d.ts.map +0 -1
  1286. package/api/auth-pairing-compat-routes.js +0 -301
  1287. package/api/local-inference-compat-routes.d.ts +0 -16
  1288. package/api/local-inference-compat-routes.d.ts.map +0 -1
  1289. package/api/local-inference-compat-routes.js +0 -617
  1290. package/api/onboarding-compat-routes.d.ts +0 -4
  1291. package/api/onboarding-compat-routes.d.ts.map +0 -1
  1292. package/api/onboarding-compat-routes.js +0 -207
  1293. package/api/plugins-compat-routes.d.ts +0 -103
  1294. package/api/plugins-compat-routes.d.ts.map +0 -1
  1295. package/api/plugins-compat-routes.js +0 -1181
  1296. package/api/server-onboarding-compat.d.ts +0 -31
  1297. package/api/server-onboarding-compat.d.ts.map +0 -1
  1298. package/api/server-onboarding-compat.js +0 -283
  1299. package/benchmark/cua-routes.d.ts +0 -10
  1300. package/benchmark/cua-routes.d.ts.map +0 -1
  1301. package/benchmark/cua-routes.js +0 -179
  1302. package/benchmark/mock-plugin-base.d.ts +0 -9
  1303. package/benchmark/mock-plugin-base.d.ts.map +0 -1
  1304. package/benchmark/mock-plugin-base.js +0 -325
  1305. package/cli/parse-duration.d.ts +0 -5
  1306. package/cli/parse-duration.d.ts.map +0 -1
  1307. package/cli/parse-duration.js +0 -27
  1308. package/patches/llama-cpp-capacitor@0.1.5.patch +0 -2387
  1309. package/platform/agent-browser-stub.d.ts +0 -27
  1310. package/platform/agent-browser-stub.d.ts.map +0 -1
  1311. package/platform/agent-browser-stub.js +0 -16
  1312. package/platforms/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +0 -26
  1313. package/platforms/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
  1314. package/platforms/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -34
  1315. package/platforms/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +0 -18
  1316. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512@2x.png +0 -0
  1317. package/platforms/electrobun/assets/appIcon.png +0 -0
  1318. package/platforms/electrobun/scripts/build-whisper-universal.sh +0 -137
  1319. package/platforms/electrobun/scripts/build-whisper.sh +0 -95
  1320. package/platforms/electrobun/src/libMacWindowEffects.dylib +0 -0
  1321. package/platforms/electrobun/src/native/whisper.ts +0 -280
  1322. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  1323. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  1324. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  1325. package/registry/generate-apps.d.ts +0 -2
  1326. package/registry/generate-apps.d.ts.map +0 -1
  1327. package/registry/generate-apps.js +0 -338
  1328. package/registry/generate.d.ts +0 -2
  1329. package/registry/generate.d.ts.map +0 -1
  1330. package/registry/generate.js +0 -506
  1331. package/runtime/embedding-manager-support.d.ts +0 -77
  1332. package/runtime/embedding-manager-support.d.ts.map +0 -1
  1333. package/runtime/embedding-manager-support.js +0 -309
  1334. package/runtime/embedding-presets.d.ts +0 -5
  1335. package/runtime/embedding-presets.d.ts.map +0 -1
  1336. package/runtime/embedding-presets.js +0 -47
  1337. package/runtime/embedding-warmup-policy.d.ts +0 -13
  1338. package/runtime/embedding-warmup-policy.d.ts.map +0 -1
  1339. package/runtime/embedding-warmup-policy.js +0 -33
  1340. package/runtime/ensure-local-inference-handler.d.ts +0 -25
  1341. package/runtime/ensure-local-inference-handler.d.ts.map +0 -1
  1342. package/runtime/ensure-local-inference-handler.js +0 -389
  1343. package/runtime/mobile-local-inference-gate.d.ts +0 -21
  1344. package/runtime/mobile-local-inference-gate.d.ts.map +0 -1
  1345. package/runtime/mobile-local-inference-gate.js +0 -24
  1346. package/scripts/aosp/avd-test.mjs +0 -403
  1347. package/scripts/aosp/boot-validate.mjs +0 -536
  1348. package/scripts/aosp/build-aosp.mjs +0 -448
  1349. package/scripts/aosp/build-bootanimation.mjs +0 -178
  1350. package/scripts/aosp/capture-screens.mjs +0 -325
  1351. package/scripts/aosp/e2e-validate.mjs +0 -225
  1352. package/scripts/aosp/lint-init-rc.mjs +0 -258
  1353. package/scripts/aosp/llama-shim/eliza_llama_shim.c +0 -276
  1354. package/scripts/aosp/sim.mjs +0 -277
  1355. package/scripts/aosp/sync-to-aosp.mjs +0 -134
  1356. package/scripts/aosp/validate.mjs +0 -1273
  1357. package/scripts/build-llama-cpp-dflash.mjs +0 -1866
  1358. package/scripts/generate-onboarding-voicelines.mjs +0 -194
  1359. package/scripts/generated/static-asset-manifest.json +0 -4
  1360. package/scripts/normalize-parallax-capture.ts +0 -97
  1361. package/scripts/omnivoice-fuse/Makefile +0 -44
  1362. package/scripts/omnivoice-fuse/README.md +0 -266
  1363. package/scripts/omnivoice-fuse/cmake-graft.mjs +0 -180
  1364. package/scripts/omnivoice-fuse/ffi-stub.c +0 -222
  1365. package/scripts/omnivoice-fuse/ffi.h +0 -158
  1366. package/scripts/omnivoice-fuse/libelizainference_stub.dylib +0 -0
  1367. package/scripts/omnivoice-fuse/verify-symbols.mjs +0 -138
  1368. package/security/cloud-secret-store.d.ts +0 -34
  1369. package/security/cloud-secret-store.d.ts.map +0 -1
  1370. package/security/cloud-secret-store.js +0 -65
  1371. package/security/export-guard.d.ts +0 -34
  1372. package/security/export-guard.d.ts.map +0 -1
  1373. package/security/export-guard.js +0 -127
  1374. package/services/local-inference/__stress__/cache-stress-helpers.d.ts +0 -76
  1375. package/services/local-inference/__stress__/cache-stress-helpers.d.ts.map +0 -1
  1376. package/services/local-inference/__stress__/cache-stress-helpers.js +0 -238
  1377. package/services/local-inference/active-model.d.ts +0 -180
  1378. package/services/local-inference/active-model.d.ts.map +0 -1
  1379. package/services/local-inference/active-model.js +0 -362
  1380. package/services/local-inference/assignments.d.ts +0 -58
  1381. package/services/local-inference/assignments.d.ts.map +0 -1
  1382. package/services/local-inference/assignments.js +0 -179
  1383. package/services/local-inference/backend.d.ts +0 -200
  1384. package/services/local-inference/backend.d.ts.map +0 -1
  1385. package/services/local-inference/backend.js +0 -242
  1386. package/services/local-inference/bundled-models.d.ts +0 -34
  1387. package/services/local-inference/bundled-models.d.ts.map +0 -1
  1388. package/services/local-inference/bundled-models.js +0 -104
  1389. package/services/local-inference/cache-bridge.d.ts +0 -184
  1390. package/services/local-inference/cache-bridge.d.ts.map +0 -1
  1391. package/services/local-inference/cache-bridge.js +0 -333
  1392. package/services/local-inference/catalog.d.ts +0 -57
  1393. package/services/local-inference/catalog.d.ts.map +0 -1
  1394. package/services/local-inference/catalog.js +0 -262
  1395. package/services/local-inference/conversation-registry.d.ts +0 -122
  1396. package/services/local-inference/conversation-registry.d.ts.map +0 -1
  1397. package/services/local-inference/conversation-registry.js +0 -182
  1398. package/services/local-inference/device-bridge.d.ts +0 -139
  1399. package/services/local-inference/device-bridge.d.ts.map +0 -1
  1400. package/services/local-inference/device-bridge.js +0 -774
  1401. package/services/local-inference/dflash-doctor.d.ts +0 -27
  1402. package/services/local-inference/dflash-doctor.d.ts.map +0 -1
  1403. package/services/local-inference/dflash-doctor.js +0 -149
  1404. package/services/local-inference/dflash-server.d.ts +0 -248
  1405. package/services/local-inference/dflash-server.d.ts.map +0 -1
  1406. package/services/local-inference/dflash-server.js +0 -1076
  1407. package/services/local-inference/downloader.d.ts +0 -48
  1408. package/services/local-inference/downloader.d.ts.map +0 -1
  1409. package/services/local-inference/downloader.js +0 -688
  1410. package/services/local-inference/engine.d.ts +0 -282
  1411. package/services/local-inference/engine.d.ts.map +0 -1
  1412. package/services/local-inference/engine.js +0 -743
  1413. package/services/local-inference/external-scanner.d.ts +0 -17
  1414. package/services/local-inference/external-scanner.d.ts.map +0 -1
  1415. package/services/local-inference/external-scanner.js +0 -261
  1416. package/services/local-inference/handler-registry.d.ts +0 -72
  1417. package/services/local-inference/handler-registry.d.ts.map +0 -1
  1418. package/services/local-inference/handler-registry.js +0 -159
  1419. package/services/local-inference/hardware.d.ts +0 -26
  1420. package/services/local-inference/hardware.d.ts.map +0 -1
  1421. package/services/local-inference/hardware.js +0 -139
  1422. package/services/local-inference/hf-search.d.ts +0 -19
  1423. package/services/local-inference/hf-search.d.ts.map +0 -1
  1424. package/services/local-inference/hf-search.js +0 -169
  1425. package/services/local-inference/index.d.ts +0 -10
  1426. package/services/local-inference/index.d.ts.map +0 -1
  1427. package/services/local-inference/index.js +0 -7
  1428. package/services/local-inference/llama-server-metrics.d.ts +0 -108
  1429. package/services/local-inference/llama-server-metrics.d.ts.map +0 -1
  1430. package/services/local-inference/llama-server-metrics.js +0 -175
  1431. package/services/local-inference/manifest/index.d.ts +0 -4
  1432. package/services/local-inference/manifest/index.d.ts.map +0 -1
  1433. package/services/local-inference/manifest/index.js +0 -5
  1434. package/services/local-inference/manifest/schema.d.ts +0 -419
  1435. package/services/local-inference/manifest/schema.d.ts.map +0 -1
  1436. package/services/local-inference/manifest/schema.js +0 -227
  1437. package/services/local-inference/manifest/types.d.ts +0 -23
  1438. package/services/local-inference/manifest/types.d.ts.map +0 -1
  1439. package/services/local-inference/manifest/types.js +0 -5
  1440. package/services/local-inference/manifest/validator.d.ts +0 -43
  1441. package/services/local-inference/manifest/validator.d.ts.map +0 -1
  1442. package/services/local-inference/manifest/validator.js +0 -187
  1443. package/services/local-inference/paths.d.ts +0 -8
  1444. package/services/local-inference/paths.d.ts.map +0 -1
  1445. package/services/local-inference/paths.js +0 -7
  1446. package/services/local-inference/providers.d.ts +0 -61
  1447. package/services/local-inference/providers.d.ts.map +0 -1
  1448. package/services/local-inference/providers.js +0 -334
  1449. package/services/local-inference/ram-budget.d.ts +0 -57
  1450. package/services/local-inference/ram-budget.d.ts.map +0 -1
  1451. package/services/local-inference/ram-budget.js +0 -107
  1452. package/services/local-inference/readiness.d.ts +0 -9
  1453. package/services/local-inference/readiness.d.ts.map +0 -1
  1454. package/services/local-inference/readiness.js +0 -153
  1455. package/services/local-inference/recommendation.d.ts +0 -62
  1456. package/services/local-inference/recommendation.d.ts.map +0 -1
  1457. package/services/local-inference/recommendation.js +0 -309
  1458. package/services/local-inference/registry.d.ts +0 -35
  1459. package/services/local-inference/registry.d.ts.map +0 -1
  1460. package/services/local-inference/registry.js +0 -117
  1461. package/services/local-inference/router-handler.d.ts +0 -51
  1462. package/services/local-inference/router-handler.d.ts.map +0 -1
  1463. package/services/local-inference/router-handler.js +0 -165
  1464. package/services/local-inference/routing-policy.d.ts +0 -55
  1465. package/services/local-inference/routing-policy.d.ts.map +0 -1
  1466. package/services/local-inference/routing-policy.js +0 -195
  1467. package/services/local-inference/routing-preferences.d.ts +0 -8
  1468. package/services/local-inference/routing-preferences.d.ts.map +0 -1
  1469. package/services/local-inference/routing-preferences.js +0 -7
  1470. package/services/local-inference/service.d.ts +0 -88
  1471. package/services/local-inference/service.d.ts.map +0 -1
  1472. package/services/local-inference/service.js +0 -210
  1473. package/services/local-inference/session-pool.d.ts +0 -72
  1474. package/services/local-inference/session-pool.d.ts.map +0 -1
  1475. package/services/local-inference/session-pool.js +0 -125
  1476. package/services/local-inference/types.d.ts +0 -309
  1477. package/services/local-inference/types.d.ts.map +0 -1
  1478. package/services/local-inference/types.js +0 -23
  1479. package/services/local-inference/verify.d.ts +0 -8
  1480. package/services/local-inference/verify.d.ts.map +0 -1
  1481. package/services/local-inference/verify.js +0 -7
  1482. package/services/local-inference/voice/barge-in.d.ts +0 -15
  1483. package/services/local-inference/voice/barge-in.d.ts.map +0 -1
  1484. package/services/local-inference/voice/barge-in.js +0 -20
  1485. package/services/local-inference/voice/engine-bridge.d.ts +0 -256
  1486. package/services/local-inference/voice/engine-bridge.d.ts.map +0 -1
  1487. package/services/local-inference/voice/engine-bridge.js +0 -398
  1488. package/services/local-inference/voice/ffi-bindings.d.ts +0 -114
  1489. package/services/local-inference/voice/ffi-bindings.d.ts.map +0 -1
  1490. package/services/local-inference/voice/ffi-bindings.js +0 -281
  1491. package/services/local-inference/voice/index.d.ts +0 -51
  1492. package/services/local-inference/voice/index.d.ts.map +0 -1
  1493. package/services/local-inference/voice/index.js +0 -50
  1494. package/services/local-inference/voice/lifecycle.d.ts +0 -135
  1495. package/services/local-inference/voice/lifecycle.d.ts.map +0 -1
  1496. package/services/local-inference/voice/lifecycle.js +0 -189
  1497. package/services/local-inference/voice/phoneme-tokenizer.d.ts +0 -58
  1498. package/services/local-inference/voice/phoneme-tokenizer.d.ts.map +0 -1
  1499. package/services/local-inference/voice/phoneme-tokenizer.js +0 -53
  1500. package/services/local-inference/voice/phrase-cache.d.ts +0 -24
  1501. package/services/local-inference/voice/phrase-cache.d.ts.map +0 -1
  1502. package/services/local-inference/voice/phrase-cache.js +0 -32
  1503. package/services/local-inference/voice/phrase-chunker.d.ts +0 -20
  1504. package/services/local-inference/voice/phrase-chunker.d.ts.map +0 -1
  1505. package/services/local-inference/voice/phrase-chunker.js +0 -85
  1506. package/services/local-inference/voice/ring-buffer.d.ts +0 -40
  1507. package/services/local-inference/voice/ring-buffer.d.ts.map +0 -1
  1508. package/services/local-inference/voice/ring-buffer.js +0 -85
  1509. package/services/local-inference/voice/rollback-queue.d.ts +0 -24
  1510. package/services/local-inference/voice/rollback-queue.d.ts.map +0 -1
  1511. package/services/local-inference/voice/rollback-queue.js +0 -49
  1512. package/services/local-inference/voice/scheduler.d.ts +0 -47
  1513. package/services/local-inference/voice/scheduler.d.ts.map +0 -1
  1514. package/services/local-inference/voice/scheduler.js +0 -123
  1515. package/services/local-inference/voice/shared-resources.d.ts +0 -119
  1516. package/services/local-inference/voice/shared-resources.d.ts.map +0 -1
  1517. package/services/local-inference/voice/shared-resources.js +0 -83
  1518. package/services/local-inference/voice/speaker-preset-cache.d.ts +0 -28
  1519. package/services/local-inference/voice/speaker-preset-cache.d.ts.map +0 -1
  1520. package/services/local-inference/voice/speaker-preset-cache.js +0 -44
  1521. package/services/local-inference/voice/types.d.ts +0 -80
  1522. package/services/local-inference/voice/types.d.ts.map +0 -1
  1523. package/services/local-inference/voice/voice-preset-format.d.ts +0 -56
  1524. package/services/local-inference/voice/voice-preset-format.d.ts.map +0 -1
  1525. package/services/local-inference/voice/voice-preset-format.js +0 -184
  1526. package/services/plugin-installer.d.ts +0 -22
  1527. package/services/plugin-installer.d.ts.map +0 -1
  1528. package/services/plugin-installer.js +0 -41
  1529. package/test/scripts/task-agent-live-smoke.ts +0 -1335
  1530. /package/services/{local-inference/voice → ambient-audio}/types.js +0 -0
@@ -12,21 +12,90 @@ import * as fs from "node:fs";
12
12
  import { Utils } from "electrobun/bun";
13
13
  import { setAgentReady } from "./agent-ready-state";
14
14
  import { postAgentResetFromMain } from "./agent-reset-from-main";
15
+ import {
16
+ composeAgentStatusSnapshot,
17
+ readAgentStatusViaHttp,
18
+ } from "./agent-status-rpc";
15
19
  import { resolveDesktopRuntimeMode } from "./api-base";
16
20
  import { showBackgroundNoticeOnce } from "./background-notice";
21
+ import {
22
+ composeBootProgressSnapshot,
23
+ readAgentHealthSnapshotViaHttp,
24
+ } from "./boot-progress";
17
25
  import { getBrandConfig } from "./brand-config";
18
26
  import { postCloudDisconnectFromMain } from "./cloud-disconnect-from-main";
27
+ import {
28
+ composeAuthMeSnapshot,
29
+ composeAuthStatusSnapshot,
30
+ composeConfigSchemaSnapshot,
31
+ composeConfigSnapshot,
32
+ readAuthMeViaHttp,
33
+ readAuthStatusViaHttp,
34
+ readConfigSchemaViaHttp,
35
+ readConfigViaHttp,
36
+ } from "./config-and-auth-rpc";
37
+ import {
38
+ composeCharacterSnapshot,
39
+ composeConversationMessagesSnapshot,
40
+ composeConversationsListSnapshot,
41
+ readCharacterViaHttp,
42
+ readConversationMessagesViaHttp,
43
+ readConversationsListViaHttp,
44
+ } from "./conversations-and-character-rpc";
45
+ import {
46
+ composeAgentSelfStatusSnapshot,
47
+ composeCorePluginsSnapshot,
48
+ composeTriggerHealthSnapshot,
49
+ readAgentSelfStatusViaHttp,
50
+ readCorePluginsViaHttp,
51
+ readTriggerHealthViaHttp,
52
+ } from "./dashboard-rpc";
19
53
  import { desktopHttpRequest } from "./desktop-http-request";
20
54
  import { formatRendererDiagnosticLine } from "./diagnostic-format";
55
+ import {
56
+ createDynamicViewHostForRuntime,
57
+ getDynamicViewRegistry,
58
+ getDynamicViewSessionManager,
59
+ registerBuiltInDynamicViews,
60
+ } from "./dynamic-views";
61
+ import { KioskCanvas } from "./dynamic-views/kiosk-canvas";
62
+ import {
63
+ composeExtensionStatusSnapshot,
64
+ readExtensionStatusViaHttp,
65
+ } from "./extension-rpc";
66
+ import {
67
+ getFirstPartyRemotePluginDefinitions,
68
+ setFirstPartyRemotePluginDisabled,
69
+ } from "./first-party-remotes";
70
+ import {
71
+ composeFirstRunOptionsSnapshot,
72
+ composeFirstRunStatusSnapshot,
73
+ readFirstRunOptionsViaHttp,
74
+ readFirstRunStatusViaHttp,
75
+ } from "./first-run-rpc";
21
76
  import { getFloatingChatManager } from "./floating-chat-window";
77
+ import {
78
+ composeInboxChatsSnapshot,
79
+ composeInboxMessagesSnapshot,
80
+ composeInboxSourcesSnapshot,
81
+ readInboxChatsViaHttp,
82
+ readInboxMessagesViaHttp,
83
+ readInboxSourcesViaHttp,
84
+ } from "./inbox-rpc";
85
+ import { isKioskShellMode } from "./kiosk-mode";
86
+ import { LaunchOrchestrator } from "./launch";
22
87
  import { logger } from "./logger";
23
- import { getAgentManager } from "./native/agent";
88
+ import {
89
+ getAgentManager,
90
+ getStartupDiagnosticLogTail,
91
+ getStartupDiagnosticsSnapshot,
92
+ } from "./native/agent";
24
93
  import { getBrowserWorkspaceManager } from "./native/browser-workspace";
25
94
  import { getCameraManager } from "./native/camera";
26
95
  import { getCanvasManager } from "./native/canvas";
27
96
  import {
28
- scanAndValidateProviderCredentials,
29
- scanProviderCredentials,
97
+ scanAndValidateProviderCredentials,
98
+ scanProviderCredentials,
30
99
  } from "./native/credentials";
31
100
  import { getDesktopManager } from "./native/desktop";
32
101
  import type { NativeEditorId } from "./native/editor-bridge";
@@ -38,70 +107,96 @@ import { getLocationManager } from "./native/location";
38
107
  import { getMusicPlayerManager } from "./native/music-player";
39
108
  import { getPermissionManager } from "./native/permissions";
40
109
  import type { AllPermissionsState } from "./native/permissions-shared";
110
+ import {
111
+ configureRemotePluginHostEvents,
112
+ getRemotePluginHost,
113
+ } from "./native/remote-plugin-host";
41
114
  import { getScreenCaptureManager } from "./native/screencapture";
42
115
  import {
43
- getStewardStatus,
44
- isStewardLocalEnabled,
45
- resetSteward,
46
- restartSteward,
47
- startSteward,
116
+ getStewardStatus,
117
+ isStewardLocalEnabled,
118
+ resetSteward,
119
+ restartSteward,
120
+ startSteward,
48
121
  } from "./native/steward";
49
122
  import { getSwabbleManager } from "./native/swabble";
50
123
  import { getTalkModeManager } from "./native/talkmode";
124
+ import {
125
+ buildDynamicViewRpcHandlers,
126
+ buildWindowRpcHandlers,
127
+ } from "./rpc-handler-slices";
128
+ import { resolveRpcAgentPort } from "./rpc-port-resolver";
51
129
  import type { ElizaDesktopRPCSchema, StewardRpcStatus } from "./rpc-schema";
52
130
  import {
53
- buildRuntimePermissionUnavailableState,
54
- fetchRuntimePermissionState,
55
- isRuntimePermissionId,
56
- mergeRuntimePermissionStates,
131
+ buildRuntimePermissionUnavailableState,
132
+ fetchRuntimePermissionState,
133
+ isRuntimePermissionId,
134
+ mergeRuntimePermissionStates,
57
135
  } from "./runtime-permissions";
58
- import { isDetachedSurface } from "./surface-windows";
136
+ import {
137
+ composeRuntimeSnapshot,
138
+ readRuntimeSnapshotViaHttp,
139
+ } from "./runtime-rpc";
140
+ import {
141
+ composeAgentAutomationModeSnapshot,
142
+ composeAgentAutomationModeUpdate,
143
+ composeConfigUpdate,
144
+ composeTradePermissionModeSnapshot,
145
+ composeTradePermissionModeUpdate,
146
+ readAgentAutomationModeViaHttp,
147
+ readTradePermissionModeViaHttp,
148
+ updateAgentAutomationModeViaHttp,
149
+ updateConfigViaHttp,
150
+ updateTradePermissionModeViaHttp,
151
+ } from "./settings-mutations-rpc";
152
+ import {
153
+ composeSubscriptionStatusSnapshot,
154
+ readSubscriptionStatusViaHttp,
155
+ } from "./subscription-rpc";
156
+ import { createTraceHostForRuntime, getTraceService } from "./trace";
59
157
  import type { SendToWebview } from "./types.js";
60
-
61
- function normalizeRendererRoutePath(path: string): string {
62
- const trimmed = path.trim();
63
- if (!trimmed.startsWith("/") || trimmed.startsWith("//")) {
64
- throw new Error("desktopOpenAppWindow path must be a renderer route.");
65
- }
66
- return trimmed;
67
- }
158
+ import {
159
+ composeUpdateStatusSnapshot,
160
+ readUpdateStatusViaHttp,
161
+ } from "./update-rpc";
162
+ import { createVoiceHostForRuntime, VoiceService } from "./voice";
68
163
 
69
164
  function createStewardStoppedStatus(error: string): StewardRpcStatus {
70
- return {
71
- state: "stopped",
72
- port: null,
73
- pid: null,
74
- error,
75
- restartCount: 0,
76
- walletAddress: null,
77
- agentId: null,
78
- tenantId: null,
79
- startedAt: null,
80
- };
165
+ return {
166
+ state: "stopped",
167
+ port: null,
168
+ pid: null,
169
+ error,
170
+ restartCount: 0,
171
+ walletAddress: null,
172
+ agentId: null,
173
+ tenantId: null,
174
+ startedAt: null,
175
+ };
81
176
  }
82
177
 
83
178
  /** Push current OS permission states to the agent REST API in-process. */
84
179
  async function syncPermissionsToRestApi(
85
- portOverride?: number | null,
86
- nativePermissions?: AllPermissionsState,
180
+ portOverride?: number | null,
181
+ nativePermissions?: AllPermissionsState,
87
182
  ): Promise<void> {
88
- const port = portOverride ?? getAgentManager().getPort();
89
- if (!port) return;
90
- try {
91
- const permissions = await mergeRuntimePermissionStates(
92
- port,
93
- nativePermissions ?? (await getPermissionManager().checkAllPermissions()),
94
- );
95
- await fetch(`http://127.0.0.1:${port}/api/permissions/state`, {
96
- method: "PUT",
97
- headers: { "Content-Type": "application/json" },
98
- body: JSON.stringify({ permissions }),
99
- });
100
- } catch (error) {
101
- logger.warn(
102
- `[Permissions] Failed to sync permission state to runtime: ${error instanceof Error ? error.message : String(error)}`,
103
- );
104
- }
183
+ const port = portOverride ?? getAgentManager().getPort();
184
+ if (!port) return;
185
+ try {
186
+ const permissions = await mergeRuntimePermissionStates(
187
+ port,
188
+ nativePermissions ?? (await getPermissionManager().checkAllPermissions()),
189
+ );
190
+ await fetch(`http://127.0.0.1:${port}/api/permissions/state`, {
191
+ method: "PUT",
192
+ headers: { "Content-Type": "application/json" },
193
+ body: JSON.stringify({ permissions }),
194
+ });
195
+ } catch (error) {
196
+ logger.warn(
197
+ `[Permissions] Failed to sync permission state to runtime: ${error instanceof Error ? error.message : String(error)}`,
198
+ );
199
+ }
105
200
  }
106
201
 
107
202
  /**
@@ -114,15 +209,15 @@ async function syncPermissionsToRestApi(
114
209
  * type safety lives in the concrete handler definitions, not this wrapper.
115
210
  */
116
211
  type ElectrobunRpcWithHandlers = {
117
- // biome-ignore lint/suspicious/noExplicitAny: Electrobun doesn't export a typed setRequestHandler interface; individual handlers are typed at call-sites
118
- setRequestHandler?: (handlers: Record<string, (params: any) => any>) => void;
119
- // biome-ignore lint/suspicious/noExplicitAny: bun→renderer request proxy; methods typed at call-sites
120
- request?: Record<string, (params: any) => Promise<any>>;
212
+ // biome-ignore lint/suspicious/noExplicitAny: Electrobun doesn't export a typed setRequestHandler interface; individual handlers are typed at call-sites
213
+ setRequestHandler?: (handlers: Record<string, (params: any) => any>) => void;
214
+ // biome-ignore lint/suspicious/noExplicitAny: bun→renderer request proxy; methods typed at call-sites
215
+ request?: Record<string, (params: any) => Promise<any>>;
121
216
  };
122
217
 
123
218
  export {
124
- formatRendererDiagnosticLine,
125
- redactDiagnosticUrl,
219
+ formatRendererDiagnosticLine,
220
+ redactDiagnosticUrl,
126
221
  } from "./diagnostic-format";
127
222
 
128
223
  /**
@@ -136,20 +231,20 @@ export {
136
231
  * `null` clears the caller (used when tearing down a window).
137
232
  */
138
233
  export function wireBrowserWorkspaceCaller(
139
- rpc: ElectrobunRpcWithHandlers | null | undefined,
234
+ rpc: ElectrobunRpcWithHandlers | null | undefined,
140
235
  ): void {
141
- const browserWorkspace = getBrowserWorkspaceManager();
142
- const rendererRequest = rpc?.request;
143
- if (rendererRequest) {
144
- browserWorkspace.setRendererCaller({
145
- evaluate: (params) =>
146
- rendererRequest.browserWorkspaceRendererEvaluate(params),
147
- getTabRect: (params) =>
148
- rendererRequest.browserWorkspaceRendererGetTabRect(params),
149
- });
150
- } else {
151
- browserWorkspace.setRendererCaller(null);
152
- }
236
+ const browserWorkspace = getBrowserWorkspaceManager();
237
+ const rendererRequest = rpc?.request;
238
+ if (rendererRequest) {
239
+ browserWorkspace.setRendererCaller({
240
+ evaluate: (params) =>
241
+ rendererRequest.browserWorkspaceRendererEvaluate(params),
242
+ getTabRect: (params) =>
243
+ rendererRequest.browserWorkspaceRendererGetTabRect(params),
244
+ });
245
+ } else {
246
+ browserWorkspace.setRendererCaller(null);
247
+ }
153
248
  }
154
249
 
155
250
  /**
@@ -171,883 +266,1181 @@ export function wireBrowserWorkspaceCaller(
171
266
  * Adding/removing a schema method without a corresponding handler change
172
267
  * is now a compile error.
173
268
  *
174
- * Async helpers returning `Promise<void>` are assignable here: schema `response:
175
- * undefined` means “no payload”, which we model as `void` at the handler boundary
176
- * (distinct from `undefined` in TypeScript’s type system).
269
+ * Schema `response: undefined` means "no payload", which we model as
270
+ * `void` at the handler boundary so Promise<void> native calls are accepted.
177
271
  */
272
+ // biome-ignore lint/suspicious/noConfusingVoidType: no-payload async RPC handlers naturally return Promise<void>.
178
273
  type RpcMethodReturn<R> = [R] extends [undefined] ? void : R;
179
274
 
180
275
  type BunRpcHandlers = {
181
- [K in keyof ElizaDesktopRPCSchema["bun"]["requests"]]: (
182
- params: ElizaDesktopRPCSchema["bun"]["requests"][K]["params"],
183
- ) => Promise<
184
- RpcMethodReturn<ElizaDesktopRPCSchema["bun"]["requests"][K]["response"]>
185
- >;
276
+ [K in keyof ElizaDesktopRPCSchema["bun"]["requests"]]: (
277
+ params: ElizaDesktopRPCSchema["bun"]["requests"][K]["params"],
278
+ ) => Promise<
279
+ RpcMethodReturn<ElizaDesktopRPCSchema["bun"]["requests"][K]["response"]>
280
+ >;
186
281
  };
187
282
 
283
+ let rpcVoiceService: VoiceService | null = null;
284
+ let rpcLaunchOrchestrator: LaunchOrchestrator | null = null;
285
+
286
+ function getRpcVoiceService(traceService: ReturnType<typeof getTraceService>) {
287
+ rpcVoiceService ??= new VoiceService({ traceService });
288
+ return rpcVoiceService;
289
+ }
290
+
291
+ function getRpcLaunchOrchestrator(
292
+ params: ConstructorParameters<typeof LaunchOrchestrator>[0],
293
+ ) {
294
+ rpcLaunchOrchestrator ??= new LaunchOrchestrator(params);
295
+ return rpcLaunchOrchestrator;
296
+ }
297
+
188
298
  export function buildBunRpcHandlers({
189
- sendToWebview,
299
+ sendToWebview,
190
300
  }: {
191
- sendToWebview: SendToWebview;
301
+ sendToWebview: SendToWebview;
192
302
  }): BunRpcHandlers {
193
- const agent = getAgentManager();
194
- const camera = getCameraManager();
195
- const canvas = getCanvasManager();
196
- const desktop = getDesktopManager();
197
- const editorBridge = getEditorBridge();
198
- const fileWatcher = getFileWatcher();
199
- const floatingChat = getFloatingChatManager();
200
- const gateway = getGatewayDiscovery();
201
- const gpuWindow = getGpuWindowManager();
202
- const location = getLocationManager();
203
- const permissions = getPermissionManager();
204
- const screencapture = getScreenCaptureManager();
205
- const swabble = getSwabbleManager();
206
- const talkmode = getTalkModeManager();
207
- const musicPlayer = getMusicPlayerManager();
208
- const browserWorkspace = getBrowserWorkspaceManager();
303
+ const agent = getAgentManager();
304
+ const camera = getCameraManager();
305
+ const canvas = getCanvasManager();
306
+ const desktop = getDesktopManager();
307
+ const editorBridge = getEditorBridge();
308
+ const fileWatcher = getFileWatcher();
309
+ const floatingChat = getFloatingChatManager();
310
+ const gateway = getGatewayDiscovery();
311
+ const gpuWindow = getGpuWindowManager();
312
+ const location = getLocationManager();
313
+ const permissions = getPermissionManager();
314
+ const screencapture = getScreenCaptureManager();
315
+ const swabble = getSwabbleManager();
316
+ const talkmode = getTalkModeManager();
317
+ const musicPlayer = getMusicPlayerManager();
318
+ const browserWorkspace = getBrowserWorkspaceManager();
319
+ const remotePluginHost = getRemotePluginHost();
320
+ registerBuiltInDynamicViews();
321
+ const dynamicViewRegistry = getDynamicViewRegistry();
322
+ // In kiosk mode the OS runs a single fullscreen toplevel under a
323
+ // single-window compositor, so dynamic views must mount as in-window
324
+ // surfaces on the KioskShell canvas instead of opening native toplevels.
325
+ const kioskMode = isKioskShellMode();
326
+ const dynamicViewSessions = getDynamicViewSessionManager({
327
+ registry: dynamicViewRegistry,
328
+ canvas: kioskMode ? new KioskCanvas(sendToWebview) : canvas,
329
+ workerStatusProvider: {
330
+ getWorkerStatus: (id) => remotePluginHost.getWorkerStatus(id),
331
+ },
332
+ ...(kioskMode
333
+ ? {
334
+ supportedPlacements: [
335
+ "canvas",
336
+ "panel",
337
+ "chat-inline",
338
+ "floating",
339
+ "debug",
340
+ ] as const,
341
+ }
342
+ : {}),
343
+ });
344
+ remotePluginHost.setDynamicViewHost(
345
+ createDynamicViewHostForRuntime(dynamicViewSessions),
346
+ );
347
+ const traceService = getTraceService({
348
+ dynamicViewRegistry,
349
+ dynamicViewSessions,
350
+ });
351
+ remotePluginHost.setTraceHost(createTraceHostForRuntime(traceService));
352
+ const voiceService = getRpcVoiceService(traceService);
353
+ remotePluginHost.setVoiceHost(createVoiceHostForRuntime(voiceService));
354
+ const launchOrchestrator = getRpcLaunchOrchestrator({
355
+ agent,
356
+ readBootProgress: async () => {
357
+ const status = agent.getStatus();
358
+ return composeBootProgressSnapshot(
359
+ { ...status, port: resolveRpcAgentPort(status.port) },
360
+ readAgentHealthSnapshotViaHttp,
361
+ );
362
+ },
363
+ readAuthStatus: readAuthStatusViaHttp,
364
+ readFirstRunStatus: readFirstRunStatusViaHttp,
365
+ readDiagnostics: getStartupDiagnosticsSnapshot,
366
+ readDatabaseStatus: () => agent.getDatabaseSnapshot(),
367
+ readDiagnosticLogTail: getStartupDiagnosticLogTail,
368
+ listRemoteStatuses: () =>
369
+ getFirstPartyRemotePluginDefinitions({ includeDev: true }).map(
370
+ (definition) => {
371
+ const status = remotePluginHost.getWorkerStatus(definition.id);
372
+ return {
373
+ id: definition.id,
374
+ state: status?.state ?? "stopped",
375
+ error: status?.error ?? null,
376
+ required: definition.kind === "required",
377
+ };
378
+ },
379
+ ),
380
+ createBugReportBundle: (params) => desktop.createBugReportBundle(params),
381
+ dynamicViewRegistry,
382
+ dynamicViewSessions,
383
+ });
384
+ configureRemotePluginHostEvents(sendToWebview);
385
+
386
+ return {
387
+ // ---- Agent ----
388
+ agentStart: async () => {
389
+ const status = await agent.start();
390
+ if (status.state === "running") {
391
+ setAgentReady(true);
392
+ }
393
+ return status;
394
+ },
395
+ agentStop: async () => {
396
+ await agent.stop();
397
+ setAgentReady(false);
398
+ return { ok: true };
399
+ },
400
+ agentRestart: async () => {
401
+ const status = await agent.restart();
402
+ setAgentReady(status.state === "running");
403
+ return status;
404
+ },
405
+ agentRestartClearLocalDb: async () => {
406
+ logger.info("[RPC][reset] agentRestartClearLocalDb invoked");
407
+ try {
408
+ const status = await agent.restartClearingLocalDb();
409
+ logger.info(
410
+ `[RPC][reset] agentRestartClearLocalDb done state=${status.state} port=${status.port ?? "none"}`,
411
+ );
412
+ setAgentReady(status.state === "running");
413
+ return status;
414
+ } catch (err) {
415
+ logger.error(
416
+ `[RPC][reset] agentRestartClearLocalDb failed: ${err instanceof Error ? err.message : String(err)}`,
417
+ );
418
+ throw err;
419
+ }
420
+ },
421
+ agentStatus: async () => agent.getStatus(),
422
+ getAgentStatus: async () =>
423
+ composeAgentStatusSnapshot(
424
+ resolveRpcAgentPort(agent.getStatus().port),
425
+ readAgentStatusViaHttp,
426
+ ),
427
+ getUpdateStatus: async (params) =>
428
+ composeUpdateStatusSnapshot(
429
+ resolveRpcAgentPort(agent.getStatus().port),
430
+ params?.force ?? false,
431
+ readUpdateStatusViaHttp,
432
+ ),
433
+ getExtensionStatus: async () =>
434
+ composeExtensionStatusSnapshot(
435
+ resolveRpcAgentPort(agent.getStatus().port),
436
+ readExtensionStatusViaHttp,
437
+ ),
438
+ getSubscriptionStatus: async () =>
439
+ composeSubscriptionStatusSnapshot(
440
+ resolveRpcAgentPort(agent.getStatus().port),
441
+ readSubscriptionStatusViaHttp,
442
+ ),
443
+ getRuntimeSnapshot: async (params) =>
444
+ composeRuntimeSnapshot(
445
+ resolveRpcAgentPort(agent.getStatus().port),
446
+ params,
447
+ readRuntimeSnapshotViaHttp,
448
+ ),
449
+ getAgentSelfStatus: async () =>
450
+ composeAgentSelfStatusSnapshot(
451
+ resolveRpcAgentPort(agent.getStatus().port),
452
+ readAgentSelfStatusViaHttp,
453
+ ),
454
+ getTriggerHealth: async () =>
455
+ composeTriggerHealthSnapshot(
456
+ resolveRpcAgentPort(agent.getStatus().port),
457
+ readTriggerHealthViaHttp,
458
+ ),
459
+ getCorePlugins: async () =>
460
+ composeCorePluginsSnapshot(
461
+ resolveRpcAgentPort(agent.getStatus().port),
462
+ readCorePluginsViaHttp,
463
+ ),
464
+ /**
465
+ * Aggregated boot snapshot — typed counterpart to renderer
466
+ * `/api/health` + `/api/dev/stack` polling. Pure composition over
467
+ * `agent.getStatus()` + `readAgentHealthSnapshotViaHttp` so both
468
+ * sources are swappable when the agent runtime merges into this
469
+ * Bun process (the typed contract stays identical through that
470
+ * migration).
471
+ */
472
+ bootProgress: async () => {
473
+ const status = agent.getStatus();
474
+ return composeBootProgressSnapshot(
475
+ { ...status, port: resolveRpcAgentPort(status.port) },
476
+ readAgentHealthSnapshotViaHttp,
477
+ );
478
+ },
479
+ launchProgress: async () => launchOrchestrator.getProgress(),
480
+ launchEventsTail: async (params) => launchOrchestrator.tailEvents(params),
481
+ launchRetry: async () => launchOrchestrator.retry(),
482
+ launchOpenDiagnosticsView: async () =>
483
+ launchOrchestrator.openDiagnosticsView(),
484
+ launchCreateBugReportBundle: async () =>
485
+ launchOrchestrator.createBugReport(),
486
+ databaseStatus: async () => agent.getDatabaseSnapshot(),
487
+ databaseRecoveryPreview: async () => agent.previewDatabaseRecovery(),
488
+ databaseBackupPglite: async () => agent.backupPgliteDatabase(),
489
+ databaseResetPglite: async (params) => agent.resetPgliteDatabase(params),
490
+ /**
491
+ * Typed counterpart to renderer `client.getFirstRunStatus()` —
492
+ * the polling-backend startup phase calls this. See
493
+ * `first-run-rpc.ts` for the pure composition layer.
494
+ */
495
+ getFirstRunStatus: async () =>
496
+ composeFirstRunStatusSnapshot(
497
+ resolveRpcAgentPort(agent.getStatus().port),
498
+ readFirstRunStatusViaHttp,
499
+ ),
500
+ /**
501
+ * Typed counterpart to renderer `client.getFirstRunOptions()` —
502
+ * provider + model catalogs for the firstRun form.
503
+ */
504
+ getFirstRunOptions: async () =>
505
+ composeFirstRunOptionsSnapshot(
506
+ resolveRpcAgentPort(agent.getStatus().port),
507
+ readFirstRunOptionsViaHttp,
508
+ ),
509
+ /**
510
+ * Typed counterpart to `client.getConfig()` — redacted agent
511
+ * config. See config-and-auth-rpc.ts for the pure composer.
512
+ */
513
+ getConfig: async () =>
514
+ composeConfigSnapshot(
515
+ resolveRpcAgentPort(agent.getStatus().port),
516
+ readConfigViaHttp,
517
+ ),
518
+ updateConfig: async (params) =>
519
+ composeConfigUpdate(
520
+ resolveRpcAgentPort(agent.getStatus().port),
521
+ params,
522
+ updateConfigViaHttp,
523
+ ),
524
+ getConfigSchema: async () =>
525
+ composeConfigSchemaSnapshot(
526
+ resolveRpcAgentPort(agent.getStatus().port),
527
+ readConfigSchemaViaHttp,
528
+ ),
529
+ getAgentAutomationMode: async () =>
530
+ composeAgentAutomationModeSnapshot(
531
+ resolveRpcAgentPort(agent.getStatus().port),
532
+ readAgentAutomationModeViaHttp,
533
+ ),
534
+ setAgentAutomationMode: async (params) =>
535
+ composeAgentAutomationModeUpdate(
536
+ resolveRpcAgentPort(agent.getStatus().port),
537
+ params.mode,
538
+ updateAgentAutomationModeViaHttp,
539
+ ),
540
+ getTradePermissionMode: async () =>
541
+ composeTradePermissionModeSnapshot(
542
+ resolveRpcAgentPort(agent.getStatus().port),
543
+ readTradePermissionModeViaHttp,
544
+ ),
545
+ setTradePermissionMode: async (params) =>
546
+ composeTradePermissionModeUpdate(
547
+ resolveRpcAgentPort(agent.getStatus().port),
548
+ params.mode,
549
+ updateTradePermissionModeViaHttp,
550
+ ),
551
+ /**
552
+ * Typed counterpart to `client.getAuthStatus()` — auth/pairing
553
+ * gate state used by the polling-backend startup phase.
554
+ */
555
+ getAuthStatus: async () =>
556
+ composeAuthStatusSnapshot(
557
+ resolveRpcAgentPort(agent.getStatus().port),
558
+ readAuthStatusViaHttp,
559
+ ),
560
+ /**
561
+ * Typed counterpart to `client.getAuthMe()` — session identity +
562
+ * access mode (or structured 401 reason).
563
+ */
564
+ getAuthMe: async () =>
565
+ composeAuthMeSnapshot(
566
+ resolveRpcAgentPort(agent.getStatus().port),
567
+ readAuthMeViaHttp,
568
+ ),
569
+ /**
570
+ * Typed counterpart to `client.listConversations()` — feeds the
571
+ * conversations sidebar. Polled at the same cadence as the
572
+ * existing HTTP route (useIntervalWhenDocumentVisible).
573
+ */
574
+ listConversations: async () =>
575
+ composeConversationsListSnapshot(
576
+ resolveRpcAgentPort(agent.getStatus().port),
577
+ readConversationsListViaHttp,
578
+ ),
579
+ getConversationMessages: async (params) =>
580
+ composeConversationMessagesSnapshot(
581
+ resolveRpcAgentPort(agent.getStatus().port),
582
+ params.id,
583
+ readConversationMessagesViaHttp,
584
+ ),
585
+ getInboxMessages: async (params) =>
586
+ composeInboxMessagesSnapshot(
587
+ resolveRpcAgentPort(agent.getStatus().port),
588
+ params,
589
+ readInboxMessagesViaHttp,
590
+ ),
591
+ getInboxChats: async (params) =>
592
+ composeInboxChatsSnapshot(
593
+ resolveRpcAgentPort(agent.getStatus().port),
594
+ params,
595
+ readInboxChatsViaHttp,
596
+ ),
597
+ getInboxSources: async () =>
598
+ composeInboxSourcesSnapshot(
599
+ resolveRpcAgentPort(agent.getStatus().port),
600
+ readInboxSourcesViaHttp,
601
+ ),
602
+ /**
603
+ * Typed counterpart to `client.getCharacter()` — current
604
+ * character config used by chat + companion surfaces.
605
+ */
606
+ getCharacter: async () =>
607
+ composeCharacterSnapshot(
608
+ resolveRpcAgentPort(agent.getStatus().port),
609
+ readCharacterViaHttp,
610
+ ),
611
+ agentInspectExistingInstall: async () => agent.inspectExistingInstall(),
612
+ agentMigrateStateDir: async (params: { fromPath: string }) =>
613
+ agent.migrateStateDir(params),
614
+ /** Renderer `fetch` after native dialogs can stall; main POST matches menu reset pattern. */
615
+ agentPostReset: async (
616
+ params?: { apiBase?: string; bearerToken?: string } | null,
617
+ ) => {
618
+ try {
619
+ return await postAgentResetFromMain({
620
+ apiBaseOverride: params?.apiBase ?? null,
621
+ bearerTokenOverride: params?.bearerToken ?? null,
622
+ });
623
+ } catch (err) {
624
+ logger.error(
625
+ `[RPC] agentPostReset failed: ${err instanceof Error ? err.message : String(err)}`,
626
+ );
627
+ throw err;
628
+ }
629
+ },
630
+ /** Renderer `fetch` after native dialogs can stall; main POST matches menu reset pattern. */
631
+ agentPostCloudDisconnect: async (
632
+ params?: { apiBase?: string; bearerToken?: string } | null,
633
+ ) => {
634
+ try {
635
+ return await postCloudDisconnectFromMain({
636
+ apiBaseOverride: params?.apiBase ?? null,
637
+ bearerTokenOverride: params?.bearerToken ?? null,
638
+ });
639
+ } catch (err) {
640
+ logger.error(
641
+ `[RPC] agentPostCloudDisconnect failed: ${err instanceof Error ? err.message : String(err)}`,
642
+ );
643
+ throw err;
644
+ }
645
+ },
646
+ /** Native confirm + main-process POST (renderer bridge/fetch can stall after a sheet). */
647
+ agentCloudDisconnectWithConfirm: async (
648
+ params?: { apiBase?: string; bearerToken?: string } | null,
649
+ ) => {
650
+ const box = await desktop.showMessageBox({
651
+ type: "warning",
652
+ title: "Disconnect from Eliza Cloud",
653
+ message: "The agent will need a local AI provider to continue working.",
654
+ buttons: ["Disconnect", "Cancel"],
655
+ defaultId: 0,
656
+ cancelId: 1,
657
+ });
658
+ const raw =
659
+ box && typeof box === "object" && "response" in box
660
+ ? (box as { response: unknown }).response
661
+ : box;
662
+ const response =
663
+ typeof raw === "number" && Number.isFinite(raw)
664
+ ? raw
665
+ : typeof raw === "bigint"
666
+ ? Number(raw)
667
+ : 1;
668
+ if (response !== 0) {
669
+ return { cancelled: true as const };
670
+ }
671
+ try {
672
+ return await postCloudDisconnectFromMain({
673
+ apiBaseOverride: params?.apiBase ?? null,
674
+ bearerTokenOverride: params?.bearerToken ?? null,
675
+ });
676
+ } catch (err) {
677
+ logger.error(
678
+ `[RPC] agentCloudDisconnectWithConfirm failed: ${err instanceof Error ? err.message : String(err)}`,
679
+ );
680
+ throw err;
681
+ }
682
+ },
209
683
 
210
- return {
211
- // ---- Agent ----
212
- agentStart: async () => {
213
- const status = await agent.start();
214
- if (status.state === "running") {
215
- setAgentReady(true);
216
- }
217
- return status;
218
- },
219
- agentStop: async () => {
220
- await agent.stop();
221
- setAgentReady(false);
222
- return { ok: true };
223
- },
224
- agentRestart: async () => {
225
- const status = await agent.restart();
226
- setAgentReady(status.state === "running");
227
- return status;
228
- },
229
- agentRestartClearLocalDb: async () => {
230
- logger.info("[RPC][reset] agentRestartClearLocalDb invoked");
231
- try {
232
- const status = await agent.restartClearingLocalDb();
233
- logger.info(
234
- `[RPC][reset] agentRestartClearLocalDb done state=${status.state} port=${status.port ?? "none"}`,
235
- );
236
- setAgentReady(status.state === "running");
237
- return status;
238
- } catch (err) {
239
- logger.error(
240
- `[RPC][reset] agentRestartClearLocalDb failed: ${err instanceof Error ? err.message : String(err)}`,
241
- );
242
- throw err;
243
- }
244
- },
245
- agentStatus: async () => agent.getStatus(),
246
- agentInspectExistingInstall: async () => agent.inspectExistingInstall(),
247
- agentMigrateStateDir: async (params: { fromPath: string }) =>
248
- agent.migrateStateDir(params),
249
- /** Renderer `fetch` after native dialogs can stall; main POST matches menu reset pattern. */
250
- agentPostReset: async (
251
- params?: { apiBase?: string; bearerToken?: string } | null,
252
- ) => {
253
- try {
254
- return await postAgentResetFromMain({
255
- apiBaseOverride: params?.apiBase ?? null,
256
- bearerTokenOverride: params?.bearerToken ?? null,
257
- });
258
- } catch (err) {
259
- logger.error(
260
- `[RPC] agentPostReset failed: ${err instanceof Error ? err.message : String(err)}`,
261
- );
262
- throw err;
263
- }
264
- },
265
- /** Renderer `fetch` after native dialogs can stall; main POST matches menu reset pattern. */
266
- agentPostCloudDisconnect: async (
267
- params?: { apiBase?: string; bearerToken?: string } | null,
268
- ) => {
269
- try {
270
- return await postCloudDisconnectFromMain({
271
- apiBaseOverride: params?.apiBase ?? null,
272
- bearerTokenOverride: params?.bearerToken ?? null,
273
- });
274
- } catch (err) {
275
- logger.error(
276
- `[RPC] agentPostCloudDisconnect failed: ${err instanceof Error ? err.message : String(err)}`,
277
- );
278
- throw err;
279
- }
280
- },
281
- /** Native confirm + main-process POST (renderer bridge/fetch can stall after a sheet). */
282
- agentCloudDisconnectWithConfirm: async (
283
- params?: { apiBase?: string; bearerToken?: string } | null,
284
- ) => {
285
- const box = await desktop.showMessageBox({
286
- type: "warning",
287
- title: "Disconnect from Eliza Cloud",
288
- message: "The agent will need a local AI provider to continue working.",
289
- buttons: ["Disconnect", "Cancel"],
290
- defaultId: 0,
291
- cancelId: 1,
292
- });
293
- const raw =
294
- box && typeof box === "object" && "response" in box
295
- ? (box as { response: unknown }).response
296
- : box;
297
- const response =
298
- typeof raw === "number" && Number.isFinite(raw)
299
- ? raw
300
- : typeof raw === "bigint"
301
- ? Number(raw)
302
- : 1;
303
- if (response !== 0) {
304
- return { cancelled: true as const };
305
- }
306
- try {
307
- return await postCloudDisconnectFromMain({
308
- apiBaseOverride: params?.apiBase ?? null,
309
- bearerTokenOverride: params?.bearerToken ?? null,
310
- });
311
- } catch (err) {
312
- logger.error(
313
- `[RPC] agentCloudDisconnectWithConfirm failed: ${err instanceof Error ? err.message : String(err)}`,
314
- );
315
- throw err;
316
- }
317
- },
684
+ desktopGetRuntimeMode: async () => {
685
+ const runtimeMode = resolveDesktopRuntimeMode(
686
+ process.env as Record<string, string | undefined>,
687
+ );
688
+ return {
689
+ mode: runtimeMode.mode,
690
+ externalApiBase: runtimeMode.externalApi.base,
691
+ externalApiSource: runtimeMode.externalApi.source,
692
+ };
693
+ },
694
+ desktopHttpRequest,
318
695
 
319
- desktopGetRuntimeMode: async () => {
320
- const runtimeMode = resolveDesktopRuntimeMode(
321
- process.env as Record<string, string | undefined>,
322
- );
323
- return {
324
- mode: runtimeMode.mode,
325
- externalApiBase: runtimeMode.externalApi.base,
326
- externalApiSource: runtimeMode.externalApi.source,
327
- };
328
- },
329
- desktopHttpRequest,
696
+ // ---- Renderer diagnostics ----
697
+ rendererReportDiagnostic: async (
698
+ params?: {
699
+ level?: "log" | "info" | "warn" | "error";
700
+ source?: string;
701
+ message?: string;
702
+ details?: unknown;
703
+ } | null,
704
+ ) => {
705
+ const level = params?.level ?? "log";
706
+ const line = formatRendererDiagnosticLine(params);
707
+ switch (level) {
708
+ case "error":
709
+ logger.error(line);
710
+ break;
711
+ case "warn":
712
+ logger.warn(line);
713
+ break;
714
+ case "info":
715
+ logger.info(line);
716
+ break;
717
+ default:
718
+ logger.info(line);
719
+ break;
720
+ }
721
+ return { ok: true };
722
+ },
330
723
 
331
- // ---- Renderer diagnostics ----
332
- rendererReportDiagnostic: async (
333
- params?: {
334
- level?: "log" | "info" | "warn" | "error";
335
- source?: string;
336
- message?: string;
337
- details?: unknown;
338
- } | null,
339
- ) => {
340
- const level = params?.level ?? "log";
341
- const line = formatRendererDiagnosticLine(params);
342
- switch (level) {
343
- case "error":
344
- logger.error(line);
345
- break;
346
- case "warn":
347
- logger.warn(line);
348
- break;
349
- case "info":
350
- logger.info(line);
351
- break;
352
- default:
353
- logger.info(line);
354
- break;
355
- }
356
- return { ok: true };
357
- },
724
+ // ---- Desktop: Tray ----
725
+ desktopCreateTray: async (
726
+ params: Parameters<typeof desktop.createTray>[0],
727
+ ) => desktop.createTray(params),
728
+ desktopUpdateTray: async (
729
+ params: Parameters<typeof desktop.updateTray>[0],
730
+ ) => desktop.updateTray(params),
731
+ desktopDestroyTray: async () => desktop.destroyTray(),
732
+ desktopSetTrayMenu: async (
733
+ params: Parameters<typeof desktop.setTrayMenu>[0],
734
+ ) => desktop.setTrayMenu(params),
358
735
 
359
- // ---- Desktop: Tray ----
360
- desktopCreateTray: async (
361
- params: Parameters<typeof desktop.createTray>[0],
362
- ) => desktop.createTray(params),
363
- desktopUpdateTray: async (
364
- params: Parameters<typeof desktop.updateTray>[0],
365
- ) => desktop.updateTray(params),
366
- desktopDestroyTray: async () => desktop.destroyTray(),
367
- desktopSetTrayMenu: async (
368
- params: Parameters<typeof desktop.setTrayMenu>[0],
369
- ) => desktop.setTrayMenu(params),
736
+ // ---- Desktop: Shortcuts ----
737
+ desktopRegisterShortcut: async (
738
+ params: Parameters<typeof desktop.registerShortcut>[0],
739
+ ) => desktop.registerShortcut(params),
740
+ desktopUnregisterShortcut: async (
741
+ params: Parameters<typeof desktop.unregisterShortcut>[0],
742
+ ) => desktop.unregisterShortcut(params),
743
+ desktopUnregisterAllShortcuts: async () => desktop.unregisterAllShortcuts(),
744
+ desktopIsShortcutRegistered: async (
745
+ params: Parameters<typeof desktop.isShortcutRegistered>[0],
746
+ ) => desktop.isShortcutRegistered(params),
370
747
 
371
- // ---- Desktop: Shortcuts ----
372
- desktopRegisterShortcut: async (
373
- params: Parameters<typeof desktop.registerShortcut>[0],
374
- ) => desktop.registerShortcut(params),
375
- desktopUnregisterShortcut: async (
376
- params: Parameters<typeof desktop.unregisterShortcut>[0],
377
- ) => desktop.unregisterShortcut(params),
378
- desktopUnregisterAllShortcuts: async () => desktop.unregisterAllShortcuts(),
379
- desktopIsShortcutRegistered: async (
380
- params: Parameters<typeof desktop.isShortcutRegistered>[0],
381
- ) => desktop.isShortcutRegistered(params),
748
+ // ---- Desktop: Auto Launch ----
749
+ desktopSetAutoLaunch: async (
750
+ params: Parameters<typeof desktop.setAutoLaunch>[0],
751
+ ) => desktop.setAutoLaunch(params),
752
+ desktopGetAutoLaunchStatus: async () => desktop.getAutoLaunchStatus(),
382
753
 
383
- // ---- Desktop: Auto Launch ----
384
- desktopSetAutoLaunch: async (
385
- params: Parameters<typeof desktop.setAutoLaunch>[0],
386
- ) => desktop.setAutoLaunch(params),
387
- desktopGetAutoLaunchStatus: async () => desktop.getAutoLaunchStatus(),
754
+ // ---- Desktop: Window ----
755
+ desktopSetWindowOptions: async (
756
+ params: Parameters<typeof desktop.setWindowOptions>[0],
757
+ ) => desktop.setWindowOptions(params),
758
+ desktopGetWindowBounds: async () => desktop.getWindowBounds(),
759
+ desktopSetWindowBounds: async (
760
+ params: Parameters<typeof desktop.setWindowBounds>[0],
761
+ ) => desktop.setWindowBounds(params),
762
+ desktopMinimizeWindow: async () => desktop.minimizeWindow(),
763
+ desktopUnminimizeWindow: async () => desktop.unminimizeWindow(),
764
+ desktopMaximizeWindow: async () => desktop.maximizeWindow(),
765
+ desktopUnmaximizeWindow: async () => desktop.unmaximizeWindow(),
766
+ desktopCloseWindow: async () => desktop.closeWindow(),
767
+ desktopShowWindow: async () => desktop.showWindow(),
768
+ desktopHideWindow: async () => desktop.hideWindow(),
769
+ desktopFocusWindow: async () => desktop.focusWindow(),
770
+ desktopIsWindowMaximized: async () => desktop.isWindowMaximized(),
771
+ desktopIsWindowMinimized: async () => desktop.isWindowMinimized(),
772
+ desktopIsWindowVisible: async () => desktop.isWindowVisible(),
773
+ desktopIsWindowFocused: async () => desktop.isWindowFocused(),
774
+ desktopSetAlwaysOnTop: async (
775
+ params: Parameters<typeof desktop.setAlwaysOnTop>[0],
776
+ ) => desktop.setAlwaysOnTop(params),
777
+ desktopSetFullscreen: async (
778
+ params: Parameters<typeof desktop.setFullscreen>[0],
779
+ ) => desktop.setFullscreen(params),
780
+ desktopSetOpacity: async (
781
+ params: Parameters<typeof desktop.setOpacity>[0],
782
+ ) => desktop.setOpacity(params),
388
783
 
389
- // ---- Desktop: Window ----
390
- desktopSetWindowOptions: async (
391
- params: Parameters<typeof desktop.setWindowOptions>[0],
392
- ) => desktop.setWindowOptions(params),
393
- desktopGetWindowBounds: async () => desktop.getWindowBounds(),
394
- desktopSetWindowBounds: async (
395
- params: Parameters<typeof desktop.setWindowBounds>[0],
396
- ) => desktop.setWindowBounds(params),
397
- desktopMinimizeWindow: async () => desktop.minimizeWindow(),
398
- desktopUnminimizeWindow: async () => desktop.unminimizeWindow(),
399
- desktopMaximizeWindow: async () => desktop.maximizeWindow(),
400
- desktopUnmaximizeWindow: async () => desktop.unmaximizeWindow(),
401
- desktopCloseWindow: async () => desktop.closeWindow(),
402
- desktopShowWindow: async () => desktop.showWindow(),
403
- desktopHideWindow: async () => desktop.hideWindow(),
404
- desktopFocusWindow: async () => desktop.focusWindow(),
405
- desktopIsWindowMaximized: async () => desktop.isWindowMaximized(),
406
- desktopIsWindowMinimized: async () => desktop.isWindowMinimized(),
407
- desktopIsWindowVisible: async () => desktop.isWindowVisible(),
408
- desktopIsWindowFocused: async () => desktop.isWindowFocused(),
409
- desktopSetAlwaysOnTop: async (
410
- params: Parameters<typeof desktop.setAlwaysOnTop>[0],
411
- ) => desktop.setAlwaysOnTop(params),
412
- desktopSetFullscreen: async (
413
- params: Parameters<typeof desktop.setFullscreen>[0],
414
- ) => desktop.setFullscreen(params),
415
- desktopSetOpacity: async (
416
- params: Parameters<typeof desktop.setOpacity>[0],
417
- ) => desktop.setOpacity(params),
784
+ // ---- Desktop: Notifications ----
785
+ desktopShowNotification: async (
786
+ params: Parameters<typeof desktop.showNotification>[0],
787
+ ) => desktop.showNotification(params),
788
+ desktopCloseNotification: async (
789
+ params: Parameters<typeof desktop.closeNotification>[0],
790
+ ) => desktop.closeNotification(params),
791
+ desktopShowBackgroundNotice: async () => ({
792
+ shown: showBackgroundNoticeOnce({
793
+ fileSystem: fs,
794
+ userDataDir: Utils.paths.userData,
795
+ showNotification: (options) => {
796
+ Utils.showNotification(options);
797
+ },
798
+ }),
799
+ }),
418
800
 
419
- // ---- Desktop: Notifications ----
420
- desktopShowNotification: async (
421
- params: Parameters<typeof desktop.showNotification>[0],
422
- ) => desktop.showNotification(params),
423
- desktopCloseNotification: async (
424
- params: Parameters<typeof desktop.closeNotification>[0],
425
- ) => desktop.closeNotification(params),
426
- desktopShowBackgroundNotice: async () => ({
427
- shown: showBackgroundNoticeOnce({
428
- fileSystem: fs,
429
- userDataDir: Utils.paths.userData,
430
- showNotification: (options) => {
431
- Utils.showNotification(options);
432
- },
433
- }),
434
- }),
801
+ // ---- Desktop: Power ----
802
+ desktopGetPowerState: async () => desktop.getPowerState(),
435
803
 
436
- // ---- Desktop: Power ----
437
- desktopGetPowerState: async () => desktop.getPowerState(),
804
+ // ---- Desktop: App ----
805
+ desktopQuit: async () => desktop.quit(),
806
+ desktopRelaunch: async () => desktop.relaunch(),
807
+ desktopApplyUpdate: async () => desktop.applyUpdate(),
808
+ desktopCheckForUpdates: async () => desktop.checkForUpdates(),
809
+ desktopGetUpdaterState: async () => desktop.getUpdaterState(),
810
+ desktopGetVersion: async () => desktop.getVersion(),
811
+ desktopGetBuildInfo: async () => desktop.getBuildInfo(),
812
+ desktopIsPackaged: async () => desktop.isPackaged(),
813
+ desktopGetDockIconVisibility: async () => desktop.getDockIconVisibility(),
814
+ desktopSetDockIconVisibility: async (
815
+ params: Parameters<typeof desktop.setDockIconVisibility>[0],
816
+ ) => desktop.setDockIconVisibility(params),
817
+ desktopGetPath: async (params: Parameters<typeof desktop.getPath>[0]) =>
818
+ desktop.getPath(params),
819
+ desktopGetStartupDiagnostics: async () => desktop.getStartupDiagnostics(),
820
+ desktopOpenLogsFolder: async () => desktop.openLogsFolder(),
821
+ desktopCreateBugReportBundle: async (
822
+ params: Parameters<typeof desktop.createBugReportBundle>[0],
823
+ ) => desktop.createBugReportBundle(params),
824
+ desktopBeep: async () => desktop.beep(),
825
+ desktopShowSelectionContextMenu: async (
826
+ params: Parameters<typeof desktop.showSelectionContextMenu>[0],
827
+ ) => desktop.showSelectionContextMenu(params),
828
+ desktopGetSessionSnapshot: async (
829
+ params: Parameters<typeof desktop.getSessionSnapshot>[0],
830
+ ) => desktop.getSessionSnapshot(params),
831
+ desktopClearSessionData: async (
832
+ params: Parameters<typeof desktop.clearSessionData>[0],
833
+ ) => desktop.clearSessionData(params),
834
+ desktopGetWebGpuBrowserStatus: async () => desktop.getWebGpuBrowserStatus(),
835
+ desktopOpenReleaseNotesWindow: async (
836
+ params: Parameters<typeof desktop.openReleaseNotesWindow>[0],
837
+ ) => desktop.openReleaseNotesWindow(params),
838
+ ...buildWindowRpcHandlers({
839
+ desktop,
840
+ appName: getBrandConfig().appName,
841
+ }),
438
842
 
439
- // ---- Desktop: App ----
440
- desktopQuit: async () => desktop.quit(),
441
- desktopRelaunch: async () => desktop.relaunch(),
442
- desktopApplyUpdate: async () => desktop.applyUpdate(),
443
- desktopCheckForUpdates: async () => desktop.checkForUpdates(),
444
- desktopGetUpdaterState: async () => desktop.getUpdaterState(),
445
- desktopGetVersion: async () => desktop.getVersion(),
446
- desktopGetBuildInfo: async () => desktop.getBuildInfo(),
447
- desktopIsPackaged: async () => desktop.isPackaged(),
448
- desktopGetDockIconVisibility: async () => desktop.getDockIconVisibility(),
449
- desktopSetDockIconVisibility: async (
450
- params: Parameters<typeof desktop.setDockIconVisibility>[0],
451
- ) => desktop.setDockIconVisibility(params),
452
- desktopGetPath: async (params: Parameters<typeof desktop.getPath>[0]) =>
453
- desktop.getPath(params),
454
- desktopGetStartupDiagnostics: async () => desktop.getStartupDiagnostics(),
455
- desktopOpenLogsFolder: async () => desktop.openLogsFolder(),
456
- desktopCreateBugReportBundle: async (
457
- params: Parameters<typeof desktop.createBugReportBundle>[0],
458
- ) => desktop.createBugReportBundle(params),
459
- desktopBeep: async () => desktop.beep(),
460
- desktopShowSelectionContextMenu: async (
461
- params: Parameters<typeof desktop.showSelectionContextMenu>[0],
462
- ) => desktop.showSelectionContextMenu(params),
463
- desktopGetSessionSnapshot: async (
464
- params: Parameters<typeof desktop.getSessionSnapshot>[0],
465
- ) => desktop.getSessionSnapshot(params),
466
- desktopClearSessionData: async (
467
- params: Parameters<typeof desktop.clearSessionData>[0],
468
- ) => desktop.clearSessionData(params),
469
- desktopGetWebGpuBrowserStatus: async () => desktop.getWebGpuBrowserStatus(),
470
- desktopOpenReleaseNotesWindow: async (
471
- params: Parameters<typeof desktop.openReleaseNotesWindow>[0],
472
- ) => desktop.openReleaseNotesWindow(params),
473
- desktopOpenSettingsWindow: async (
474
- params: { tabHint?: string } | undefined,
475
- ) => {
476
- desktop.openSettings(params?.tabHint);
477
- },
478
- desktopOpenSurfaceWindow: async (params: {
479
- surface:
480
- | "chat"
481
- | "browser"
482
- | "release"
483
- | "triggers"
484
- | "plugins"
485
- | "connectors"
486
- | "cloud";
487
- browse?: string;
488
- alwaysOnTop?: boolean;
489
- }) => {
490
- if (!isDetachedSurface(params.surface)) {
491
- return null;
492
- }
493
- return desktop.openSurfaceWindow(
494
- params.surface,
495
- params.surface === "browser" ? params.browse : undefined,
496
- params.alwaysOnTop === true,
497
- );
498
- },
499
- desktopOpenAppWindow: async (params: {
500
- slug?: string;
501
- title: string;
502
- path: string;
503
- alwaysOnTop?: boolean;
504
- }) =>
505
- desktop.openAppWindow({
506
- slug:
507
- typeof params.slug === "string" && params.slug.length > 0
508
- ? params.slug
509
- : undefined,
510
- title: params.title.trim() || getBrandConfig().appName,
511
- path: normalizeRendererRoutePath(params.path),
512
- alwaysOnTop: params.alwaysOnTop === true,
513
- }),
514
- desktopSetManagedWindowAlwaysOnTop: async (params: {
515
- id: string;
516
- flag: boolean;
517
- }) => ({
518
- success: desktop.setManagedWindowAlwaysOnTop(params.id, params.flag),
519
- }),
843
+ // ---- Remote Plugins ----
844
+ remotePluginGetStoreRoot: async () => ({
845
+ storeRoot: remotePluginHost.getStoreRoot(),
846
+ }),
847
+ remotePluginList: async () => ({
848
+ remotePlugins: remotePluginHost.listRemotePlugins(),
849
+ }),
850
+ remotePluginGetStoreSnapshot: async () =>
851
+ remotePluginHost.getStoreSnapshot(),
852
+ remotePluginGet: async (params: { id: string }) =>
853
+ remotePluginHost.getRemotePlugin(params.id),
854
+ remotePluginInstallFromDirectory: async (params) =>
855
+ remotePluginHost.installFromDirectory(params),
856
+ remotePluginUninstall: async (params: { id: string }) =>
857
+ remotePluginHost.uninstall(params.id),
858
+ remotePluginStartWorker: async (params: { id: string }) => {
859
+ setFirstPartyRemotePluginDisabled(params.id, false, remotePluginHost);
860
+ return remotePluginHost.startWorker(params.id);
861
+ },
862
+ remotePluginStopWorker: async (params: { id: string }) => {
863
+ setFirstPartyRemotePluginDisabled(params.id, true, remotePluginHost);
864
+ return remotePluginHost.stopWorker(params.id);
865
+ },
866
+ remotePluginGetWorkerStatus: async (params: { id: string }) =>
867
+ remotePluginHost.getWorkerStatus(params.id),
868
+ remotePluginListWorkerStatuses: async () => ({
869
+ workers: remotePluginHost.listWorkerStatuses(),
870
+ }),
871
+ remotePluginGetLogs: async (params) =>
872
+ remotePluginHost.getLogs(params.id, params.maxBytes),
873
+ remotePluginInvokeWorker: async (params) =>
874
+ remotePluginHost.invokeWorker(params),
875
+ remotePluginTailWorkerEvents: async (params) =>
876
+ remotePluginHost.tailWorkerEvents(params),
877
+ ...buildDynamicViewRpcHandlers({
878
+ registry: dynamicViewRegistry,
879
+ sessions: dynamicViewSessions,
880
+ }),
881
+ traceSessionStart: async (params) => traceService.startSession(params),
882
+ traceSessionComplete: async (params) =>
883
+ traceService.completeSession(params),
884
+ traceSessionCancel: async (params) => traceService.cancelSession(params),
885
+ traceSessionError: async (params) => traceService.errorSession(params),
886
+ traceEventRecord: async (params) => traceService.recordEvent(params),
887
+ traceSessionList: async (params) => ({
888
+ sessions: await traceService.listSessions(params),
889
+ }),
890
+ traceSessionGet: async (params) => traceService.getSession(params),
891
+ traceSessionSummary: async (params) =>
892
+ traceService.summarizeSession(params),
893
+ traceEventsTail: async (params) => traceService.tailEvents(params),
894
+ traceEventsSearch: async (params) => ({
895
+ events: await traceService.searchEvents(params ?? {}),
896
+ }),
897
+ traceViewOpen: async (params) => traceService.openTraceView(params),
898
+ voiceStatus: async () => voiceService.status(),
899
+ voiceComponents: async () => ({
900
+ components: await voiceService.components(),
901
+ }),
902
+ voiceStart: async (params) => voiceService.start(params ?? {}),
903
+ voiceStop: async (params) => voiceService.stop(params ?? {}),
904
+ voiceInterrupt: async (params) => voiceService.interrupt(params ?? {}),
905
+ voiceInjectTranscript: async (params) =>
906
+ voiceService.injectTranscript(params),
907
+ voiceSpeak: async (params) => voiceService.speak(params),
908
+ voiceTranscribeAudio: async (params) =>
909
+ voiceService.transcribeAudio(params),
910
+ voiceSynthesizeSpeech: async (params) =>
911
+ voiceService.synthesizeSpeech(params),
912
+ voiceLatency: async () => voiceService.latency(),
913
+ voiceRecentTurns: async (params) => ({
914
+ turns: await voiceService.recentTurns(params ?? {}),
915
+ }),
520
916
 
521
- // ---- Browser Workspace ----
522
- browserWorkspaceGetSnapshot: async () => ({
523
- mode: "desktop" as const,
524
- tabs: (await browserWorkspace.listTabs()).tabs,
525
- }),
526
- browserWorkspaceOpenTab: async (
527
- params?: {
528
- url?: string;
529
- title?: string;
530
- show?: boolean;
531
- partition?: string;
532
- connectorProvider?: string;
533
- connectorAccountId?: string;
534
- kind?: "internal" | "standard";
535
- width?: number;
536
- height?: number;
537
- } | null,
538
- ) => ({
539
- tab: await browserWorkspace.openTab({
540
- url: params?.url,
541
- title: params?.title,
542
- show: params?.show,
543
- partition: params?.partition,
544
- connectorProvider: params?.connectorProvider,
545
- connectorAccountId: params?.connectorAccountId,
546
- kind: params?.kind,
547
- width: params?.width,
548
- height: params?.height,
549
- }),
550
- }),
551
- browserWorkspaceNavigateTab: async (
552
- params?: { id?: string; url?: string } | null,
553
- ) => {
554
- const id = params?.id?.trim();
555
- const url = params?.url?.trim();
556
- if (!id || !url) {
557
- throw new Error("browser workspace navigate requires id and url");
558
- }
559
- const tab = await browserWorkspace.navigateTab({ id, url });
560
- if (!tab) {
561
- throw new Error(`browser workspace tab not found: ${id}`);
562
- }
563
- return { tab };
564
- },
565
- browserWorkspaceShowTab: async (params?: { id?: string } | null) => {
566
- const id = params?.id?.trim();
567
- if (!id) {
568
- throw new Error("browser workspace show requires id");
569
- }
570
- const tab = await browserWorkspace.showTab({ id });
571
- if (!tab) {
572
- throw new Error(`browser workspace tab not found: ${id}`);
573
- }
574
- return { tab };
575
- },
576
- browserWorkspaceHideTab: async (params?: { id?: string } | null) => {
577
- const id = params?.id?.trim();
578
- if (!id) {
579
- throw new Error("browser workspace hide requires id");
580
- }
581
- const tab = await browserWorkspace.hideTab({ id });
582
- if (!tab) {
583
- throw new Error(`browser workspace tab not found: ${id}`);
584
- }
585
- return { tab };
586
- },
587
- browserWorkspaceCloseTab: async (params?: { id?: string } | null) => {
588
- const id = params?.id?.trim();
589
- if (!id) {
590
- throw new Error("browser workspace close requires id");
591
- }
592
- return { closed: await browserWorkspace.closeTab({ id }) };
593
- },
594
- browserWorkspaceSnapshotTab: async (params?: { id?: string } | null) => {
595
- const id = params?.id?.trim();
596
- if (!id) {
597
- throw new Error("browser workspace snapshot requires id");
598
- }
599
- const snapshot = await browserWorkspace.snapshotTab({ id });
600
- if (!snapshot) {
601
- throw new Error("browser workspace snapshot unavailable");
602
- }
603
- return snapshot;
604
- },
917
+ // ---- Browser Workspace ----
918
+ browserWorkspaceGetSnapshot: async () => ({
919
+ mode: "desktop" as const,
920
+ tabs: (await browserWorkspace.listTabs()).tabs,
921
+ }),
922
+ browserWorkspaceOpenTab: async (
923
+ params?: {
924
+ url?: string;
925
+ title?: string;
926
+ show?: boolean;
927
+ partition?: string;
928
+ connectorProvider?: string;
929
+ connectorAccountId?: string;
930
+ kind?: "internal" | "standard";
931
+ width?: number;
932
+ height?: number;
933
+ } | null,
934
+ ) => ({
935
+ tab: await browserWorkspace.openTab({
936
+ url: params?.url,
937
+ title: params?.title,
938
+ show: params?.show,
939
+ partition: params?.partition,
940
+ connectorProvider: params?.connectorProvider,
941
+ connectorAccountId: params?.connectorAccountId,
942
+ kind: params?.kind,
943
+ width: params?.width,
944
+ height: params?.height,
945
+ }),
946
+ }),
947
+ browserWorkspaceNavigateTab: async (
948
+ params?: { id?: string; url?: string } | null,
949
+ ) => {
950
+ const id = params?.id?.trim();
951
+ const url = params?.url?.trim();
952
+ if (!id || !url) {
953
+ throw new Error("browser workspace navigate requires id and url");
954
+ }
955
+ const tab = await browserWorkspace.navigateTab({ id, url });
956
+ if (!tab) {
957
+ throw new Error(`browser workspace tab not found: ${id}`);
958
+ }
959
+ return { tab };
960
+ },
961
+ browserWorkspaceShowTab: async (params?: { id?: string } | null) => {
962
+ const id = params?.id?.trim();
963
+ if (!id) {
964
+ throw new Error("browser workspace show requires id");
965
+ }
966
+ const tab = await browserWorkspace.showTab({ id });
967
+ if (!tab) {
968
+ throw new Error(`browser workspace tab not found: ${id}`);
969
+ }
970
+ return { tab };
971
+ },
972
+ browserWorkspaceHideTab: async (params?: { id?: string } | null) => {
973
+ const id = params?.id?.trim();
974
+ if (!id) {
975
+ throw new Error("browser workspace hide requires id");
976
+ }
977
+ const tab = await browserWorkspace.hideTab({ id });
978
+ if (!tab) {
979
+ throw new Error(`browser workspace tab not found: ${id}`);
980
+ }
981
+ return { tab };
982
+ },
983
+ browserWorkspaceCloseTab: async (params?: { id?: string } | null) => {
984
+ const id = params?.id?.trim();
985
+ if (!id) {
986
+ throw new Error("browser workspace close requires id");
987
+ }
988
+ return { closed: await browserWorkspace.closeTab({ id }) };
989
+ },
990
+ browserWorkspaceSnapshotTab: async (params?: { id?: string } | null) => {
991
+ const id = params?.id?.trim();
992
+ if (!id) {
993
+ throw new Error("browser workspace snapshot requires id");
994
+ }
995
+ const snapshot = await browserWorkspace.snapshotTab({ id });
996
+ if (!snapshot) {
997
+ throw new Error("browser workspace snapshot unavailable");
998
+ }
999
+ return snapshot;
1000
+ },
605
1001
 
606
- // ---- Desktop: Screen ----
607
- desktopGetPrimaryDisplay: async () => desktop.getPrimaryDisplay(),
608
- desktopGetAllDisplays: async () => desktop.getAllDisplays(),
609
- desktopGetCursorPosition: async () => desktop.getCursorPosition(),
1002
+ // ---- Desktop: Screen ----
1003
+ desktopGetPrimaryDisplay: async () => desktop.getPrimaryDisplay(),
1004
+ desktopGetAllDisplays: async () => desktop.getAllDisplays(),
1005
+ desktopGetCursorPosition: async () => desktop.getCursorPosition(),
610
1006
 
611
- // ---- Desktop: Message Box ----
612
- desktopShowMessageBox: async (
613
- params: Parameters<typeof desktop.showMessageBox>[0],
614
- ) => desktop.showMessageBox(params),
1007
+ // ---- Desktop: Message Box ----
1008
+ desktopShowMessageBox: async (
1009
+ params: Parameters<typeof desktop.showMessageBox>[0],
1010
+ ) => desktop.showMessageBox(params),
615
1011
 
616
- // ---- Desktop: Clipboard ----
617
- desktopWriteToClipboard: async (
618
- params: Parameters<typeof desktop.writeToClipboard>[0],
619
- ) => desktop.writeToClipboard(params),
620
- desktopReadFromClipboard: async () => desktop.readFromClipboard(),
621
- desktopClearClipboard: async () => desktop.clearClipboard(),
622
- desktopClipboardAvailableFormats: async () =>
623
- desktop.clipboardAvailableFormats(),
1012
+ // ---- Desktop: Clipboard ----
1013
+ desktopWriteToClipboard: async (
1014
+ params: Parameters<typeof desktop.writeToClipboard>[0],
1015
+ ) => desktop.writeToClipboard(params),
1016
+ desktopReadFromClipboard: async () => desktop.readFromClipboard(),
1017
+ desktopClearClipboard: async () => desktop.clearClipboard(),
1018
+ desktopClipboardAvailableFormats: async () =>
1019
+ desktop.clipboardAvailableFormats(),
624
1020
 
625
- // ---- Desktop: Shell ----
626
- desktopOpenExternal: async (
627
- params: Parameters<typeof desktop.openExternal>[0],
628
- ) => desktop.openExternal(params),
629
- desktopShowItemInFolder: async (
630
- params: Parameters<typeof desktop.showItemInFolder>[0],
631
- ) => desktop.showItemInFolder(params),
632
- desktopOpenPath: async (params: Parameters<typeof desktop.openPath>[0]) =>
633
- desktop.openPath(params),
1021
+ // ---- Desktop: Shell ----
1022
+ desktopOpenExternal: async (
1023
+ params: Parameters<typeof desktop.openExternal>[0],
1024
+ ) => desktop.openExternal(params),
1025
+ desktopShowItemInFolder: async (
1026
+ params: Parameters<typeof desktop.showItemInFolder>[0],
1027
+ ) => desktop.showItemInFolder(params),
1028
+ desktopOpenPath: async (params: Parameters<typeof desktop.openPath>[0]) =>
1029
+ desktop.openPath(params),
634
1030
 
635
- // ---- Desktop: File Dialogs ----
636
- desktopShowOpenDialog: async (
637
- params: Parameters<typeof desktop.showOpenDialog>[0],
638
- ) => desktop.showOpenDialog(params),
639
- desktopShowSaveDialog: async (
640
- params: Parameters<typeof desktop.showSaveDialog>[0],
641
- ) => desktop.showSaveDialog(params),
642
- desktopPickWorkspaceFolder: async (
643
- params: Parameters<typeof desktop.pickWorkspaceFolder>[0],
644
- ) => desktop.pickWorkspaceFolder(params),
645
- desktopResolveWorkspaceFolderBookmark: async (
646
- params: Parameters<typeof desktop.resolveWorkspaceFolderBookmark>[0],
647
- ) => desktop.resolveWorkspaceFolderBookmark(params),
648
- desktopReleaseWorkspaceFolderBookmarks: async () =>
649
- desktop.releaseWorkspaceFolderBookmarks(),
1031
+ // ---- Desktop: File Dialogs ----
1032
+ desktopShowOpenDialog: async (
1033
+ params: Parameters<typeof desktop.showOpenDialog>[0],
1034
+ ) => desktop.showOpenDialog(params),
1035
+ desktopShowSaveDialog: async (
1036
+ params: Parameters<typeof desktop.showSaveDialog>[0],
1037
+ ) => desktop.showSaveDialog(params),
1038
+ desktopPickWorkspaceFolder: async (
1039
+ params: Parameters<typeof desktop.pickWorkspaceFolder>[0],
1040
+ ) => desktop.pickWorkspaceFolder(params),
1041
+ desktopResolveWorkspaceFolderBookmark: async (
1042
+ params: Parameters<typeof desktop.resolveWorkspaceFolderBookmark>[0],
1043
+ ) => desktop.resolveWorkspaceFolderBookmark(params),
1044
+ desktopReleaseWorkspaceFolderBookmarks: async () =>
1045
+ desktop.releaseWorkspaceFolderBookmarks(),
650
1046
 
651
- // ---- Gateway ----
652
- gatewayStartDiscovery: async (
653
- params: Parameters<typeof gateway.startDiscovery>[0] | undefined,
654
- ) => gateway.startDiscovery(params || undefined),
655
- gatewayStopDiscovery: async () => gateway.stopDiscovery(),
656
- gatewayIsDiscovering: async () => ({
657
- isDiscovering: gateway.isDiscoveryActive(),
658
- }),
659
- gatewayGetDiscoveredGateways: async () => ({
660
- gateways: gateway.getDiscoveredGateways(),
661
- }),
1047
+ // ---- Gateway ----
1048
+ gatewayStartDiscovery: async (
1049
+ params: Parameters<typeof gateway.startDiscovery>[0] | undefined,
1050
+ ) => gateway.startDiscovery(params || undefined),
1051
+ gatewayStopDiscovery: async () => gateway.stopDiscovery(),
1052
+ gatewayIsDiscovering: async () => ({
1053
+ isDiscovering: gateway.isDiscoveryActive(),
1054
+ }),
1055
+ gatewayGetDiscoveredGateways: async () => ({
1056
+ gateways: gateway.getDiscoveredGateways(),
1057
+ }),
662
1058
 
663
- // ---- Permissions ----
664
- permissionsCheck: async (params: {
665
- id: Parameters<typeof permissions.checkPermission>[0];
666
- forceRefresh?: boolean;
667
- }) => {
668
- if (isRuntimePermissionId(params.id)) {
669
- const runtimePermission = await fetchRuntimePermissionState(
670
- agent.getPort(),
671
- params.id,
672
- );
673
- return (
674
- runtimePermission ??
675
- buildRuntimePermissionUnavailableState(
676
- params.id,
677
- `${getBrandConfig().appName} runtime is unavailable, so website blocking permission cannot be checked from desktop right now.`,
678
- )
679
- );
680
- }
681
- return permissions.checkPermission(params.id, params.forceRefresh);
682
- },
683
- permissionsCheckFeature: async (params: {
684
- featureId: Parameters<typeof permissions.checkFeaturePermissions>[0];
685
- }) => {
686
- if (params.featureId === "website-blocker") {
687
- const runtimePermission = await fetchRuntimePermissionState(
688
- agent.getPort(),
689
- "website-blocking",
690
- );
691
- const granted =
692
- runtimePermission?.status === "granted" ||
693
- runtimePermission?.status === "not-applicable";
694
- return {
695
- granted,
696
- missing: granted ? [] : ["website-blocking"],
697
- };
698
- }
699
- return permissions.checkFeaturePermissions(params.featureId);
700
- },
701
- permissionsRequest: async (params: {
702
- id: Parameters<typeof permissions.requestPermission>[0];
703
- }) => {
704
- if (isRuntimePermissionId(params.id)) {
705
- const runtimePermission = await fetchRuntimePermissionState(
706
- agent.getPort(),
707
- params.id,
708
- "request",
709
- );
710
- const nextPermissions = await permissions.checkAllPermissions();
711
- await syncPermissionsToRestApi(agent.getPort(), nextPermissions);
712
- return (
713
- runtimePermission ??
714
- buildRuntimePermissionUnavailableState(
715
- params.id,
716
- `${getBrandConfig().appName} runtime is unavailable, so website blocking permission cannot be requested from desktop right now.`,
717
- )
718
- );
719
- }
720
- const result = await permissions.requestPermission(params.id);
721
- await syncPermissionsToRestApi(
722
- agent.getPort(),
723
- await permissions.checkAllPermissions(),
724
- );
725
- return result;
726
- },
727
- permissionsGetAll: async (
728
- params: { forceRefresh?: boolean } | undefined,
729
- ) => {
730
- const result = await mergeRuntimePermissionStates(
731
- agent.getPort(),
732
- await permissions.checkAllPermissions(params?.forceRefresh),
733
- );
734
- await syncPermissionsToRestApi(agent.getPort(), result);
735
- return result;
736
- },
737
- permissionsGetPlatform: async () => process.platform,
738
- permissionsIsShellEnabled: async () => permissions.isShellEnabled(),
739
- permissionsSetShellEnabled: async (params: { enabled: boolean }) => {
740
- permissions.setShellEnabled(params.enabled);
741
- return permissions.checkPermission("shell");
742
- },
743
- permissionsClearCache: async () => permissions.clearCache(),
744
- permissionsOpenSettings: async (params: {
745
- id: Parameters<typeof permissions.openSettings>[0];
746
- }) => {
747
- if (isRuntimePermissionId(params.id)) {
748
- const runtimePermission = await fetchRuntimePermissionState(
749
- agent.getPort(),
750
- params.id,
751
- "open-settings",
752
- );
753
- if (runtimePermission) {
754
- return;
755
- }
756
- throw new Error(
757
- `${getBrandConfig().appName} runtime is unavailable, so website blocking permission help could not be opened from desktop.`,
758
- );
759
- }
760
- return permissions.openSettings(params.id);
761
- },
1059
+ // ---- Permissions ----
1060
+ permissionsCheck: async (params: {
1061
+ id: Parameters<typeof permissions.checkPermission>[0];
1062
+ forceRefresh?: boolean;
1063
+ }) => {
1064
+ if (isRuntimePermissionId(params.id)) {
1065
+ const runtimePermission = await fetchRuntimePermissionState(
1066
+ agent.getPort(),
1067
+ params.id,
1068
+ );
1069
+ return (
1070
+ runtimePermission ??
1071
+ buildRuntimePermissionUnavailableState(
1072
+ params.id,
1073
+ `${getBrandConfig().appName} runtime is unavailable, so website blocking permission cannot be checked from desktop right now.`,
1074
+ )
1075
+ );
1076
+ }
1077
+ return permissions.checkPermission(params.id, params.forceRefresh);
1078
+ },
1079
+ permissionsCheckFeature: async (params: {
1080
+ featureId: Parameters<typeof permissions.checkFeaturePermissions>[0];
1081
+ }) => {
1082
+ if (params.featureId === "website-blocker") {
1083
+ const runtimePermission = await fetchRuntimePermissionState(
1084
+ agent.getPort(),
1085
+ "website-blocking",
1086
+ );
1087
+ const granted =
1088
+ runtimePermission?.status === "granted" ||
1089
+ runtimePermission?.status === "not-applicable";
1090
+ return {
1091
+ granted,
1092
+ missing: granted ? [] : ["website-blocking"],
1093
+ };
1094
+ }
1095
+ return permissions.checkFeaturePermissions(params.featureId);
1096
+ },
1097
+ permissionsRequest: async (params: {
1098
+ id: Parameters<typeof permissions.requestPermission>[0];
1099
+ }) => {
1100
+ if (isRuntimePermissionId(params.id)) {
1101
+ const runtimePermission = await fetchRuntimePermissionState(
1102
+ agent.getPort(),
1103
+ params.id,
1104
+ "request",
1105
+ );
1106
+ const nextPermissions = await permissions.checkAllPermissions();
1107
+ await syncPermissionsToRestApi(agent.getPort(), nextPermissions);
1108
+ return (
1109
+ runtimePermission ??
1110
+ buildRuntimePermissionUnavailableState(
1111
+ params.id,
1112
+ `${getBrandConfig().appName} runtime is unavailable, so website blocking permission cannot be requested from desktop right now.`,
1113
+ )
1114
+ );
1115
+ }
1116
+ const result = await permissions.requestPermission(params.id);
1117
+ await syncPermissionsToRestApi(
1118
+ agent.getPort(),
1119
+ await permissions.checkAllPermissions(),
1120
+ );
1121
+ return result;
1122
+ },
1123
+ permissionsGetAll: async (
1124
+ params: { forceRefresh?: boolean } | undefined,
1125
+ ) => {
1126
+ const result = await mergeRuntimePermissionStates(
1127
+ agent.getPort(),
1128
+ await permissions.checkAllPermissions(params?.forceRefresh),
1129
+ );
1130
+ await syncPermissionsToRestApi(agent.getPort(), result);
1131
+ return result;
1132
+ },
1133
+ permissionsGetPlatform: async () => process.platform,
1134
+ permissionsIsShellEnabled: async () => permissions.isShellEnabled(),
1135
+ permissionsSetShellEnabled: async (params: { enabled: boolean }) => {
1136
+ permissions.setShellEnabled(params.enabled);
1137
+ return permissions.checkPermission("shell");
1138
+ },
1139
+ permissionsClearCache: async () => permissions.clearCache(),
1140
+ permissionsOpenSettings: async (params: {
1141
+ id: Parameters<typeof permissions.openSettings>[0];
1142
+ }) => {
1143
+ if (isRuntimePermissionId(params.id)) {
1144
+ const runtimePermission = await fetchRuntimePermissionState(
1145
+ agent.getPort(),
1146
+ params.id,
1147
+ "open-settings",
1148
+ );
1149
+ if (runtimePermission) {
1150
+ return;
1151
+ }
1152
+ throw new Error(
1153
+ `${getBrandConfig().appName} runtime is unavailable, so website blocking permission help could not be opened from desktop.`,
1154
+ );
1155
+ }
1156
+ return permissions.openSettings(params.id);
1157
+ },
762
1158
 
763
- // ---- Location ----
764
- locationGetCurrentPosition: async () => location.getCurrentPosition(),
765
- locationWatchPosition: async (
766
- params: Parameters<typeof location.watchPosition>[0],
767
- ) => location.watchPosition(params),
768
- locationClearWatch: async (
769
- params: Parameters<typeof location.clearWatch>[0],
770
- ) => location.clearWatch(params),
771
- locationGetLastKnownLocation: async () => location.getLastKnownLocation(),
1159
+ // ---- Location ----
1160
+ locationGetCurrentPosition: async () => location.getCurrentPosition(),
1161
+ locationWatchPosition: async (
1162
+ params: Parameters<typeof location.watchPosition>[0],
1163
+ ) => location.watchPosition(params),
1164
+ locationClearWatch: async (
1165
+ params: Parameters<typeof location.clearWatch>[0],
1166
+ ) => location.clearWatch(params),
1167
+ locationGetLastKnownLocation: async () => location.getLastKnownLocation(),
772
1168
 
773
- // ---- Camera ----
774
- cameraGetDevices: async () => camera.getDevices(),
775
- cameraStartPreview: async (
776
- params: Parameters<typeof camera.startPreview>[0],
777
- ) => camera.startPreview(params),
778
- cameraStopPreview: async () => camera.stopPreview(),
779
- cameraSwitchCamera: async (
780
- params: Parameters<typeof camera.switchCamera>[0],
781
- ) => camera.switchCamera(params),
782
- cameraCapturePhoto: async () => camera.capturePhoto(),
783
- cameraStartRecording: async () => camera.startRecording(),
784
- cameraStopRecording: async () => camera.stopRecording(),
785
- cameraGetRecordingState: async () => camera.getRecordingState(),
786
- cameraCheckPermissions: async () => camera.checkPermissions(),
787
- cameraRequestPermissions: async () => camera.requestPermissions(),
1169
+ // ---- Camera ----
1170
+ cameraGetDevices: async () => camera.getDevices(),
1171
+ cameraStartPreview: async (
1172
+ params: Parameters<typeof camera.startPreview>[0],
1173
+ ) => camera.startPreview(params),
1174
+ cameraStopPreview: async () => camera.stopPreview(),
1175
+ cameraSwitchCamera: async (
1176
+ params: Parameters<typeof camera.switchCamera>[0],
1177
+ ) => camera.switchCamera(params),
1178
+ cameraCapturePhoto: async () => camera.capturePhoto(),
1179
+ cameraStartRecording: async () => camera.startRecording(),
1180
+ cameraStopRecording: async () => camera.stopRecording(),
1181
+ cameraGetRecordingState: async () => camera.getRecordingState(),
1182
+ cameraCheckPermissions: async () => camera.checkPermissions(),
1183
+ cameraRequestPermissions: async () => camera.requestPermissions(),
788
1184
 
789
- // ---- Canvas ----
790
- canvasCreateWindow: async (
791
- params: Parameters<typeof canvas.createWindow>[0],
792
- ) => canvas.createWindow(params),
793
- canvasDestroyWindow: async (
794
- params: Parameters<typeof canvas.destroyWindow>[0],
795
- ) => canvas.destroyWindow(params),
796
- canvasNavigate: async (params: Parameters<typeof canvas.navigate>[0]) =>
797
- canvas.navigate(params),
798
- canvasEval: async (params: Parameters<typeof canvas.eval>[0]) =>
799
- canvas.eval(params),
800
- canvasSnapshot: async (params: Parameters<typeof canvas.snapshot>[0]) =>
801
- canvas.snapshot(params),
802
- canvasA2uiPush: async (params: Parameters<typeof canvas.a2uiPush>[0]) =>
803
- canvas.a2uiPush(params),
804
- canvasA2uiReset: async (params: Parameters<typeof canvas.a2uiReset>[0]) =>
805
- canvas.a2uiReset(params),
806
- canvasShow: async (params: Parameters<typeof canvas.show>[0]) =>
807
- canvas.show(params),
808
- canvasHide: async (params: Parameters<typeof canvas.hide>[0]) =>
809
- canvas.hide(params),
810
- canvasResize: async (params: Parameters<typeof canvas.resize>[0]) =>
811
- canvas.resize(params),
812
- canvasFocus: async (params: Parameters<typeof canvas.focus>[0]) =>
813
- canvas.focus(params),
814
- canvasGetBounds: async (params: Parameters<typeof canvas.getBounds>[0]) =>
815
- canvas.getBounds(params),
816
- canvasSetBounds: async (params: Parameters<typeof canvas.setBounds>[0]) =>
817
- canvas.setBounds(params),
818
- canvasSetAlwaysOnTop: async (
819
- params: Parameters<typeof canvas.setAlwaysOnTop>[0],
820
- ) => canvas.setAlwaysOnTop(params),
821
- canvasListWindows: async () => canvas.listWindows(),
1185
+ // ---- Canvas ----
1186
+ canvasCreateWindow: async (
1187
+ params: Parameters<typeof canvas.createWindow>[0],
1188
+ ) => canvas.createWindow(params),
1189
+ canvasDestroyWindow: async (
1190
+ params: Parameters<typeof canvas.destroyWindow>[0],
1191
+ ) => canvas.destroyWindow(params),
1192
+ canvasNavigate: async (params: Parameters<typeof canvas.navigate>[0]) =>
1193
+ canvas.navigate(params),
1194
+ canvasEval: async (params: Parameters<typeof canvas.eval>[0]) =>
1195
+ canvas.eval(params),
1196
+ canvasSnapshot: async (params: Parameters<typeof canvas.snapshot>[0]) =>
1197
+ canvas.snapshot(params),
1198
+ canvasA2uiPush: async (params: Parameters<typeof canvas.a2uiPush>[0]) =>
1199
+ canvas.a2uiPush(params),
1200
+ canvasA2uiReset: async (params: Parameters<typeof canvas.a2uiReset>[0]) =>
1201
+ canvas.a2uiReset(params),
1202
+ canvasShow: async (params: Parameters<typeof canvas.show>[0]) =>
1203
+ canvas.show(params),
1204
+ canvasHide: async (params: Parameters<typeof canvas.hide>[0]) =>
1205
+ canvas.hide(params),
1206
+ canvasResize: async (params: Parameters<typeof canvas.resize>[0]) =>
1207
+ canvas.resize(params),
1208
+ canvasFocus: async (params: Parameters<typeof canvas.focus>[0]) =>
1209
+ canvas.focus(params),
1210
+ canvasGetBounds: async (params: Parameters<typeof canvas.getBounds>[0]) =>
1211
+ canvas.getBounds(params),
1212
+ canvasSetBounds: async (params: Parameters<typeof canvas.setBounds>[0]) =>
1213
+ canvas.setBounds(params),
1214
+ canvasSetAlwaysOnTop: async (
1215
+ params: Parameters<typeof canvas.setAlwaysOnTop>[0],
1216
+ ) => canvas.setAlwaysOnTop(params),
1217
+ canvasListWindows: async () => canvas.listWindows(),
822
1218
 
823
- // ---- Game ----
824
- gameOpenWindow: async (
825
- params: Parameters<typeof canvas.openGameWindow>[0],
826
- ) => canvas.openGameWindow(params),
1219
+ // ---- Game ----
1220
+ gameOpenWindow: async (
1221
+ params: Parameters<typeof canvas.openGameWindow>[0],
1222
+ ) => canvas.openGameWindow(params),
827
1223
 
828
- // ---- Screencapture ----
829
- screencaptureGetSources: async () => screencapture.getSources(),
830
- screencaptureTakeScreenshot: async () => screencapture.takeScreenshot(),
831
- screencaptureCaptureWindow: async (
832
- params: Parameters<typeof screencapture.captureWindow>[0],
833
- ) => screencapture.captureWindow(params),
834
- screencaptureStartRecording: async () => screencapture.startRecording(),
835
- screencaptureStopRecording: async () => screencapture.stopRecording(),
836
- screencapturePauseRecording: async () => screencapture.pauseRecording(),
837
- screencaptureResumeRecording: async () => screencapture.resumeRecording(),
838
- screencaptureGetRecordingState: async () =>
839
- screencapture.getRecordingState(),
840
- screencaptureStartFrameCapture: async (
841
- params: Parameters<typeof screencapture.startFrameCapture>[0],
842
- ) => screencapture.startFrameCapture(params),
843
- screencaptureStopFrameCapture: async () => screencapture.stopFrameCapture(),
844
- screencaptureIsFrameCaptureActive: async () =>
845
- screencapture.isFrameCaptureActive(),
846
- screencaptureSaveScreenshot: async (
847
- params: Parameters<typeof screencapture.saveScreenshot>[0],
848
- ) => screencapture.saveScreenshot(params),
849
- screencaptureSwitchSource: async (
850
- params: Parameters<typeof screencapture.switchSource>[0],
851
- ) => screencapture.switchSource(params),
852
- screencaptureSetCaptureTarget: async (_params: unknown) => {
853
- // Legacy compatibility hook. Native frame capture now targets the app
854
- // window directly, so renderer-side capture target overrides are inert.
855
- screencapture.setCaptureTarget(null);
856
- return { available: true };
857
- },
1224
+ // ---- Screencapture ----
1225
+ screencaptureGetSources: async () => screencapture.getSources(),
1226
+ screencaptureTakeScreenshot: async () => screencapture.takeScreenshot(),
1227
+ screencaptureCaptureWindow: async (
1228
+ params: Parameters<typeof screencapture.captureWindow>[0],
1229
+ ) => screencapture.captureWindow(params),
1230
+ screencaptureStartRecording: async () => screencapture.startRecording(),
1231
+ screencaptureStopRecording: async () => screencapture.stopRecording(),
1232
+ screencapturePauseRecording: async () => screencapture.pauseRecording(),
1233
+ screencaptureResumeRecording: async () => screencapture.resumeRecording(),
1234
+ screencaptureGetRecordingState: async () =>
1235
+ screencapture.getRecordingState(),
1236
+ screencaptureStartFrameCapture: async (
1237
+ params: Parameters<typeof screencapture.startFrameCapture>[0],
1238
+ ) => screencapture.startFrameCapture(params),
1239
+ screencaptureStopFrameCapture: async () => screencapture.stopFrameCapture(),
1240
+ screencaptureIsFrameCaptureActive: async () =>
1241
+ screencapture.isFrameCaptureActive(),
1242
+ screencaptureSaveScreenshot: async (
1243
+ params: Parameters<typeof screencapture.saveScreenshot>[0],
1244
+ ) => screencapture.saveScreenshot(params),
1245
+ screencaptureSwitchSource: async (
1246
+ params: Parameters<typeof screencapture.switchSource>[0],
1247
+ ) => screencapture.switchSource(params),
1248
+ screencaptureSetCaptureTarget: async (_params: unknown) => {
1249
+ // Legacy compatibility hook. Native frame capture now targets the app
1250
+ // window directly, so renderer-side capture target overrides are inert.
1251
+ screencapture.setCaptureTarget(null);
1252
+ return { available: true };
1253
+ },
858
1254
 
859
- // ---- Swabble ----
860
- swabbleStart: async (params: Parameters<typeof swabble.start>[0]) =>
861
- swabble.start(params),
862
- swabbleStop: async () => swabble.stop(),
863
- swabbleIsListening: async () => swabble.isListening(),
864
- swabbleGetConfig: async () => swabble.getConfig(),
865
- swabbleUpdateConfig: async (
866
- params: Parameters<typeof swabble.updateConfig>[0],
867
- ) => swabble.updateConfig(params),
868
- swabbleIsWhisperAvailable: async () => swabble.isWhisperAvailableCheck(),
869
- swabbleAudioChunk: async (
870
- params: Parameters<typeof swabble.audioChunk>[0],
871
- ) => swabble.audioChunk(params),
1255
+ // ---- Swabble ----
1256
+ swabbleStart: async (params: Parameters<typeof swabble.start>[0]) =>
1257
+ swabble.start(params),
1258
+ swabbleStop: async () => swabble.stop(),
1259
+ swabbleIsListening: async () => swabble.isListening(),
1260
+ swabbleGetConfig: async () => swabble.getConfig(),
1261
+ swabbleUpdateConfig: async (
1262
+ params: Parameters<typeof swabble.updateConfig>[0],
1263
+ ) => swabble.updateConfig(params),
1264
+ swabbleAudioChunk: async (
1265
+ params: Parameters<typeof swabble.audioChunk>[0],
1266
+ ) => swabble.audioChunk(params),
872
1267
 
873
- // ---- TalkMode ----
874
- talkmodeStart: async () => talkmode.start(),
875
- talkmodeStop: async () => talkmode.stop(),
876
- talkmodeSpeak: async (params: Parameters<typeof talkmode.speak>[0]) =>
877
- talkmode.speak(params),
878
- talkmodeStopSpeaking: async () => talkmode.stopSpeaking(),
879
- talkmodeGetState: async () => talkmode.getState(),
880
- talkmodeIsEnabled: async () => talkmode.isEnabled(),
881
- talkmodeIsSpeaking: async () => talkmode.isSpeaking(),
882
- talkmodeGetWhisperInfo: async () => talkmode.getWhisperInfo(),
883
- talkmodeIsWhisperAvailable: async () => talkmode.isWhisperAvailableCheck(),
884
- talkmodeUpdateConfig: async (
885
- params: Parameters<typeof talkmode.updateConfig>[0],
886
- ) => talkmode.updateConfig(params),
887
- talkmodeAudioChunk: async (
888
- params: Parameters<typeof talkmode.audioChunk>[0],
889
- ) => talkmode.audioChunk(params),
1268
+ // ---- TalkMode ----
1269
+ talkmodeStart: async () => talkmode.start(),
1270
+ talkmodeStop: async () => talkmode.stop(),
1271
+ talkmodeSpeak: async (params: Parameters<typeof talkmode.speak>[0]) =>
1272
+ talkmode.speak(params),
1273
+ talkmodeStopSpeaking: async () => talkmode.stopSpeaking(),
1274
+ talkmodeGetState: async () => talkmode.getState(),
1275
+ talkmodeIsEnabled: async () => talkmode.isEnabled(),
1276
+ talkmodeIsSpeaking: async () => talkmode.isSpeaking(),
1277
+ talkmodeUpdateConfig: async (
1278
+ params: Parameters<typeof talkmode.updateConfig>[0],
1279
+ ) => talkmode.updateConfig(params),
1280
+ talkmodeAudioChunk: async (
1281
+ params: Parameters<typeof talkmode.audioChunk>[0],
1282
+ ) => talkmode.audioChunk(params),
890
1283
 
891
- musicPlayerGetDesktopPlaybackUrls: async (params?: { guildId?: string }) =>
892
- musicPlayer.getDesktopPlaybackUrls(params),
1284
+ musicPlayerGetDesktopPlaybackUrls: async (params?: { guildId?: string }) =>
1285
+ musicPlayer.getDesktopPlaybackUrls(params),
893
1286
 
894
- // ---- Context Menu ----
895
- // These forward text selections from the renderer context menu to the agent.
896
- contextMenuAskAgent: async (params: { text: string }) => {
897
- sendToWebview("contextMenu:askAgent", { text: params.text });
898
- },
899
- contextMenuCreateSkill: async (params: { text: string }) => {
900
- sendToWebview("contextMenu:createSkill", { text: params.text });
901
- },
902
- contextMenuQuoteInChat: async (params: { text: string }) => {
903
- sendToWebview("contextMenu:quoteInChat", { text: params.text });
904
- },
905
- contextMenuSaveAsCommand: async (params: { text: string }) => {
906
- sendToWebview("contextMenu:saveAsCommand", { text: params.text });
907
- },
1287
+ // ---- Context Menu ----
1288
+ // These forward text selections from the renderer context menu to the agent.
1289
+ contextMenuAskAgent: async (params: { text: string }) => {
1290
+ sendToWebview("contextMenu:askAgent", { text: params.text });
1291
+ },
1292
+ contextMenuCreateSkill: async (params: { text: string }) => {
1293
+ sendToWebview("contextMenu:createSkill", { text: params.text });
1294
+ },
1295
+ contextMenuQuoteInChat: async (params: { text: string }) => {
1296
+ sendToWebview("contextMenu:quoteInChat", { text: params.text });
1297
+ },
1298
+ contextMenuSaveAsCommand: async (params: { text: string }) => {
1299
+ sendToWebview("contextMenu:saveAsCommand", { text: params.text });
1300
+ },
908
1301
 
909
- // ---- Credentials Auto-Detection ----
910
- credentialsScanProviders: async (params?: { context?: string }) => {
911
- if (
912
- !params?.context ||
913
- !["onboarding", "tray-refresh"].includes(params.context)
914
- ) {
915
- throw new Error("credentials:scanProviders requires a valid context");
916
- }
917
- return { providers: await scanProviderCredentials() };
918
- },
919
- credentialsScanAndValidate: async (params?: { context?: string }) => {
920
- if (
921
- !params?.context ||
922
- !["onboarding", "tray-refresh"].includes(params.context)
923
- ) {
924
- throw new Error("credentialsScanAndValidate requires a valid context");
925
- }
926
- return { providers: await scanAndValidateProviderCredentials() };
927
- },
1302
+ // ---- Credentials Auto-Detection ----
1303
+ credentialsScanProviders: async (params?: { context?: string }) => {
1304
+ if (
1305
+ !params?.context ||
1306
+ !["first-run", "tray-refresh"].includes(params.context)
1307
+ ) {
1308
+ throw new Error("credentials:scanProviders requires a valid context");
1309
+ }
1310
+ return { providers: await scanProviderCredentials() };
1311
+ },
1312
+ credentialsScanAndValidate: async (params?: { context?: string }) => {
1313
+ if (
1314
+ !params?.context ||
1315
+ !["first-run", "tray-refresh"].includes(params.context)
1316
+ ) {
1317
+ throw new Error("credentialsScanAndValidate requires a valid context");
1318
+ }
1319
+ return { providers: await scanAndValidateProviderCredentials() };
1320
+ },
928
1321
 
929
- // ---- GPU Window ----
930
- gpuWindowCreate: async (
931
- params: Parameters<typeof gpuWindow.createWindow>[0],
932
- ) => gpuWindow.createWindow(params),
933
- gpuWindowDestroy: async (
934
- params: Parameters<typeof gpuWindow.destroyWindow>[0],
935
- ) => gpuWindow.destroyWindow(params),
936
- gpuWindowShow: async (params: Parameters<typeof gpuWindow.showWindow>[0]) =>
937
- gpuWindow.showWindow(params),
938
- gpuWindowHide: async (params: Parameters<typeof gpuWindow.hideWindow>[0]) =>
939
- gpuWindow.hideWindow(params),
940
- gpuWindowSetBounds: async (
941
- params: Parameters<typeof gpuWindow.setBounds>[0],
942
- ) => gpuWindow.setBounds(params),
943
- gpuWindowGetInfo: async (params: Parameters<typeof gpuWindow.getInfo>[0]) =>
944
- gpuWindow.getInfo(params),
945
- gpuWindowList: async () => gpuWindow.listWindows(),
1322
+ // ---- GPU Window ----
1323
+ gpuWindowCreate: async (
1324
+ params: Parameters<typeof gpuWindow.createWindow>[0],
1325
+ ) => gpuWindow.createWindow(params),
1326
+ gpuWindowDestroy: async (
1327
+ params: Parameters<typeof gpuWindow.destroyWindow>[0],
1328
+ ) => gpuWindow.destroyWindow(params),
1329
+ gpuWindowShow: async (params: Parameters<typeof gpuWindow.showWindow>[0]) =>
1330
+ gpuWindow.showWindow(params),
1331
+ gpuWindowHide: async (params: Parameters<typeof gpuWindow.hideWindow>[0]) =>
1332
+ gpuWindow.hideWindow(params),
1333
+ gpuWindowSetBounds: async (
1334
+ params: Parameters<typeof gpuWindow.setBounds>[0],
1335
+ ) => gpuWindow.setBounds(params),
1336
+ gpuWindowGetInfo: async (params: Parameters<typeof gpuWindow.getInfo>[0]) =>
1337
+ gpuWindow.getInfo(params),
1338
+ gpuWindowList: async () => gpuWindow.listWindows(),
946
1339
 
947
- // ---- GPU View ----
948
- gpuViewCreate: async (params: Parameters<typeof gpuWindow.createView>[0]) =>
949
- gpuWindow.createView(params),
950
- gpuViewDestroy: async (
951
- params: Parameters<typeof gpuWindow.destroyView>[0],
952
- ) => gpuWindow.destroyView(params),
953
- gpuViewSetFrame: async (
954
- params: Parameters<typeof gpuWindow.setViewFrame>[0],
955
- ) => gpuWindow.setViewFrame(params),
956
- gpuViewSetTransparent: async (
957
- params: Parameters<typeof gpuWindow.setViewTransparent>[0],
958
- ) => gpuWindow.setViewTransparent(params),
959
- gpuViewSetHidden: async (
960
- params: Parameters<typeof gpuWindow.setViewHidden>[0],
961
- ) => gpuWindow.setViewHidden(params),
962
- gpuViewGetNativeHandle: async (
963
- params: Parameters<typeof gpuWindow.getViewNativeHandle>[0],
964
- ) => gpuWindow.getViewNativeHandle(params),
965
- gpuViewList: async () => gpuWindow.listViews(),
1340
+ // ---- GPU View ----
1341
+ gpuViewCreate: async (params: Parameters<typeof gpuWindow.createView>[0]) =>
1342
+ gpuWindow.createView(params),
1343
+ gpuViewDestroy: async (
1344
+ params: Parameters<typeof gpuWindow.destroyView>[0],
1345
+ ) => gpuWindow.destroyView(params),
1346
+ gpuViewSetFrame: async (
1347
+ params: Parameters<typeof gpuWindow.setViewFrame>[0],
1348
+ ) => gpuWindow.setViewFrame(params),
1349
+ gpuViewSetTransparent: async (
1350
+ params: Parameters<typeof gpuWindow.setViewTransparent>[0],
1351
+ ) => gpuWindow.setViewTransparent(params),
1352
+ gpuViewSetHidden: async (
1353
+ params: Parameters<typeof gpuWindow.setViewHidden>[0],
1354
+ ) => gpuWindow.setViewHidden(params),
1355
+ gpuViewGetNativeHandle: async (
1356
+ params: Parameters<typeof gpuWindow.getViewNativeHandle>[0],
1357
+ ) => gpuWindow.getViewNativeHandle(params),
1358
+ gpuViewList: async () => gpuWindow.listViews(),
966
1359
 
967
- // ---- Steward Sidecar ----
968
- stewardGetStatus: async () => getStewardStatus(),
969
- stewardIsLocalEnabled: async () => ({ enabled: isStewardLocalEnabled() }),
970
- stewardStart: async () => {
971
- if (!isStewardLocalEnabled()) {
972
- return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
973
- }
974
- return startSteward();
975
- },
976
- stewardRestart: async () => {
977
- if (!isStewardLocalEnabled()) {
978
- return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
979
- }
980
- return restartSteward();
981
- },
982
- stewardReset: async () => {
983
- if (!isStewardLocalEnabled()) {
984
- return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
985
- }
986
- return resetSteward();
987
- },
1360
+ // ---- Steward Sidecar ----
1361
+ stewardGetStatus: async () => getStewardStatus(),
1362
+ stewardIsLocalEnabled: async () => ({ enabled: isStewardLocalEnabled() }),
1363
+ stewardStart: async () => {
1364
+ if (!isStewardLocalEnabled()) {
1365
+ return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
1366
+ }
1367
+ return startSteward();
1368
+ },
1369
+ stewardRestart: async () => {
1370
+ if (!isStewardLocalEnabled()) {
1371
+ return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
1372
+ }
1373
+ return restartSteward();
1374
+ },
1375
+ stewardReset: async () => {
1376
+ if (!isStewardLocalEnabled()) {
1377
+ return createStewardStoppedStatus("STEWARD_LOCAL not enabled");
1378
+ }
1379
+ return resetSteward();
1380
+ },
988
1381
 
989
- // ---- Native Editor Bridge ----
990
- editorBridgeListEditors: async () => ({
991
- editors: editorBridge.listInstalledEditors(),
992
- }),
993
- editorBridgeOpenInEditor: async (params: {
994
- editorId: NativeEditorId;
995
- workspacePath: string;
996
- }) => {
997
- const session = editorBridge.openInEditor(
998
- params.editorId,
999
- params.workspacePath,
1000
- );
1001
- sendToWebview("editorBridge:sessionChanged", session);
1002
- return session;
1003
- },
1004
- editorBridgeGetSession: async () => editorBridge.getActiveEditorSession(),
1005
- editorBridgeClearSession: async () => {
1006
- editorBridge.clearActiveEditorSession();
1007
- sendToWebview("editorBridge:sessionChanged", null);
1008
- },
1382
+ // ---- Native Editor Bridge ----
1383
+ editorBridgeListEditors: async () => ({
1384
+ editors: editorBridge.listInstalledEditors(),
1385
+ }),
1386
+ editorBridgeOpenInEditor: async (params: {
1387
+ editorId: NativeEditorId;
1388
+ workspacePath: string;
1389
+ }) => {
1390
+ const session = editorBridge.openInEditor(
1391
+ params.editorId,
1392
+ params.workspacePath,
1393
+ );
1394
+ sendToWebview("editorBridge:sessionChanged", session);
1395
+ return session;
1396
+ },
1397
+ editorBridgeGetSession: async () => editorBridge.getActiveEditorSession(),
1398
+ editorBridgeClearSession: async () => {
1399
+ editorBridge.clearActiveEditorSession();
1400
+ sendToWebview("editorBridge:sessionChanged", null);
1401
+ },
1009
1402
 
1010
- // ---- Workspace File Watcher ----
1011
- fileWatcherStart: async (params: { watchPath: string }) => {
1012
- const watchId = fileWatcher.startWatch(params.watchPath, (event) => {
1013
- sendToWebview("fileWatcher:fileChanged", event);
1014
- });
1015
- return { watchId };
1016
- },
1017
- fileWatcherStop: async (params: { watchId: string }) => ({
1018
- stopped: fileWatcher.stopWatch(params.watchId),
1019
- }),
1020
- fileWatcherStopAll: async () => {
1021
- fileWatcher.stopAll();
1022
- },
1023
- fileWatcherList: async () => ({ watches: fileWatcher.listWatches() }),
1024
- fileWatcherGetStatus: async (params: { watchId: string }) =>
1025
- fileWatcher.getWatch(params.watchId),
1403
+ // ---- Workspace File Watcher ----
1404
+ fileWatcherStart: async (params: { watchPath: string }) => {
1405
+ const watchId = fileWatcher.startWatch(params.watchPath, (event) => {
1406
+ sendToWebview("fileWatcher:fileChanged", event);
1407
+ });
1408
+ return { watchId };
1409
+ },
1410
+ fileWatcherStop: async (params: { watchId: string }) => ({
1411
+ stopped: fileWatcher.stopWatch(params.watchId),
1412
+ }),
1413
+ fileWatcherStopAll: async () => {
1414
+ fileWatcher.stopAll();
1415
+ },
1416
+ fileWatcherList: async () => ({ watches: fileWatcher.listWatches() }),
1417
+ fileWatcherGetStatus: async (params: { watchId: string }) =>
1418
+ fileWatcher.getWatch(params.watchId),
1026
1419
 
1027
- // ---- Floating Chat Window ----
1028
- floatingChatOpen: async (
1029
- params: { contextId?: string; x?: number; y?: number } | undefined,
1030
- ) => {
1031
- return floatingChat.open(params ?? {});
1032
- },
1033
- floatingChatShow: async () => {
1034
- floatingChat.show();
1035
- return floatingChat.getStatus();
1036
- },
1037
- floatingChatHide: async () => {
1038
- floatingChat.hide();
1039
- return floatingChat.getStatus();
1040
- },
1041
- floatingChatClose: async () => {
1042
- floatingChat.close();
1043
- return floatingChat.getStatus();
1044
- },
1045
- floatingChatSetContext: async (params: { contextId: string | null }) => {
1046
- floatingChat.setContextId(params.contextId);
1047
- return floatingChat.getStatus();
1048
- },
1049
- floatingChatGetStatus: async () => floatingChat.getStatus(),
1050
- };
1420
+ // ---- Floating Chat Window ----
1421
+ floatingChatOpen: async (
1422
+ params: { contextId?: string; x?: number; y?: number } | undefined,
1423
+ ) => {
1424
+ return floatingChat.open(params ?? {});
1425
+ },
1426
+ floatingChatShow: async () => {
1427
+ floatingChat.show();
1428
+ return floatingChat.getStatus();
1429
+ },
1430
+ floatingChatHide: async () => {
1431
+ floatingChat.hide();
1432
+ return floatingChat.getStatus();
1433
+ },
1434
+ floatingChatClose: async () => {
1435
+ floatingChat.close();
1436
+ return floatingChat.getStatus();
1437
+ },
1438
+ floatingChatSetContext: async (params: { contextId: string | null }) => {
1439
+ floatingChat.setContextId(params.contextId);
1440
+ return floatingChat.getStatus();
1441
+ },
1442
+ floatingChatGetStatus: async () => floatingChat.getStatus(),
1443
+ };
1051
1444
  }
1052
1445
 
1053
1446
  /**
@@ -1064,16 +1457,16 @@ export function buildBunRpcHandlers({
1064
1457
  * wireBrowserWorkspaceCaller(rpc);
1065
1458
  */
1066
1459
  export function registerRpcHandlers(
1067
- rpc: ElectrobunRpcWithHandlers | null | undefined,
1068
- sendToWebview: SendToWebview,
1460
+ rpc: ElectrobunRpcWithHandlers | null | undefined,
1461
+ sendToWebview: SendToWebview,
1069
1462
  ): void {
1070
- if (!rpc) {
1071
- logger.error("[RPC] No RPC instance provided");
1072
- return;
1073
- }
1463
+ if (!rpc) {
1464
+ logger.error("[RPC] No RPC instance provided");
1465
+ return;
1466
+ }
1074
1467
 
1075
- wireBrowserWorkspaceCaller(rpc);
1076
- rpc?.setRequestHandler?.(buildBunRpcHandlers({ sendToWebview }));
1468
+ wireBrowserWorkspaceCaller(rpc);
1469
+ rpc.setRequestHandler?.(buildBunRpcHandlers({ sendToWebview }));
1077
1470
 
1078
- logger.info("[RPC] All handlers registered");
1471
+ logger.info("[RPC] All handlers registered");
1079
1472
  }