@elizaos/app-core 2.0.0-alpha.85 → 2.0.0-beta.2

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 (1882) hide show
  1. package/account-pool.d.ts +6 -0
  2. package/account-pool.d.ts.map +1 -0
  3. package/account-pool.js +5 -0
  4. package/api/__tests__/sandbox-test-helpers.d.ts +10 -0
  5. package/api/__tests__/sandbox-test-helpers.d.ts.map +1 -0
  6. package/api/__tests__/sandbox-test-helpers.js +15 -0
  7. package/api/auth/audit.d.ts +52 -0
  8. package/api/auth/audit.d.ts.map +1 -0
  9. package/api/auth/audit.js +126 -0
  10. package/api/auth/auth-context.d.ts +40 -0
  11. package/api/auth/auth-context.d.ts.map +1 -0
  12. package/api/auth/auth-context.js +68 -0
  13. package/api/auth/bootstrap-token.d.ts +50 -0
  14. package/api/auth/bootstrap-token.d.ts.map +1 -0
  15. package/api/auth/bootstrap-token.js +157 -0
  16. package/api/auth/index.d.ts +14 -0
  17. package/api/auth/index.d.ts.map +1 -0
  18. package/api/auth/index.js +13 -0
  19. package/api/auth/passwords.d.ts +65 -0
  20. package/api/auth/passwords.d.ts.map +1 -0
  21. package/api/auth/passwords.js +87 -0
  22. package/api/auth/sensitive-rate-limit.d.ts +56 -0
  23. package/api/auth/sensitive-rate-limit.d.ts.map +1 -0
  24. package/api/auth/sensitive-rate-limit.js +95 -0
  25. package/api/auth/sessions.d.ts +152 -0
  26. package/api/auth/sessions.d.ts.map +1 -0
  27. package/api/auth/sessions.js +298 -0
  28. package/api/auth/tokens.d.ts +3 -0
  29. package/api/auth/tokens.d.ts.map +1 -0
  30. package/api/auth/tokens.js +13 -0
  31. package/api/auth-bootstrap-routes.d.ts +32 -0
  32. package/api/auth-bootstrap-routes.d.ts.map +1 -0
  33. package/api/auth-bootstrap-routes.js +179 -0
  34. package/api/auth-pairing-compat-routes.d.ts +17 -0
  35. package/api/auth-pairing-compat-routes.d.ts.map +1 -0
  36. package/api/auth-pairing-compat-routes.js +301 -0
  37. package/api/auth-session-routes.d.ts +31 -0
  38. package/api/auth-session-routes.d.ts.map +1 -0
  39. package/api/auth-session-routes.js +560 -0
  40. package/api/auth.d.ts +153 -0
  41. package/api/auth.d.ts.map +1 -0
  42. package/api/auth.js +290 -0
  43. package/api/automation-node-contributors.d.ts +14 -0
  44. package/api/automation-node-contributors.d.ts.map +1 -0
  45. package/api/automation-node-contributors.js +14 -0
  46. package/api/automations-compat-routes.d.ts +18 -0
  47. package/api/automations-compat-routes.d.ts.map +1 -0
  48. package/api/automations-compat-routes.js +274 -0
  49. package/api/catalog-routes.d.ts +4 -0
  50. package/api/catalog-routes.d.ts.map +1 -0
  51. package/api/catalog-routes.js +61 -0
  52. package/api/compat-route-shared.d.ts +29 -0
  53. package/api/compat-route-shared.d.ts.map +1 -0
  54. package/api/compat-route-shared.js +298 -0
  55. package/api/credential-resolver.d.ts +31 -0
  56. package/api/credential-resolver.d.ts.map +1 -0
  57. package/api/credential-resolver.js +199 -0
  58. package/api/database-rows-compat-routes.d.ts +4 -0
  59. package/api/database-rows-compat-routes.d.ts.map +1 -0
  60. package/api/database-rows-compat-routes.js +100 -0
  61. package/api/dev-compat-routes.d.ts +11 -0
  62. package/api/dev-compat-routes.d.ts.map +1 -0
  63. package/api/dev-compat-routes.js +144 -0
  64. package/api/dev-console-log.d.ts +21 -0
  65. package/api/dev-console-log.d.ts.map +1 -0
  66. package/api/dev-console-log.js +65 -0
  67. package/api/dev-stack.d.ts +49 -0
  68. package/api/dev-stack.d.ts.map +1 -0
  69. package/api/dev-stack.js +60 -0
  70. package/api/local-inference-compat-routes.d.ts +16 -0
  71. package/api/local-inference-compat-routes.d.ts.map +1 -0
  72. package/api/local-inference-compat-routes.js +617 -0
  73. package/api/onboarding-compat-routes.d.ts +4 -0
  74. package/api/onboarding-compat-routes.d.ts.map +1 -0
  75. package/api/onboarding-compat-routes.js +207 -0
  76. package/api/plugins-compat-routes.d.ts +103 -0
  77. package/api/plugins-compat-routes.d.ts.map +1 -0
  78. package/api/plugins-compat-routes.js +1181 -0
  79. package/api/response.d.ts +4 -0
  80. package/api/response.d.ts.map +1 -0
  81. package/api/response.js +28 -0
  82. package/api/runtime-mode-routes.d.ts +13 -0
  83. package/api/runtime-mode-routes.d.ts.map +1 -0
  84. package/api/runtime-mode-routes.js +32 -0
  85. package/api/secrets-inventory-routes.d.ts +39 -0
  86. package/api/secrets-inventory-routes.d.ts.map +1 -0
  87. package/api/secrets-inventory-routes.js +487 -0
  88. package/api/secrets-manager-routes.d.ts +9 -0
  89. package/api/secrets-manager-routes.d.ts.map +1 -0
  90. package/api/secrets-manager-routes.js +476 -0
  91. package/api/sensitive-request-routes.d.ts +20 -0
  92. package/api/sensitive-request-routes.d.ts.map +1 -0
  93. package/api/sensitive-request-routes.js +489 -0
  94. package/api/sensitive-request-store.d.ts +39 -0
  95. package/api/sensitive-request-store.d.ts.map +1 -0
  96. package/api/sensitive-request-store.js +204 -0
  97. package/api/server-config-filter.d.ts +14 -0
  98. package/api/server-config-filter.d.ts.map +1 -0
  99. package/api/server-config-filter.js +77 -0
  100. package/api/server-cors.d.ts +30 -0
  101. package/api/server-cors.d.ts.map +1 -0
  102. package/api/server-cors.js +128 -0
  103. package/api/server-html.d.ts +4 -0
  104. package/api/server-html.d.ts.map +1 -0
  105. package/api/server-html.js +5 -0
  106. package/api/server-onboarding-compat.d.ts +31 -0
  107. package/api/server-onboarding-compat.d.ts.map +1 -0
  108. package/api/server-onboarding-compat.js +283 -0
  109. package/api/server-security.d.ts +11 -0
  110. package/api/server-security.d.ts.map +1 -0
  111. package/api/server-security.js +29 -0
  112. package/api/server-startup.d.ts +5 -0
  113. package/api/server-startup.d.ts.map +1 -0
  114. package/api/server-startup.js +74 -0
  115. package/api/server-wallet-trade.d.ts +10 -0
  116. package/api/server-wallet-trade.d.ts.map +1 -0
  117. package/api/server-wallet-trade.js +240 -0
  118. package/api/server.d.ts +32 -0
  119. package/api/server.d.ts.map +1 -0
  120. package/api/server.js +768 -0
  121. package/api/workbench-compat-routes.d.ts +11 -0
  122. package/api/workbench-compat-routes.d.ts.map +1 -0
  123. package/api/workbench-compat-routes.js +325 -0
  124. package/benchmark/cua-routes.d.ts +10 -0
  125. package/benchmark/cua-routes.d.ts.map +1 -0
  126. package/benchmark/cua-routes.js +179 -0
  127. package/benchmark/lifeops-bench-handler.d.ts +94 -0
  128. package/benchmark/lifeops-bench-handler.d.ts.map +1 -0
  129. package/benchmark/lifeops-bench-handler.js +280 -0
  130. package/benchmark/lifeops-fake-backend.d.ts +227 -0
  131. package/benchmark/lifeops-fake-backend.d.ts.map +1 -0
  132. package/benchmark/lifeops-fake-backend.js +499 -0
  133. package/benchmark/mock-plugin-base.d.ts +9 -0
  134. package/benchmark/mock-plugin-base.d.ts.map +1 -0
  135. package/benchmark/mock-plugin-base.js +325 -0
  136. package/benchmark/mock-plugin.d.ts +3 -0
  137. package/benchmark/mock-plugin.d.ts.map +1 -0
  138. package/benchmark/mock-plugin.js +504 -0
  139. package/benchmark/params.d.ts +2 -0
  140. package/benchmark/params.d.ts.map +1 -0
  141. package/benchmark/params.js +18 -0
  142. package/benchmark/plugin.d.ts +42 -0
  143. package/benchmark/plugin.d.ts.map +1 -0
  144. package/benchmark/plugin.js +422 -0
  145. package/benchmark/replay-capture.d.ts +73 -0
  146. package/benchmark/replay-capture.d.ts.map +1 -0
  147. package/benchmark/replay-capture.js +223 -0
  148. package/benchmark/server-utils.d.ts +100 -0
  149. package/benchmark/server-utils.d.ts.map +1 -0
  150. package/benchmark/server-utils.js +289 -0
  151. package/benchmark/server.d.ts +2 -0
  152. package/benchmark/server.d.ts.map +1 -0
  153. package/benchmark/server.js +1176 -0
  154. package/browser.d.ts +13 -0
  155. package/browser.d.ts.map +1 -0
  156. package/browser.js +15 -0
  157. package/cli/argv.d.ts +17 -0
  158. package/cli/argv.d.ts.map +1 -0
  159. package/cli/argv.js +140 -0
  160. package/cli/banner.d.ts +11 -0
  161. package/cli/banner.d.ts.map +1 -0
  162. package/cli/banner.js +36 -0
  163. package/cli/cli-name.d.ts +5 -0
  164. package/cli/cli-name.d.ts.map +1 -0
  165. package/cli/cli-name.js +21 -0
  166. package/cli/cli-utils.d.ts +5 -0
  167. package/cli/cli-utils.d.ts.map +1 -0
  168. package/cli/cli-utils.js +13 -0
  169. package/cli/command-format.d.ts +2 -0
  170. package/cli/command-format.d.ts.map +1 -0
  171. package/cli/command-format.js +20 -0
  172. package/cli/doctor/checks.d.ts +96 -0
  173. package/cli/doctor/checks.d.ts.map +1 -0
  174. package/cli/doctor/checks.js +483 -0
  175. package/cli/git-commit.d.ts +5 -0
  176. package/cli/git-commit.d.ts.map +1 -0
  177. package/cli/git-commit.js +106 -0
  178. package/cli/parse-duration.d.ts +5 -0
  179. package/cli/parse-duration.d.ts.map +1 -0
  180. package/cli/parse-duration.js +27 -0
  181. package/cli/plugins-cli.d.ts +26 -0
  182. package/cli/plugins-cli.d.ts.map +1 -0
  183. package/cli/plugins-cli.js +892 -0
  184. package/cli/profile-utils.d.ts +3 -0
  185. package/cli/profile-utils.d.ts.map +1 -0
  186. package/cli/profile-utils.js +21 -0
  187. package/cli/profile.d.ts +15 -0
  188. package/cli/profile.d.ts.map +1 -0
  189. package/cli/profile.js +93 -0
  190. package/cli/program/build-program.d.ts +3 -0
  191. package/cli/program/build-program.d.ts.map +1 -0
  192. package/cli/program/build-program.js +12 -0
  193. package/cli/program/command-registry.d.ts +3 -0
  194. package/cli/program/command-registry.d.ts.map +1 -0
  195. package/cli/program/command-registry.js +24 -0
  196. package/cli/program/help.d.ts +3 -0
  197. package/cli/program/help.d.ts.map +1 -0
  198. package/cli/program/help.js +57 -0
  199. package/cli/program/preaction.d.ts +3 -0
  200. package/cli/program/preaction.d.ts.map +1 -0
  201. package/cli/program/preaction.js +40 -0
  202. package/cli/program/register.auth.d.ts +51 -0
  203. package/cli/program/register.auth.d.ts.map +1 -0
  204. package/cli/program/register.auth.js +203 -0
  205. package/cli/program/register.benchmark.d.ts +3 -0
  206. package/cli/program/register.benchmark.d.ts.map +1 -0
  207. package/cli/program/register.benchmark.js +12 -0
  208. package/cli/program/register.config.d.ts +3 -0
  209. package/cli/program/register.config.d.ts.map +1 -0
  210. package/cli/program/register.config.js +150 -0
  211. package/cli/program/register.configure.d.ts +3 -0
  212. package/cli/program/register.configure.d.ts.map +1 -0
  213. package/cli/program/register.configure.js +18 -0
  214. package/cli/program/register.dashboard.d.ts +3 -0
  215. package/cli/program/register.dashboard.d.ts.map +1 -0
  216. package/cli/program/register.dashboard.js +124 -0
  217. package/cli/program/register.db.d.ts +3 -0
  218. package/cli/program/register.db.d.ts.map +1 -0
  219. package/cli/program/register.db.js +45 -0
  220. package/cli/program/register.doctor.d.ts +3 -0
  221. package/cli/program/register.doctor.d.ts.map +1 -0
  222. package/cli/program/register.doctor.js +170 -0
  223. package/cli/program/register.models.d.ts +3 -0
  224. package/cli/program/register.models.d.ts.map +1 -0
  225. package/cli/program/register.models.js +32 -0
  226. package/cli/program/register.setup.d.ts +16 -0
  227. package/cli/program/register.setup.d.ts.map +1 -0
  228. package/cli/program/register.setup.js +333 -0
  229. package/cli/program/register.start.d.ts +3 -0
  230. package/cli/program/register.start.d.ts.map +1 -0
  231. package/cli/program/register.start.js +95 -0
  232. package/cli/program/register.subclis.d.ts +4 -0
  233. package/cli/program/register.subclis.d.ts.map +1 -0
  234. package/cli/program/register.subclis.js +87 -0
  235. package/cli/program/register.update.d.ts +12 -0
  236. package/cli/program/register.update.d.ts.map +1 -0
  237. package/cli/program/register.update.js +173 -0
  238. package/cli/program.d.ts +2 -0
  239. package/cli/program.d.ts.map +1 -0
  240. package/cli/program.js +1 -0
  241. package/cli/run-main.d.ts +2 -0
  242. package/cli/run-main.d.ts.map +1 -0
  243. package/cli/run-main.js +71 -0
  244. package/cli/version.d.ts +2 -0
  245. package/cli/version.d.ts.map +1 -0
  246. package/cli/version.js +2 -0
  247. package/connectors/capacitor-jsc.d.ts +66 -0
  248. package/connectors/capacitor-jsc.d.ts.map +1 -0
  249. package/connectors/capacitor-jsc.js +39 -0
  250. package/connectors/capacitor-quickjs.d.ts +64 -0
  251. package/connectors/capacitor-quickjs.d.ts.map +1 -0
  252. package/connectors/capacitor-quickjs.js +50 -0
  253. package/connectors/capacitor-sqlite.d.ts +41 -0
  254. package/connectors/capacitor-sqlite.d.ts.map +1 -0
  255. package/connectors/capacitor-sqlite.js +87 -0
  256. package/diagnostics/integration-observability.d.ts +40 -0
  257. package/diagnostics/integration-observability.d.ts.map +1 -0
  258. package/diagnostics/integration-observability.js +68 -0
  259. package/entry.d.ts +10 -0
  260. package/entry.d.ts.map +1 -0
  261. package/entry.js +66 -0
  262. package/index.d.ts +34 -4
  263. package/index.d.ts.map +1 -1
  264. package/index.js +42 -6
  265. package/package.json +81 -151
  266. package/packaging/PUBLISHING_GUIDE.md +707 -0
  267. package/packaging/debian/changelog +9 -0
  268. package/packaging/debian/control +26 -0
  269. package/packaging/debian/copyright +27 -0
  270. package/packaging/debian/elizaos-app.service +15 -0
  271. package/packaging/debian/install +4 -0
  272. package/packaging/debian/postinst +28 -0
  273. package/packaging/debian/prerm +14 -0
  274. package/packaging/debian/rules +44 -0
  275. package/packaging/debian/source/format +1 -0
  276. package/packaging/flatpak/README.md +150 -0
  277. package/packaging/flatpak/ai.elizaos.App.desktop +11 -0
  278. package/packaging/flatpak/ai.elizaos.App.metainfo.xml +81 -0
  279. package/packaging/flatpak/ai.elizaos.App.store.yml +142 -0
  280. package/packaging/flatpak/ai.elizaos.App.yml +142 -0
  281. package/packaging/flatpak/elizaos-app-wrapper.sh +5 -0
  282. package/packaging/flatpak/elizaos-app-wrapper.store.sh +16 -0
  283. package/packaging/flatpak/icons/128x128/ai.elizaos.App.png +0 -0
  284. package/packaging/flatpak/icons/256x256/ai.elizaos.App.png +0 -0
  285. package/packaging/flatpak/icons/512x512/ai.elizaos.App.png +0 -0
  286. package/packaging/homebrew/README.md +80 -0
  287. package/packaging/homebrew/elizaos-app.cask.rb +60 -0
  288. package/packaging/homebrew/elizaos-app.rb +49 -0
  289. package/packaging/inno/ElizaOSApp.iss +53 -0
  290. package/packaging/inno/build-inno.ps1 +231 -0
  291. package/packaging/msix/AppxManifest.store.xml +79 -0
  292. package/packaging/msix/AppxManifest.xml +53 -0
  293. package/packaging/msix/README.md +201 -0
  294. package/packaging/msix/assets/LargeTile.png +0 -0
  295. package/packaging/msix/assets/Square150x150Logo.png +0 -0
  296. package/packaging/msix/assets/Square44x44Logo.png +0 -0
  297. package/packaging/msix/assets/StoreLogo.png +0 -0
  298. package/packaging/msix/assets/Wide310x150Logo.png +0 -0
  299. package/packaging/msix/build-msix.ps1 +206 -0
  300. package/packaging/msix/generate-placeholder-assets.ps1 +49 -0
  301. package/packaging/msix/store/description.md +31 -0
  302. package/packaging/msix/store/listing.json +27 -0
  303. package/packaging/pypi/README.md +14 -0
  304. package/packaging/pypi/elizaos_app/__init__.py +7 -0
  305. package/packaging/pypi/elizaos_app/__main__.py +6 -0
  306. package/packaging/pypi/elizaos_app/cli.py +21 -0
  307. package/packaging/pypi/elizaos_app/loader.py +127 -0
  308. package/packaging/pypi/elizaos_app/py.typed +1 -0
  309. package/packaging/pypi/pyproject.toml +38 -0
  310. package/packaging/snap/snapcraft.yaml +560 -0
  311. package/packaging/test-packaging.sh +309 -0
  312. package/patches/@noble%2Fcurves@2.0.1.patch +33 -0
  313. package/patches/@pixiv%2Fthree-vrm@3.5.2.patch +26 -0
  314. package/patches/coding-agent-adapters@0.16.3.patch +44 -0
  315. package/patches/electrobun@1.16.0.patch +13 -0
  316. package/patches/llama-cpp-capacitor@0.1.5.patch +2387 -0
  317. package/patches/proper-lockfile@4.1.2.patch +14 -0
  318. package/patches/pty-manager@1.11.0.patch +194 -0
  319. package/permissions/types.d.ts +8 -0
  320. package/permissions/types.d.ts.map +1 -0
  321. package/permissions/types.js +7 -0
  322. package/platform/agent-browser-stub.d.ts +27 -0
  323. package/platform/agent-browser-stub.d.ts.map +1 -0
  324. package/platform/agent-browser-stub.js +16 -0
  325. package/platform/empty-node-module.d.ts +31 -0
  326. package/platform/empty-node-module.d.ts.map +1 -0
  327. package/platform/empty-node-module.js +22 -0
  328. package/platforms/android/Gemfile +6 -0
  329. package/platforms/android/README.md +79 -0
  330. package/platforms/android/app/build.gradle +124 -0
  331. package/platforms/android/app/capacitor.build.gradle +32 -0
  332. package/platforms/android/app/proguard-rules.pro +46 -0
  333. package/platforms/android/app/src/androidTest/java/ai/elizaos/app/ElizaOsInstrumentedTest.java +162 -0
  334. package/platforms/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
  335. package/platforms/android/app/src/main/AndroidManifest.xml +83 -0
  336. package/platforms/android/app/src/main/java/ai/elizaos/app/AgentPlugin.java +232 -0
  337. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +1514 -0
  338. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAssistActivity.java +21 -0
  339. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBootReceiver.java +61 -0
  340. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBrowserActivity.java +39 -0
  341. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCalendarActivity.java +75 -0
  342. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCameraActivity.java +54 -0
  343. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaClockActivity.java +70 -0
  344. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaContactsActivity.java +56 -0
  345. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaDialActivity.java +83 -0
  346. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaInCallService.java +168 -0
  347. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaMmsReceiver.java +70 -0
  348. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNativeBridge.java +38 -0
  349. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaRespondViaMessageService.java +119 -0
  350. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsComposeActivity.java +50 -0
  351. package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsReceiver.java +84 -0
  352. package/platforms/android/app/src/main/java/ai/elizaos/app/GatewayConnectionService.java +211 -0
  353. package/platforms/android/app/src/main/java/ai/elizaos/app/MainActivity.java +202 -0
  354. package/platforms/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  355. package/platforms/android/app/src/main/res/drawable/splash.png +0 -0
  356. package/platforms/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  357. package/platforms/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  358. package/platforms/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  359. package/platforms/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  360. package/platforms/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  361. package/platforms/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  362. package/platforms/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  363. package/platforms/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  364. package/platforms/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  365. package/platforms/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  366. package/platforms/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
  367. package/platforms/android/app/src/main/res/layout/activity_main.xml +12 -0
  368. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  369. package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  370. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  371. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  372. package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  373. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  374. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  375. package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  376. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  377. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  378. package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  379. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  380. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  381. package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  382. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  383. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  384. package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  385. package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
  386. package/platforms/android/app/src/main/res/values/strings.xml +7 -0
  387. package/platforms/android/app/src/main/res/values/styles.xml +22 -0
  388. package/platforms/android/app/src/main/res/xml/file_paths.xml +5 -0
  389. package/platforms/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
  390. package/platforms/android/build.gradle +63 -0
  391. package/platforms/android/capacitor-cordova-android-plugins/build.gradle +53 -0
  392. package/platforms/android/capacitor-cordova-android-plugins/cordova.variables.gradle +3 -0
  393. package/platforms/android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml +3 -0
  394. package/platforms/android/capacitor-cordova-android-plugins/src/main/java/.gitkeep +1 -0
  395. package/platforms/android/capacitor-cordova-android-plugins/src/main/res/.gitkeep +1 -0
  396. package/platforms/android/capacitor.settings.gradle +45 -0
  397. package/platforms/android/fastlane/Appfile +2 -0
  398. package/platforms/android/fastlane/Fastfile +59 -0
  399. package/platforms/android/fastlane/metadata/android/en-US/full_description.txt +24 -0
  400. package/platforms/android/fastlane/metadata/android/en-US/short_description.txt +1 -0
  401. package/platforms/android/fastlane/metadata/android/en-US/title.txt +1 -0
  402. package/platforms/android/fastlane/metadata/android/en-US/video.txt +0 -0
  403. package/platforms/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  404. package/platforms/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  405. package/platforms/android/gradle.properties +27 -0
  406. package/platforms/android/gradlew +251 -0
  407. package/platforms/android/gradlew.bat +94 -0
  408. package/platforms/android/settings.gradle +13 -0
  409. package/platforms/android/variables.gradle +17 -0
  410. package/platforms/electrobun/.generated/brand-config.json +8 -0
  411. package/platforms/electrobun/README.md +44 -0
  412. package/platforms/electrobun/assets/appIcon.ico +0 -0
  413. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128.png +0 -0
  414. package/platforms/electrobun/assets/appIcon.iconset/icon_128x128@2x.png +0 -0
  415. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16.png +0 -0
  416. package/platforms/electrobun/assets/appIcon.iconset/icon_16x16@2x.png +0 -0
  417. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256.png +0 -0
  418. package/platforms/electrobun/assets/appIcon.iconset/icon_256x256@2x.png +0 -0
  419. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32.png +0 -0
  420. package/platforms/electrobun/assets/appIcon.iconset/icon_32x32@2x.png +0 -0
  421. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512.png +0 -0
  422. package/platforms/electrobun/assets/appIcon.iconset/icon_512x512@2x.png +0 -0
  423. package/platforms/electrobun/assets/appIcon.png +0 -0
  424. package/platforms/electrobun/assets/brand-config.json +8 -0
  425. package/platforms/electrobun/biome.json +11 -0
  426. package/platforms/electrobun/electrobun.config.ts +435 -0
  427. package/platforms/electrobun/entitlements/README.md +54 -0
  428. package/platforms/electrobun/entitlements/mas-child.entitlements +10 -0
  429. package/platforms/electrobun/entitlements/mas.entitlements +41 -0
  430. package/platforms/electrobun/native/macos/window-effects.mm +1030 -0
  431. package/platforms/electrobun/package.json +42 -0
  432. package/platforms/electrobun/scripts/bin/zip +2 -0
  433. package/platforms/electrobun/scripts/build-macos-effects.sh +31 -0
  434. package/platforms/electrobun/scripts/build-whisper-universal.sh +137 -0
  435. package/platforms/electrobun/scripts/build-whisper.sh +95 -0
  436. package/platforms/electrobun/scripts/ensure-whisper-model.sh +93 -0
  437. package/platforms/electrobun/scripts/hdiutil-wrapper.sh +33 -0
  438. package/platforms/electrobun/scripts/lib/app-dir.mjs +74 -0
  439. package/platforms/electrobun/scripts/lib/repo-root.mjs +77 -0
  440. package/platforms/electrobun/scripts/local-adhoc-sign-macos.ts +214 -0
  441. package/platforms/electrobun/scripts/macos-direct-launcher.c +84 -0
  442. package/platforms/electrobun/scripts/postwrap-diagnostics.ts +423 -0
  443. package/platforms/electrobun/scripts/postwrap-sign-runtime-macos.ts +352 -0
  444. package/platforms/electrobun/scripts/sign-windows.ps1 +121 -0
  445. package/platforms/electrobun/scripts/smoke-test-windows.ps1 +907 -0
  446. package/platforms/electrobun/scripts/smoke-test.sh +1186 -0
  447. package/platforms/electrobun/scripts/stage-macos-release-artifacts.sh +491 -0
  448. package/platforms/electrobun/scripts/sync-web-assets.mjs +48 -0
  449. package/platforms/electrobun/scripts/verify-rpc-handlers.ts +162 -0
  450. package/platforms/electrobun/scripts/verify-windows-installer-proof.ps1 +203 -0
  451. package/platforms/electrobun/scripts/xcrun-wrapper.sh +80 -0
  452. package/platforms/electrobun/scripts/zip-wrapper.sh +6 -0
  453. package/platforms/electrobun/src/__stubs__/bun-ffi.ts +51 -0
  454. package/platforms/electrobun/src/__stubs__/electrobun-bun.ts +20 -0
  455. package/platforms/electrobun/src/agent-ready-state.ts +35 -0
  456. package/platforms/electrobun/src/agent-reset-from-main.ts +87 -0
  457. package/platforms/electrobun/src/api-base.ts +169 -0
  458. package/platforms/electrobun/src/application-menu-action-registry.ts +21 -0
  459. package/platforms/electrobun/src/application-menu.ts +418 -0
  460. package/platforms/electrobun/src/background-notice.ts +65 -0
  461. package/platforms/electrobun/src/brand-config.ts +184 -0
  462. package/platforms/electrobun/src/bridge/browser-tabs-renderer-registry.ts +60 -0
  463. package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +430 -0
  464. package/platforms/electrobun/src/bridge/electrobun-preload.ts +1 -0
  465. package/platforms/electrobun/src/bridge/electrobun-stub.ts +21 -0
  466. package/platforms/electrobun/src/browser-workspace-bridge-server.ts +284 -0
  467. package/platforms/electrobun/src/cloud-auth-window.ts +216 -0
  468. package/platforms/electrobun/src/cloud-disconnect-from-main.ts +118 -0
  469. package/platforms/electrobun/src/constants.ts +2 -0
  470. package/platforms/electrobun/src/desktop-http-request.test.ts +85 -0
  471. package/platforms/electrobun/src/desktop-http-request.ts +103 -0
  472. package/platforms/electrobun/src/desktop-test-bridge-server.ts +248 -0
  473. package/platforms/electrobun/src/devtools-layout.ts +63 -0
  474. package/platforms/electrobun/src/diagnostic-format.ts +65 -0
  475. package/platforms/electrobun/src/fatal-shutdown.test.ts +30 -0
  476. package/platforms/electrobun/src/fatal-shutdown.ts +10 -0
  477. package/platforms/electrobun/src/floating-chat-window.ts +239 -0
  478. package/platforms/electrobun/src/index.ts +2510 -0
  479. package/platforms/electrobun/src/libMacWindowEffects.dylib +0 -0
  480. package/platforms/electrobun/src/lifecycle/api-base-owner.ts +119 -0
  481. package/platforms/electrobun/src/lifecycle/desktop-session-prime.ts +77 -0
  482. package/platforms/electrobun/src/logger.ts +23 -0
  483. package/platforms/electrobun/src/main-window-runtime.ts +117 -0
  484. package/platforms/electrobun/src/main-window-session.ts +88 -0
  485. package/platforms/electrobun/src/menu-reset-from-main.ts +211 -0
  486. package/platforms/electrobun/src/native/agent.ts +1963 -0
  487. package/platforms/electrobun/src/native/auth-bridge.ts +525 -0
  488. package/platforms/electrobun/src/native/browser-workspace.ts +574 -0
  489. package/platforms/electrobun/src/native/camera.ts +68 -0
  490. package/platforms/electrobun/src/native/canvas.ts +504 -0
  491. package/platforms/electrobun/src/native/credentials.ts +765 -0
  492. package/platforms/electrobun/src/native/desktop.ts +2317 -0
  493. package/platforms/electrobun/src/native/editor-bridge.ts +292 -0
  494. package/platforms/electrobun/src/native/file-watcher.ts +220 -0
  495. package/platforms/electrobun/src/native/gateway.ts +218 -0
  496. package/platforms/electrobun/src/native/gpu-window.ts +301 -0
  497. package/platforms/electrobun/src/native/index.ts +105 -0
  498. package/platforms/electrobun/src/native/location.ts +110 -0
  499. package/platforms/electrobun/src/native/loopback-port.ts +81 -0
  500. package/platforms/electrobun/src/native/mac-window-effects.ts +178 -0
  501. package/platforms/electrobun/src/native/music-player.ts +61 -0
  502. package/platforms/electrobun/src/native/permissions-shared.ts +171 -0
  503. package/platforms/electrobun/src/native/permissions.ts +242 -0
  504. package/platforms/electrobun/src/native/power-state.ts +195 -0
  505. package/platforms/electrobun/src/native/screencapture.ts +654 -0
  506. package/platforms/electrobun/src/native/steward.ts +343 -0
  507. package/platforms/electrobun/src/native/swabble.ts +349 -0
  508. package/platforms/electrobun/src/native/talkmode.ts +441 -0
  509. package/platforms/electrobun/src/native/webgpu-browser-support.ts +220 -0
  510. package/platforms/electrobun/src/native/whisper.ts +280 -0
  511. package/platforms/electrobun/src/preload-validation.ts +65 -0
  512. package/platforms/electrobun/src/preload.js +1 -0
  513. package/platforms/electrobun/src/print-electrobun-dev-settings-banner.ts +140 -0
  514. package/platforms/electrobun/src/renderer-static.ts +77 -0
  515. package/platforms/electrobun/src/rpc-handlers.ts +1079 -0
  516. package/platforms/electrobun/src/rpc-schema.ts +1870 -0
  517. package/platforms/electrobun/src/runtime-layout.ts +150 -0
  518. package/platforms/electrobun/src/runtime-permissions.ts +131 -0
  519. package/platforms/electrobun/src/screenshot-dev-server.ts +125 -0
  520. package/platforms/electrobun/src/startup-trace.ts +351 -0
  521. package/platforms/electrobun/src/surface-windows.ts +475 -0
  522. package/platforms/electrobun/src/types/web-speech.d.ts +52 -0
  523. package/platforms/electrobun/src/types.ts +18 -0
  524. package/platforms/electrobun/src/windows-cef-profile.ts +124 -0
  525. package/platforms/electrobun/tsconfig.json +75 -0
  526. package/platforms/electrobun/vitest.electrobun.config.ts +54 -0
  527. package/platforms/ios/App/App/App.entitlements +18 -0
  528. package/platforms/ios/App/App/AppDelegate.swift +93 -0
  529. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ios-marketing-1024.png +0 -0
  530. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@1x.png +0 -0
  531. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@2x.png +0 -0
  532. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@1x.png +0 -0
  533. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@2x.png +0 -0
  534. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@1x.png +0 -0
  535. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@2x.png +0 -0
  536. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@1x.png +0 -0
  537. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@2x.png +0 -0
  538. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-83_5x83_5@2x.png +0 -0
  539. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@2x.png +0 -0
  540. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@3x.png +0 -0
  541. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@2x.png +0 -0
  542. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@3x.png +0 -0
  543. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@2x.png +0 -0
  544. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@3x.png +0 -0
  545. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@2x.png +0 -0
  546. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@3x.png +0 -0
  547. package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +116 -0
  548. package/platforms/ios/App/App/Assets.xcassets/Contents.json +6 -0
  549. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
  550. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  551. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  552. package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  553. package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
  554. package/platforms/ios/App/App/Base.lproj/Main.storyboard +19 -0
  555. package/platforms/ios/App/App/ElizaIntentPlugin.swift +185 -0
  556. package/platforms/ios/App/App/Info.plist +123 -0
  557. package/platforms/ios/App/App/PrivacyInfo.xcprivacy +55 -0
  558. package/platforms/ios/App/App/SceneDelegate.swift +77 -0
  559. package/platforms/ios/App/App/WebsiteBlockerContentExtension/ActionRequestHandler.swift +142 -0
  560. package/platforms/ios/App/App/WebsiteBlockerContentExtension/Info.plist +29 -0
  561. package/platforms/ios/App/App/WebsiteBlockerContentExtension/PrivacyInfo.xcprivacy +23 -0
  562. package/platforms/ios/App/App/WebsiteBlockerContentExtension/WebsiteBlockerContentExtension.entitlements +10 -0
  563. package/platforms/ios/App/App.xcodeproj/project.pbxproj +596 -0
  564. package/platforms/ios/App/App.xcworkspace/contents.xcworkspacedata +10 -0
  565. package/platforms/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  566. package/platforms/ios/App/ExportOptions.plist +18 -0
  567. package/platforms/ios/App/Podfile +51 -0
  568. package/platforms/ios/App/Podfile.lock +131 -0
  569. package/platforms/ios/Gemfile +6 -0
  570. package/platforms/ios/fastlane/Appfile +4 -0
  571. package/platforms/ios/fastlane/Fastfile +94 -0
  572. package/platforms/ios/fastlane/Matchfile +12 -0
  573. package/platforms/ios/fastlane/metadata/en-US/description.txt +22 -0
  574. package/platforms/ios/fastlane/metadata/en-US/keywords.txt +1 -0
  575. package/platforms/ios/fastlane/metadata/en-US/marketing_url.txt +1 -0
  576. package/platforms/ios/fastlane/metadata/en-US/name.txt +1 -0
  577. package/platforms/ios/fastlane/metadata/en-US/privacy_url.txt +1 -0
  578. package/platforms/ios/fastlane/metadata/en-US/promotional_text.txt +1 -0
  579. package/platforms/ios/fastlane/metadata/en-US/subtitle.txt +1 -0
  580. package/platforms/ios/fastlane/metadata/en-US/support_url.txt +1 -0
  581. package/register-runtime-hooks.d.ts +2 -0
  582. package/register-runtime-hooks.d.ts.map +1 -0
  583. package/register-runtime-hooks.js +13 -0
  584. package/registry/generate-apps.d.ts +2 -0
  585. package/registry/generate-apps.d.ts.map +1 -0
  586. package/registry/generate-apps.js +338 -0
  587. package/registry/generate.d.ts +2 -0
  588. package/registry/generate.d.ts.map +1 -0
  589. package/registry/generate.js +506 -0
  590. package/registry/index.d.ts +6 -0
  591. package/registry/index.d.ts.map +1 -0
  592. package/registry/index.js +68 -0
  593. package/registry/loader.d.ts +27 -0
  594. package/registry/loader.d.ts.map +1 -0
  595. package/registry/loader.js +111 -0
  596. package/registry/schema.d.ts +989 -0
  597. package/registry/schema.d.ts.map +1 -0
  598. package/registry/schema.js +264 -0
  599. package/runtime/api-dev-settings-banner.d.ts +7 -0
  600. package/runtime/api-dev-settings-banner.d.ts.map +1 -0
  601. package/runtime/api-dev-settings-banner.js +104 -0
  602. package/runtime/app-route-plugin-registry.d.ts +3 -0
  603. package/runtime/app-route-plugin-registry.d.ts.map +1 -0
  604. package/runtime/app-route-plugin-registry.js +1 -0
  605. package/runtime/build-character-from-config.d.ts +3 -0
  606. package/runtime/build-character-from-config.d.ts.map +1 -0
  607. package/runtime/build-character-from-config.js +59 -0
  608. package/runtime/build-variant.d.ts +8 -0
  609. package/runtime/build-variant.d.ts.map +1 -0
  610. package/runtime/build-variant.js +7 -0
  611. package/runtime/channel-plugin-map.d.ts +6 -0
  612. package/runtime/channel-plugin-map.d.ts.map +1 -0
  613. package/runtime/channel-plugin-map.js +38 -0
  614. package/runtime/dev-server.d.ts +2 -0
  615. package/runtime/dev-server.d.ts.map +1 -0
  616. package/runtime/dev-server.js +383 -0
  617. package/runtime/dev-settings-figlet-heading.d.ts +22 -0
  618. package/runtime/dev-settings-figlet-heading.d.ts.map +1 -0
  619. package/runtime/dev-settings-figlet-heading.js +55 -0
  620. package/runtime/eliza.d.ts +21 -0
  621. package/runtime/eliza.d.ts.map +1 -0
  622. package/runtime/eliza.js +863 -0
  623. package/runtime/embedding-manager-support.d.ts +77 -0
  624. package/runtime/embedding-manager-support.d.ts.map +1 -0
  625. package/runtime/embedding-manager-support.js +309 -0
  626. package/runtime/embedding-presets.d.ts +5 -0
  627. package/runtime/embedding-presets.d.ts.map +1 -0
  628. package/runtime/embedding-presets.js +47 -0
  629. package/runtime/embedding-warmup-policy.d.ts +13 -0
  630. package/runtime/embedding-warmup-policy.d.ts.map +1 -0
  631. package/runtime/embedding-warmup-policy.js +33 -0
  632. package/runtime/ensure-local-inference-handler.d.ts +25 -0
  633. package/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  634. package/runtime/ensure-local-inference-handler.js +389 -0
  635. package/runtime/ensure-text-to-speech-handler.d.ts +18 -0
  636. package/runtime/ensure-text-to-speech-handler.d.ts.map +1 -0
  637. package/runtime/ensure-text-to-speech-handler.js +50 -0
  638. package/runtime/error-handlers.d.ts +12 -0
  639. package/runtime/error-handlers.d.ts.map +1 -0
  640. package/runtime/error-handlers.js +49 -0
  641. package/runtime/mobile-local-inference-gate.d.ts +21 -0
  642. package/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  643. package/runtime/mobile-local-inference-gate.js +24 -0
  644. package/runtime/mobile-safe-runtime.d.ts +123 -0
  645. package/runtime/mobile-safe-runtime.d.ts.map +1 -0
  646. package/runtime/mobile-safe-runtime.js +290 -0
  647. package/runtime/mode/remote-forwarder.d.ts +35 -0
  648. package/runtime/mode/remote-forwarder.d.ts.map +1 -0
  649. package/runtime/mode/remote-forwarder.js +119 -0
  650. package/runtime/mode/route-mode-guard.d.ts +21 -0
  651. package/runtime/mode/route-mode-guard.d.ts.map +1 -0
  652. package/runtime/mode/route-mode-guard.js +30 -0
  653. package/runtime/mode/route-mode-matrix.d.ts +64 -0
  654. package/runtime/mode/route-mode-matrix.d.ts.map +1 -0
  655. package/runtime/mode/route-mode-matrix.js +125 -0
  656. package/runtime/mode/runtime-mode.d.ts +72 -0
  657. package/runtime/mode/runtime-mode.d.ts.map +1 -0
  658. package/runtime/mode/runtime-mode.js +167 -0
  659. package/runtime/runtime-bootstrap-policy.d.ts +17 -0
  660. package/runtime/runtime-bootstrap-policy.d.ts.map +1 -0
  661. package/runtime/runtime-bootstrap-policy.js +37 -0
  662. package/runtime/sandbox-policy.d.ts +8 -0
  663. package/runtime/sandbox-policy.d.ts.map +1 -0
  664. package/runtime/sandbox-policy.js +7 -0
  665. package/runtime/startup-overlay.d.ts +14 -0
  666. package/runtime/startup-overlay.d.ts.map +1 -0
  667. package/runtime/startup-overlay.js +55 -0
  668. package/runtime/telegram-standalone-handler.d.ts +34 -0
  669. package/runtime/telegram-standalone-handler.d.ts.map +1 -0
  670. package/runtime/telegram-standalone-handler.js +195 -0
  671. package/runtime/telegram-standalone-policy.d.ts +2 -0
  672. package/runtime/telegram-standalone-policy.d.ts.map +1 -0
  673. package/runtime/telegram-standalone-policy.js +14 -0
  674. package/scripts/README.md +27 -0
  675. package/scripts/align-electrobun-version.mjs +37 -0
  676. package/scripts/aosp/README.md +66 -0
  677. package/scripts/aosp/avd-test.mjs +403 -0
  678. package/scripts/aosp/boot-validate.mjs +536 -0
  679. package/scripts/aosp/build-aosp.mjs +448 -0
  680. package/scripts/aosp/build-bootanimation.mjs +178 -0
  681. package/scripts/aosp/capture-screens.mjs +325 -0
  682. package/scripts/aosp/compile-libllama.mjs +1333 -0
  683. package/scripts/aosp/compile-shim.mjs +328 -0
  684. package/scripts/aosp/e2e-validate.mjs +225 -0
  685. package/scripts/aosp/lib/load-variant-config.mjs +182 -0
  686. package/scripts/aosp/lint-init-rc.mjs +258 -0
  687. package/scripts/aosp/llama-cpp-patches/README.md +49 -0
  688. package/scripts/aosp/llama-cpp-patches/apply-patches.mjs +198 -0
  689. package/scripts/aosp/llama-cpp-patches/polarquant/0001-Q4_POLAR-register-GGML_TYPE_Q4_POLAR-45-and-block_q4.patch +108 -0
  690. package/scripts/aosp/llama-cpp-patches/polarquant/0002-Q4_POLAR-vendor-PolarQuant-ref-kernels-into-ggml-bas.patch +460 -0
  691. package/scripts/aosp/llama-cpp-patches/polarquant/0003-tests-cover-Q4_POLAR-fix-latent-buffer-overflow.patch +102 -0
  692. package/scripts/aosp/llama-cpp-patches/polarquant/0004-Q4_POLAR-gate-QJL-residual-on-runtime-flag-default-o.patch +97 -0
  693. package/scripts/aosp/llama-cpp-patches/qjl/0001-ggml-add-GGML_TYPE_QJL1_256-GGML_OP_ATTN_SCORE_QJL-e.patch +120 -0
  694. package/scripts/aosp/llama-cpp-patches/qjl/0002-ggml-register-QJL1_256-type-traits-ATTN_SCORE_QJL-op.patch +1392 -0
  695. package/scripts/aosp/llama-cpp-patches/qjl/0003-ggml-set-QJL1_256-blck_size-to-head_dim-128-not-sket.patch +56 -0
  696. package/scripts/aosp/llama-cpp-patches/qjl/0004-tests-add-test-qjl-cache-verifying-type-traits-score.patch +335 -0
  697. package/scripts/aosp/llama-cpp-patches/qjl/0005-ggml-flip-block_qjl1_256-to-signs-then-norm.patch +69 -0
  698. package/scripts/aosp/llama-shim/eliza_llama_shim.c +276 -0
  699. package/scripts/aosp/seccomp-shim/loader-wrap.c +141 -0
  700. package/scripts/aosp/seccomp-shim/sigsys-handler.c +338 -0
  701. package/scripts/aosp/sim.mjs +277 -0
  702. package/scripts/aosp/smoke-cuttlefish.mjs +673 -0
  703. package/scripts/aosp/stage-default-models.mjs +340 -0
  704. package/scripts/aosp/stage-models-dfm.mjs +384 -0
  705. package/scripts/aosp/sync-to-aosp.mjs +134 -0
  706. package/scripts/aosp/validate.mjs +1273 -0
  707. package/scripts/aosp/variant-config-schema.ts +10 -0
  708. package/scripts/audit-live-test-surface.mjs +590 -0
  709. package/scripts/audit-server-test-surface.mjs +163 -0
  710. package/scripts/benchmark-preflight.mjs +170 -0
  711. package/scripts/bin/.gitkeep +0 -0
  712. package/scripts/build-bundled-agent-skills-artifact.mjs +58 -0
  713. package/scripts/build-bundled-orchestrator-artifact.mjs +66 -0
  714. package/scripts/build-capacitor-app.mjs +122 -0
  715. package/scripts/build-electrobun-preload.mjs +117 -0
  716. package/scripts/build-flatpak.mjs +125 -0
  717. package/scripts/build-image.sh +461 -0
  718. package/scripts/build-llama-cpp-dflash.mjs +1866 -0
  719. package/scripts/build-native-plugins.mjs +153 -0
  720. package/scripts/build-patched-electrobun-cli.mjs +424 -0
  721. package/scripts/build-win.mjs +82 -0
  722. package/scripts/bump-elizaos.sh +438 -0
  723. package/scripts/check-i18n.mjs +328 -0
  724. package/scripts/check-secret-hygiene.mjs +344 -0
  725. package/scripts/check-upstream-drift.mjs +102 -0
  726. package/scripts/clean-repo.mjs +187 -0
  727. package/scripts/codesign-mas.mjs +297 -0
  728. package/scripts/container-entrypoint.mjs +101 -0
  729. package/scripts/coordinator-cross-platform-review.mjs +192 -0
  730. package/scripts/copy-package-assets.mjs +31 -0
  731. package/scripts/copy-runtime-node-modules.ts +1782 -0
  732. package/scripts/coverage-policy.d.mts +16 -0
  733. package/scripts/coverage-policy.mjs +38 -0
  734. package/scripts/css-coverage.mjs +241 -0
  735. package/scripts/deploy-image.sh +318 -0
  736. package/scripts/desktop-build.mjs +867 -0
  737. package/scripts/desktop-stack-status.mjs +80 -0
  738. package/scripts/dev-platform.mjs +975 -0
  739. package/scripts/dev-ui.mjs +1178 -0
  740. package/scripts/dev-win.mjs +25 -0
  741. package/scripts/disable-local-eliza-workspace.mjs +420 -0
  742. package/scripts/docker-ci-smoke.sh +500 -0
  743. package/scripts/docker-entrypoint.sh +11 -0
  744. package/scripts/docker-runtime-review.mjs +230 -0
  745. package/scripts/docs-list.js +206 -0
  746. package/scripts/ensure-avatars.mjs +335 -0
  747. package/scripts/ensure-bundled-workspaces.mjs +143 -0
  748. package/scripts/ensure-capacitor-platform.mjs +58 -0
  749. package/scripts/ensure-electrobun-core.mjs +318 -0
  750. package/scripts/ensure-generated-core-proto-js.mjs +125 -0
  751. package/scripts/ensure-shared-i18n-data.mjs +67 -0
  752. package/scripts/ensure-skills.mjs +177 -0
  753. package/scripts/ensure-type-package-aliases.mjs +246 -0
  754. package/scripts/ensure-vision-deps.mjs +196 -0
  755. package/scripts/entry.ts +11 -0
  756. package/scripts/find-collisions.mjs +765 -0
  757. package/scripts/find-duplicate-components.mjs +203 -0
  758. package/scripts/fix-workspace-deps.mjs +328 -0
  759. package/scripts/generate-onboarding-voicelines.mjs +194 -0
  760. package/scripts/generate-plugin-index.js +1055 -0
  761. package/scripts/generate-static-asset-manifest.mjs +15 -0
  762. package/scripts/generated/static-asset-manifest.json +4 -0
  763. package/scripts/i18n-dynamic-keys.json +128 -0
  764. package/scripts/init-submodules.mjs +425 -0
  765. package/scripts/ios-xcframework/README.md +233 -0
  766. package/scripts/ios-xcframework/build-xcframework.mjs +487 -0
  767. package/scripts/kernel-patches/metal-kernels.mjs +656 -0
  768. package/scripts/kernel-patches/vulkan-dispatch-patches/01-vulkan-shaders-gen.patch +41 -0
  769. package/scripts/kernel-patches/vulkan-dispatch-patches/02-ggml-vulkan-pipelines.patch +86 -0
  770. package/scripts/kernel-patches/vulkan-kernels.mjs +281 -0
  771. package/scripts/lib/allocate-loopback-port.mjs +58 -0
  772. package/scripts/lib/api-supervisor.mjs +115 -0
  773. package/scripts/lib/app-dir.mjs +74 -0
  774. package/scripts/lib/asset-cdn.mjs +118 -0
  775. package/scripts/lib/bun-version-guard.mjs +44 -0
  776. package/scripts/lib/capacitor-platform-templates.mjs +306 -0
  777. package/scripts/lib/capacitor-plugin-build-needed.mjs +79 -0
  778. package/scripts/lib/capacitor-plugin-names.mjs +35 -0
  779. package/scripts/lib/desktop-preflight.mjs +122 -0
  780. package/scripts/lib/desktop-stack-status.mjs +151 -0
  781. package/scripts/lib/dev-ui-onchain.mjs +22 -0
  782. package/scripts/lib/dev-ui-vision.mjs +15 -0
  783. package/scripts/lib/kill-process-tree.mjs +87 -0
  784. package/scripts/lib/kill-ui-listen-port.mjs +74 -0
  785. package/scripts/lib/node-path-env.mjs +11 -0
  786. package/scripts/lib/orchestrator-desktop-dev-banner.mjs +285 -0
  787. package/scripts/lib/patch-bun-exports.mjs +1446 -0
  788. package/scripts/lib/read-app-identity.mjs +54 -0
  789. package/scripts/lib/release-check-pack-dry-run.ts +34 -0
  790. package/scripts/lib/repo-root.mjs +77 -0
  791. package/scripts/lib/stage-android-agent.mjs +704 -0
  792. package/scripts/lib/static-asset-manifest.mjs +151 -0
  793. package/scripts/lib/sync-eliza-env-aliases.mjs +37 -0
  794. package/scripts/lib/vite-renderer-dist-stale.mjs +141 -0
  795. package/scripts/lib/workspace-discovery.mjs +108 -0
  796. package/scripts/lifeops-prompt-benchmark.ts +206 -0
  797. package/scripts/link-browser-server.mjs +157 -0
  798. package/scripts/link-docker-local-app-packages.mjs +345 -0
  799. package/scripts/link-external-plugins.mjs +195 -0
  800. package/scripts/mobile-auth-simulator-smoke.mjs +373 -0
  801. package/scripts/normalize-parallax-capture.ts +97 -0
  802. package/scripts/omnivoice-fuse/Makefile +44 -0
  803. package/scripts/omnivoice-fuse/README.md +266 -0
  804. package/scripts/omnivoice-fuse/cmake-graft.mjs +180 -0
  805. package/scripts/omnivoice-fuse/ffi-stub.c +222 -0
  806. package/scripts/omnivoice-fuse/ffi.h +158 -0
  807. package/scripts/omnivoice-fuse/libelizainference_stub.dylib +0 -0
  808. package/scripts/omnivoice-fuse/prepare.mjs +263 -0
  809. package/scripts/omnivoice-fuse/verify-symbols.mjs +138 -0
  810. package/scripts/pack-upstreams.mjs +392 -0
  811. package/scripts/patch-deps.mjs +597 -0
  812. package/scripts/patch-workspace-plugins.mjs +148 -0
  813. package/scripts/playwright-ui-live-stack.ts +667 -0
  814. package/scripts/playwright-ui-smoke-api-stub.mjs +1838 -0
  815. package/scripts/plugin-index-local-additions.json +12 -0
  816. package/scripts/plugin-metadata-overrides.json +165 -0
  817. package/scripts/pre-review-local.mjs +599 -0
  818. package/scripts/prepare-ios-cocoapods.sh +30 -0
  819. package/scripts/prepare-package-dist.mjs +358 -0
  820. package/scripts/process-vrms.mjs +203 -0
  821. package/scripts/prune-cdn-local-assets.mjs +44 -0
  822. package/scripts/publish-local-plugins-next.mjs +122 -0
  823. package/scripts/release-check.ts +1402 -0
  824. package/scripts/relink-workspace-packages-to-dist.mjs +115 -0
  825. package/scripts/replace-workspace-versions.mjs +128 -0
  826. package/scripts/report-coverage-surfaces.mjs +121 -0
  827. package/scripts/restore-workspace-refs.mjs +128 -0
  828. package/scripts/rt.mjs +29 -0
  829. package/scripts/rt.sh +4 -0
  830. package/scripts/run-biome-check.mjs +191 -0
  831. package/scripts/run-coding-agent-e2e.mjs +46 -0
  832. package/scripts/run-desktop-playwright.mjs +35 -0
  833. package/scripts/run-local-plugin-live-smoke.mjs +185 -0
  834. package/scripts/run-mobile-build.mjs +3308 -0
  835. package/scripts/run-node-runtime.mjs +75 -0
  836. package/scripts/run-node-tsx.mjs +62 -0
  837. package/scripts/run-node.mjs +294 -0
  838. package/scripts/run-playwright.mjs +66 -0
  839. package/scripts/run-production-build.mjs +138 -0
  840. package/scripts/run-release-contract-suite.mjs +57 -0
  841. package/scripts/run-repo-setup.mjs +230 -0
  842. package/scripts/run-screenshotter.mjs +140 -0
  843. package/scripts/run-ui-smoke-playwright-suite.mjs +96 -0
  844. package/scripts/run-windows-smoke-launcher.ps1 +35 -0
  845. package/scripts/run-with-env.mjs +60 -0
  846. package/scripts/runtime-package-manifest.ts +107 -0
  847. package/scripts/sandbox-setup.sh +7 -0
  848. package/scripts/sanitize-npm-package-metadata.mjs +165 -0
  849. package/scripts/set-package-version.mjs +13 -0
  850. package/scripts/setup-upstreams.mjs +838 -0
  851. package/scripts/smoke-api-status.mjs +113 -0
  852. package/scripts/smoke-lifeops.mjs +305 -0
  853. package/scripts/startup-integration-script-drift.test.ts +94 -0
  854. package/scripts/sync-desktop-renderer.mjs +308 -0
  855. package/scripts/sync-dod-gap-issues-lib.mjs +214 -0
  856. package/scripts/sync-dod-gap-issues.mjs +218 -0
  857. package/scripts/type-audit.mjs +606 -0
  858. package/scripts/validate-cdn-assets.mjs +307 -0
  859. package/scripts/validate-regression-matrix.mjs +360 -0
  860. package/scripts/workspace-plugin-patches/plugin-anthropic-elizaos-core-api-compat.patch +34 -0
  861. package/scripts/workspace-prepare.mjs +192 -0
  862. package/scripts/worktree-env.sh +41 -0
  863. package/scripts/write-build-info.ts +69 -0
  864. package/scripts/write-homepage-release-data.mjs +393 -0
  865. package/security/agent-vault-id.d.ts +16 -0
  866. package/security/agent-vault-id.d.ts.map +1 -0
  867. package/security/agent-vault-id.js +32 -0
  868. package/security/cloud-secret-store.d.ts +34 -0
  869. package/security/cloud-secret-store.d.ts.map +1 -0
  870. package/security/cloud-secret-store.js +65 -0
  871. package/security/export-guard.d.ts +34 -0
  872. package/security/export-guard.d.ts.map +1 -0
  873. package/security/export-guard.js +127 -0
  874. package/security/hydrate-wallet-keys-from-platform-store.d.ts +13 -0
  875. package/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -0
  876. package/security/hydrate-wallet-keys-from-platform-store.js +116 -0
  877. package/security/platform-secure-store-node.d.ts +13 -0
  878. package/security/platform-secure-store-node.d.ts.map +1 -0
  879. package/security/platform-secure-store-node.js +311 -0
  880. package/security/platform-secure-store.d.ts +47 -0
  881. package/security/platform-secure-store.d.ts.map +1 -0
  882. package/security/platform-secure-store.js +10 -0
  883. package/security/wallet-os-store-actions.d.ts +45 -0
  884. package/security/wallet-os-store-actions.d.ts.map +1 -0
  885. package/security/wallet-os-store-actions.js +125 -0
  886. package/services/account-pool.d.ts +134 -0
  887. package/services/account-pool.d.ts.map +1 -0
  888. package/services/account-pool.js +693 -0
  889. package/services/account-usage.d.ts +75 -0
  890. package/services/account-usage.d.ts.map +1 -0
  891. package/services/account-usage.js +179 -0
  892. package/services/auth-store.d.ts +179 -0
  893. package/services/auth-store.d.ts.map +1 -0
  894. package/services/auth-store.js +404 -0
  895. package/services/cloud-jwks-store.d.ts +62 -0
  896. package/services/cloud-jwks-store.d.ts.map +1 -0
  897. package/services/cloud-jwks-store.js +118 -0
  898. package/services/connector-target-catalog.d.ts +78 -0
  899. package/services/connector-target-catalog.d.ts.map +1 -0
  900. package/services/connector-target-catalog.js +64 -0
  901. package/services/discord-target-source.d.ts +53 -0
  902. package/services/discord-target-source.d.ts.map +1 -0
  903. package/services/discord-target-source.js +116 -0
  904. package/services/github-credentials.d.ts +95 -0
  905. package/services/github-credentials.d.ts.map +1 -0
  906. package/services/github-credentials.js +144 -0
  907. package/services/local-inference/__stress__/cache-stress-helpers.d.ts +76 -0
  908. package/services/local-inference/__stress__/cache-stress-helpers.d.ts.map +1 -0
  909. package/services/local-inference/__stress__/cache-stress-helpers.js +238 -0
  910. package/services/local-inference/active-model.d.ts +180 -0
  911. package/services/local-inference/active-model.d.ts.map +1 -0
  912. package/services/local-inference/active-model.js +362 -0
  913. package/services/local-inference/assignments.d.ts +58 -0
  914. package/services/local-inference/assignments.d.ts.map +1 -0
  915. package/services/local-inference/assignments.js +179 -0
  916. package/services/local-inference/backend.d.ts +200 -0
  917. package/services/local-inference/backend.d.ts.map +1 -0
  918. package/services/local-inference/backend.js +242 -0
  919. package/services/local-inference/bundled-models.d.ts +34 -0
  920. package/services/local-inference/bundled-models.d.ts.map +1 -0
  921. package/services/local-inference/bundled-models.js +104 -0
  922. package/services/local-inference/cache-bridge.d.ts +184 -0
  923. package/services/local-inference/cache-bridge.d.ts.map +1 -0
  924. package/services/local-inference/cache-bridge.js +333 -0
  925. package/services/local-inference/catalog.d.ts +57 -0
  926. package/services/local-inference/catalog.d.ts.map +1 -0
  927. package/services/local-inference/catalog.js +262 -0
  928. package/services/local-inference/conversation-registry.d.ts +122 -0
  929. package/services/local-inference/conversation-registry.d.ts.map +1 -0
  930. package/services/local-inference/conversation-registry.js +182 -0
  931. package/services/local-inference/device-bridge.d.ts +139 -0
  932. package/services/local-inference/device-bridge.d.ts.map +1 -0
  933. package/services/local-inference/device-bridge.js +774 -0
  934. package/services/local-inference/dflash-doctor.d.ts +27 -0
  935. package/services/local-inference/dflash-doctor.d.ts.map +1 -0
  936. package/services/local-inference/dflash-doctor.js +149 -0
  937. package/services/local-inference/dflash-server.d.ts +248 -0
  938. package/services/local-inference/dflash-server.d.ts.map +1 -0
  939. package/services/local-inference/dflash-server.js +1076 -0
  940. package/services/local-inference/downloader.d.ts +48 -0
  941. package/services/local-inference/downloader.d.ts.map +1 -0
  942. package/services/local-inference/downloader.js +688 -0
  943. package/services/local-inference/engine.d.ts +282 -0
  944. package/services/local-inference/engine.d.ts.map +1 -0
  945. package/services/local-inference/engine.js +743 -0
  946. package/services/local-inference/external-scanner.d.ts +17 -0
  947. package/services/local-inference/external-scanner.d.ts.map +1 -0
  948. package/services/local-inference/external-scanner.js +261 -0
  949. package/services/local-inference/handler-registry.d.ts +72 -0
  950. package/services/local-inference/handler-registry.d.ts.map +1 -0
  951. package/services/local-inference/handler-registry.js +159 -0
  952. package/services/local-inference/hardware.d.ts +26 -0
  953. package/services/local-inference/hardware.d.ts.map +1 -0
  954. package/services/local-inference/hardware.js +139 -0
  955. package/services/local-inference/hf-search.d.ts +19 -0
  956. package/services/local-inference/hf-search.d.ts.map +1 -0
  957. package/services/local-inference/hf-search.js +169 -0
  958. package/services/local-inference/index.d.ts +10 -0
  959. package/services/local-inference/index.d.ts.map +1 -0
  960. package/services/local-inference/index.js +7 -0
  961. package/services/local-inference/llama-server-metrics.d.ts +108 -0
  962. package/services/local-inference/llama-server-metrics.d.ts.map +1 -0
  963. package/services/local-inference/llama-server-metrics.js +175 -0
  964. package/services/local-inference/manifest/index.d.ts +4 -0
  965. package/services/local-inference/manifest/index.d.ts.map +1 -0
  966. package/services/local-inference/manifest/index.js +5 -0
  967. package/services/local-inference/manifest/schema.d.ts +419 -0
  968. package/services/local-inference/manifest/schema.d.ts.map +1 -0
  969. package/services/local-inference/manifest/schema.js +227 -0
  970. package/services/local-inference/manifest/types.d.ts +23 -0
  971. package/services/local-inference/manifest/types.d.ts.map +1 -0
  972. package/services/local-inference/manifest/types.js +5 -0
  973. package/services/local-inference/manifest/validator.d.ts +43 -0
  974. package/services/local-inference/manifest/validator.d.ts.map +1 -0
  975. package/services/local-inference/manifest/validator.js +180 -0
  976. package/services/local-inference/paths.d.ts +8 -0
  977. package/services/local-inference/paths.d.ts.map +1 -0
  978. package/services/local-inference/paths.js +7 -0
  979. package/services/local-inference/providers.d.ts +61 -0
  980. package/services/local-inference/providers.d.ts.map +1 -0
  981. package/services/local-inference/providers.js +334 -0
  982. package/services/local-inference/ram-budget.d.ts +57 -0
  983. package/services/local-inference/ram-budget.d.ts.map +1 -0
  984. package/services/local-inference/ram-budget.js +107 -0
  985. package/services/local-inference/readiness.d.ts +9 -0
  986. package/services/local-inference/readiness.d.ts.map +1 -0
  987. package/services/local-inference/readiness.js +153 -0
  988. package/services/local-inference/recommendation.d.ts +62 -0
  989. package/services/local-inference/recommendation.d.ts.map +1 -0
  990. package/services/local-inference/recommendation.js +309 -0
  991. package/services/local-inference/registry.d.ts +35 -0
  992. package/services/local-inference/registry.d.ts.map +1 -0
  993. package/services/local-inference/registry.js +117 -0
  994. package/services/local-inference/router-handler.d.ts +51 -0
  995. package/services/local-inference/router-handler.d.ts.map +1 -0
  996. package/services/local-inference/router-handler.js +165 -0
  997. package/services/local-inference/routing-policy.d.ts +55 -0
  998. package/services/local-inference/routing-policy.d.ts.map +1 -0
  999. package/services/local-inference/routing-policy.js +195 -0
  1000. package/services/local-inference/routing-preferences.d.ts +8 -0
  1001. package/services/local-inference/routing-preferences.d.ts.map +1 -0
  1002. package/services/local-inference/routing-preferences.js +7 -0
  1003. package/services/local-inference/service.d.ts +88 -0
  1004. package/services/local-inference/service.d.ts.map +1 -0
  1005. package/services/local-inference/service.js +210 -0
  1006. package/services/local-inference/session-pool.d.ts +72 -0
  1007. package/services/local-inference/session-pool.d.ts.map +1 -0
  1008. package/services/local-inference/session-pool.js +125 -0
  1009. package/services/local-inference/types.d.ts +309 -0
  1010. package/services/local-inference/types.d.ts.map +1 -0
  1011. package/services/local-inference/types.js +23 -0
  1012. package/services/local-inference/verify.d.ts +8 -0
  1013. package/services/local-inference/verify.d.ts.map +1 -0
  1014. package/services/local-inference/verify.js +7 -0
  1015. package/services/local-inference/voice/barge-in.d.ts +15 -0
  1016. package/services/local-inference/voice/barge-in.d.ts.map +1 -0
  1017. package/services/local-inference/voice/barge-in.js +20 -0
  1018. package/services/local-inference/voice/engine-bridge.d.ts +256 -0
  1019. package/services/local-inference/voice/engine-bridge.d.ts.map +1 -0
  1020. package/services/local-inference/voice/engine-bridge.js +398 -0
  1021. package/services/local-inference/voice/ffi-bindings.d.ts +114 -0
  1022. package/services/local-inference/voice/ffi-bindings.d.ts.map +1 -0
  1023. package/services/local-inference/voice/ffi-bindings.js +281 -0
  1024. package/services/local-inference/voice/index.d.ts +51 -0
  1025. package/services/local-inference/voice/index.d.ts.map +1 -0
  1026. package/services/local-inference/voice/index.js +50 -0
  1027. package/services/local-inference/voice/lifecycle.d.ts +135 -0
  1028. package/services/local-inference/voice/lifecycle.d.ts.map +1 -0
  1029. package/services/local-inference/voice/lifecycle.js +189 -0
  1030. package/services/local-inference/voice/phoneme-tokenizer.d.ts +58 -0
  1031. package/services/local-inference/voice/phoneme-tokenizer.d.ts.map +1 -0
  1032. package/services/local-inference/voice/phoneme-tokenizer.js +53 -0
  1033. package/services/local-inference/voice/phrase-cache.d.ts +24 -0
  1034. package/services/local-inference/voice/phrase-cache.d.ts.map +1 -0
  1035. package/services/local-inference/voice/phrase-cache.js +32 -0
  1036. package/services/local-inference/voice/phrase-chunker.d.ts +20 -0
  1037. package/services/local-inference/voice/phrase-chunker.d.ts.map +1 -0
  1038. package/services/local-inference/voice/phrase-chunker.js +85 -0
  1039. package/services/local-inference/voice/ring-buffer.d.ts +40 -0
  1040. package/services/local-inference/voice/ring-buffer.d.ts.map +1 -0
  1041. package/services/local-inference/voice/ring-buffer.js +85 -0
  1042. package/services/local-inference/voice/rollback-queue.d.ts +24 -0
  1043. package/services/local-inference/voice/rollback-queue.d.ts.map +1 -0
  1044. package/services/local-inference/voice/rollback-queue.js +49 -0
  1045. package/services/local-inference/voice/scheduler.d.ts +47 -0
  1046. package/services/local-inference/voice/scheduler.d.ts.map +1 -0
  1047. package/services/local-inference/voice/scheduler.js +123 -0
  1048. package/services/local-inference/voice/shared-resources.d.ts +119 -0
  1049. package/services/local-inference/voice/shared-resources.d.ts.map +1 -0
  1050. package/services/local-inference/voice/shared-resources.js +83 -0
  1051. package/services/local-inference/voice/speaker-preset-cache.d.ts +28 -0
  1052. package/services/local-inference/voice/speaker-preset-cache.d.ts.map +1 -0
  1053. package/services/local-inference/voice/speaker-preset-cache.js +44 -0
  1054. package/services/local-inference/voice/types.d.ts +80 -0
  1055. package/services/local-inference/voice/types.d.ts.map +1 -0
  1056. package/services/local-inference/voice/voice-preset-format.d.ts +56 -0
  1057. package/services/local-inference/voice/voice-preset-format.d.ts.map +1 -0
  1058. package/services/local-inference/voice/voice-preset-format.js +184 -0
  1059. package/services/persistence.d.ts +48 -0
  1060. package/services/persistence.d.ts.map +1 -0
  1061. package/services/persistence.js +128 -0
  1062. package/services/plugin-installer.d.ts +22 -0
  1063. package/services/plugin-installer.d.ts.map +1 -0
  1064. package/services/plugin-installer.js +41 -0
  1065. package/services/secrets-manager-installer.d.ts +140 -0
  1066. package/services/secrets-manager-installer.d.ts.map +1 -0
  1067. package/services/secrets-manager-installer.js +374 -0
  1068. package/services/steward-credentials.d.ts +37 -0
  1069. package/services/steward-credentials.d.ts.map +1 -0
  1070. package/services/steward-credentials.js +93 -0
  1071. package/services/steward-sidecar/health-check.d.ts +9 -0
  1072. package/services/steward-sidecar/health-check.d.ts.map +1 -0
  1073. package/services/steward-sidecar/health-check.js +34 -0
  1074. package/services/steward-sidecar/helpers.d.ts +21 -0
  1075. package/services/steward-sidecar/helpers.d.ts.map +1 -0
  1076. package/services/steward-sidecar/helpers.js +71 -0
  1077. package/services/steward-sidecar/process-management.d.ts +9 -0
  1078. package/services/steward-sidecar/process-management.d.ts.map +1 -0
  1079. package/services/steward-sidecar/process-management.js +53 -0
  1080. package/services/steward-sidecar/types.d.ts +60 -0
  1081. package/services/steward-sidecar/types.d.ts.map +1 -0
  1082. package/services/steward-sidecar/types.js +17 -0
  1083. package/services/steward-sidecar/wallet-setup.d.ts +9 -0
  1084. package/services/steward-sidecar/wallet-setup.d.ts.map +1 -0
  1085. package/services/steward-sidecar/wallet-setup.js +114 -0
  1086. package/services/steward-sidecar.d.ts +70 -0
  1087. package/services/steward-sidecar.d.ts.map +1 -0
  1088. package/services/steward-sidecar.js +385 -0
  1089. package/services/tool-call-cache/index.d.ts +13 -0
  1090. package/services/tool-call-cache/index.d.ts.map +1 -0
  1091. package/services/tool-call-cache/index.js +11 -0
  1092. package/services/trigger-event-bridge.d.ts +52 -0
  1093. package/services/trigger-event-bridge.d.ts.map +1 -0
  1094. package/services/trigger-event-bridge.js +217 -0
  1095. package/services/update-notifier.d.ts +6 -0
  1096. package/services/update-notifier.d.ts.map +1 -0
  1097. package/services/update-notifier.js +33 -0
  1098. package/services/vault-bootstrap.d.ts +31 -0
  1099. package/services/vault-bootstrap.d.ts.map +1 -0
  1100. package/services/vault-bootstrap.js +209 -0
  1101. package/services/vault-mirror.d.ts +44 -0
  1102. package/services/vault-mirror.d.ts.map +1 -0
  1103. package/services/vault-mirror.js +80 -0
  1104. package/styles/electrobun-mac-window-drag.css +66 -0
  1105. package/test/helpers/__tests__/live-agent-test.smoke.test.ts +105 -0
  1106. package/test/helpers/action-assertions.ts +364 -0
  1107. package/test/helpers/action-spy.ts +354 -0
  1108. package/test/helpers/browser-launch.ts +103 -0
  1109. package/test/helpers/browser-mocks.ts +275 -0
  1110. package/test/helpers/conditional-tests.ts +42 -0
  1111. package/test/helpers/conversation-harness.ts +334 -0
  1112. package/test/helpers/http.ts +150 -0
  1113. package/test/helpers/i18n.ts +5 -0
  1114. package/test/helpers/isolated-config.ts +34 -0
  1115. package/test/helpers/live-agent-test.ts +660 -0
  1116. package/test/helpers/live-child-env.ts +72 -0
  1117. package/test/helpers/live-provider.test.ts +124 -0
  1118. package/test/helpers/live-provider.ts +362 -0
  1119. package/test/helpers/live-runtime-server.ts +88 -0
  1120. package/test/helpers/loopback.ts +33 -0
  1121. package/test/helpers/pglite-runtime.ts +173 -0
  1122. package/test/helpers/react-test.ts +40 -0
  1123. package/test/helpers/real-connector.ts +250 -0
  1124. package/test/helpers/real-runtime.ts +543 -0
  1125. package/test/helpers/skip-without.ts +53 -0
  1126. package/test/helpers/stochastic-test.ts +186 -0
  1127. package/test/helpers/test-utils.ts +94 -0
  1128. package/test/helpers/trajectory-assertions.ts +168 -0
  1129. package/test/helpers/trajectory-harness.test.ts +101 -0
  1130. package/test/helpers/trajectory-harness.ts +988 -0
  1131. package/test/scripts/managed-test-command.mjs +632 -0
  1132. package/test/scripts/task-agent-live-smoke.ts +1335 -0
  1133. package/test/scripts/test-parallel.mjs +237 -0
  1134. package/test/scripts/test-root-unit.mjs +169 -0
  1135. package/test/scripts/test-runner.mjs +78 -0
  1136. package/test/scripts/validate-all-features.sh +541 -0
  1137. package/test-support/test-helpers.d.ts +111 -0
  1138. package/test-support/test-helpers.d.ts.map +1 -0
  1139. package/test-support/test-helpers.js +410 -0
  1140. package/ui-compat.d.ts +3 -0
  1141. package/ui-compat.d.ts.map +1 -0
  1142. package/ui-compat.js +3 -0
  1143. package/utils/eliza-root.d.ts +9 -0
  1144. package/utils/eliza-root.d.ts.map +1 -0
  1145. package/utils/eliza-root.js +101 -0
  1146. package/utils/globals.d.ts +7 -0
  1147. package/utils/globals.d.ts.map +1 -0
  1148. package/utils/globals.js +47 -0
  1149. package/App.d.ts +0 -5
  1150. package/App.d.ts.map +0 -1
  1151. package/App.js +0 -220
  1152. package/LICENSE +0 -21
  1153. package/actions/character.d.ts +0 -39
  1154. package/actions/character.d.ts.map +0 -1
  1155. package/actions/character.js +0 -247
  1156. package/actions/chat-helpers.d.ts +0 -47
  1157. package/actions/chat-helpers.d.ts.map +0 -1
  1158. package/actions/chat-helpers.js +0 -79
  1159. package/actions/cloud.d.ts +0 -17
  1160. package/actions/cloud.d.ts.map +0 -1
  1161. package/actions/cloud.js +0 -43
  1162. package/actions/index.d.ts +0 -12
  1163. package/actions/index.d.ts.map +0 -1
  1164. package/actions/index.js +0 -11
  1165. package/actions/lifecycle.d.ts +0 -43
  1166. package/actions/lifecycle.d.ts.map +0 -1
  1167. package/actions/lifecycle.js +0 -118
  1168. package/actions/onboarding.d.ts +0 -13
  1169. package/actions/onboarding.d.ts.map +0 -1
  1170. package/actions/onboarding.js +0 -26
  1171. package/actions/triggers.d.ts +0 -23
  1172. package/actions/triggers.d.ts.map +0 -1
  1173. package/actions/triggers.js +0 -148
  1174. package/api/client.d.ts +0 -2742
  1175. package/api/client.d.ts.map +0 -1
  1176. package/api/client.js +0 -2520
  1177. package/api/index.d.ts +0 -2
  1178. package/api/index.d.ts.map +0 -1
  1179. package/api/index.js +0 -1
  1180. package/autonomy/index.d.ts +0 -48
  1181. package/autonomy/index.d.ts.map +0 -1
  1182. package/autonomy/index.js +0 -330
  1183. package/bridge/capacitor-bridge.d.ts +0 -153
  1184. package/bridge/capacitor-bridge.d.ts.map +0 -1
  1185. package/bridge/capacitor-bridge.js +0 -193
  1186. package/bridge/electrobun-rpc.d.ts +0 -28
  1187. package/bridge/electrobun-rpc.d.ts.map +0 -1
  1188. package/bridge/electrobun-rpc.js +0 -35
  1189. package/bridge/electrobun-runtime.d.ts +0 -3
  1190. package/bridge/electrobun-runtime.d.ts.map +0 -1
  1191. package/bridge/electrobun-runtime.js +0 -17
  1192. package/bridge/index.d.ts +0 -6
  1193. package/bridge/index.d.ts.map +0 -1
  1194. package/bridge/index.js +0 -5
  1195. package/bridge/native-plugins.d.ts +0 -82
  1196. package/bridge/native-plugins.d.ts.map +0 -1
  1197. package/bridge/native-plugins.js +0 -39
  1198. package/bridge/plugin-bridge.d.ts +0 -116
  1199. package/bridge/plugin-bridge.d.ts.map +0 -1
  1200. package/bridge/plugin-bridge.js +0 -203
  1201. package/bridge/storage-bridge.d.ts +0 -39
  1202. package/bridge/storage-bridge.d.ts.map +0 -1
  1203. package/bridge/storage-bridge.js +0 -135
  1204. package/chat/index.d.ts +0 -57
  1205. package/chat/index.d.ts.map +0 -1
  1206. package/chat/index.js +0 -160
  1207. package/coding/index.d.ts +0 -25
  1208. package/coding/index.d.ts.map +0 -1
  1209. package/coding/index.js +0 -25
  1210. package/components/AdvancedPageView.d.ts +0 -17
  1211. package/components/AdvancedPageView.d.ts.map +0 -1
  1212. package/components/AdvancedPageView.js +0 -146
  1213. package/components/AgentActivityBox.d.ts +0 -7
  1214. package/components/AgentActivityBox.d.ts.map +0 -1
  1215. package/components/AgentActivityBox.js +0 -25
  1216. package/components/ApiKeyConfig.d.ts +0 -26
  1217. package/components/ApiKeyConfig.d.ts.map +0 -1
  1218. package/components/ApiKeyConfig.js +0 -119
  1219. package/components/AppsPageView.d.ts +0 -7
  1220. package/components/AppsPageView.d.ts.map +0 -1
  1221. package/components/AppsPageView.js +0 -31
  1222. package/components/AppsView.d.ts +0 -8
  1223. package/components/AppsView.d.ts.map +0 -1
  1224. package/components/AppsView.js +0 -149
  1225. package/components/AvatarLoader.d.ts +0 -13
  1226. package/components/AvatarLoader.d.ts.map +0 -1
  1227. package/components/AvatarLoader.js +0 -53
  1228. package/components/AvatarSelector.d.ts +0 -23
  1229. package/components/AvatarSelector.d.ts.map +0 -1
  1230. package/components/AvatarSelector.js +0 -105
  1231. package/components/BscTradePanel.d.ts +0 -22
  1232. package/components/BscTradePanel.d.ts.map +0 -1
  1233. package/components/BscTradePanel.js +0 -221
  1234. package/components/BugReportModal.d.ts +0 -2
  1235. package/components/BugReportModal.d.ts.map +0 -1
  1236. package/components/BugReportModal.js +0 -219
  1237. package/components/CharacterRoster.d.ts +0 -31
  1238. package/components/CharacterRoster.d.ts.map +0 -1
  1239. package/components/CharacterRoster.js +0 -41
  1240. package/components/CharacterView.d.ts +0 -8
  1241. package/components/CharacterView.d.ts.map +0 -1
  1242. package/components/CharacterView.js +0 -685
  1243. package/components/ChatAvatar.d.ts +0 -8
  1244. package/components/ChatAvatar.d.ts.map +0 -1
  1245. package/components/ChatAvatar.js +0 -89
  1246. package/components/ChatComposer.d.ts +0 -37
  1247. package/components/ChatComposer.d.ts.map +0 -1
  1248. package/components/ChatComposer.js +0 -136
  1249. package/components/ChatMessage.d.ts +0 -24
  1250. package/components/ChatMessage.d.ts.map +0 -1
  1251. package/components/ChatMessage.js +0 -187
  1252. package/components/ChatModalView.d.ts +0 -10
  1253. package/components/ChatModalView.d.ts.map +0 -1
  1254. package/components/ChatModalView.js +0 -57
  1255. package/components/ChatView.d.ts +0 -14
  1256. package/components/ChatView.d.ts.map +0 -1
  1257. package/components/ChatView.js +0 -526
  1258. package/components/CloudOnboarding.d.ts +0 -7
  1259. package/components/CloudOnboarding.d.ts.map +0 -1
  1260. package/components/CloudOnboarding.js +0 -22
  1261. package/components/CloudSourceControls.d.ts +0 -13
  1262. package/components/CloudSourceControls.d.ts.map +0 -1
  1263. package/components/CloudSourceControls.js +0 -16
  1264. package/components/CodingAgentSettingsSection.d.ts +0 -8
  1265. package/components/CodingAgentSettingsSection.d.ts.map +0 -1
  1266. package/components/CodingAgentSettingsSection.js +0 -292
  1267. package/components/CommandPalette.d.ts +0 -2
  1268. package/components/CommandPalette.d.ts.map +0 -1
  1269. package/components/CommandPalette.js +0 -181
  1270. package/components/CompanionSceneHost.d.ts +0 -14
  1271. package/components/CompanionSceneHost.d.ts.map +0 -1
  1272. package/components/CompanionSceneHost.js +0 -362
  1273. package/components/CompanionShell.d.ts +0 -17
  1274. package/components/CompanionShell.d.ts.map +0 -1
  1275. package/components/CompanionShell.js +0 -15
  1276. package/components/CompanionView.d.ts +0 -2
  1277. package/components/CompanionView.d.ts.map +0 -1
  1278. package/components/CompanionView.js +0 -22
  1279. package/components/ConfigPageView.d.ts +0 -11
  1280. package/components/ConfigPageView.d.ts.map +0 -1
  1281. package/components/ConfigPageView.js +0 -311
  1282. package/components/ConfigSaveFooter.d.ts +0 -8
  1283. package/components/ConfigSaveFooter.d.ts.map +0 -1
  1284. package/components/ConfigSaveFooter.js +0 -10
  1285. package/components/ConfirmModal.d.ts +0 -61
  1286. package/components/ConfirmModal.d.ts.map +0 -1
  1287. package/components/ConfirmModal.js +0 -164
  1288. package/components/ConnectionFailedBanner.d.ts +0 -6
  1289. package/components/ConnectionFailedBanner.d.ts.map +0 -1
  1290. package/components/ConnectionFailedBanner.js +0 -22
  1291. package/components/ConnectorsPageView.d.ts +0 -7
  1292. package/components/ConnectorsPageView.d.ts.map +0 -1
  1293. package/components/ConnectorsPageView.js +0 -8
  1294. package/components/ConversationsSidebar.d.ts +0 -9
  1295. package/components/ConversationsSidebar.d.ts.map +0 -1
  1296. package/components/ConversationsSidebar.js +0 -116
  1297. package/components/CustomActionEditor.d.ts +0 -10
  1298. package/components/CustomActionEditor.d.ts.map +0 -1
  1299. package/components/CustomActionEditor.js +0 -596
  1300. package/components/CustomActionsPanel.d.ts +0 -9
  1301. package/components/CustomActionsPanel.d.ts.map +0 -1
  1302. package/components/CustomActionsPanel.js +0 -107
  1303. package/components/CustomActionsView.d.ts +0 -2
  1304. package/components/CustomActionsView.d.ts.map +0 -1
  1305. package/components/CustomActionsView.js +0 -134
  1306. package/components/DatabasePageView.d.ts +0 -5
  1307. package/components/DatabasePageView.d.ts.map +0 -1
  1308. package/components/DatabasePageView.js +0 -28
  1309. package/components/DatabaseView.d.ts +0 -9
  1310. package/components/DatabaseView.d.ts.map +0 -1
  1311. package/components/DatabaseView.js +0 -311
  1312. package/components/ElizaCloudDashboard.d.ts +0 -2
  1313. package/components/ElizaCloudDashboard.d.ts.map +0 -1
  1314. package/components/ElizaCloudDashboard.js +0 -657
  1315. package/components/EmotePicker.d.ts +0 -2
  1316. package/components/EmotePicker.d.ts.map +0 -1
  1317. package/components/EmotePicker.js +0 -343
  1318. package/components/ErrorBoundary.d.ts +0 -22
  1319. package/components/ErrorBoundary.d.ts.map +0 -1
  1320. package/components/ErrorBoundary.js +0 -31
  1321. package/components/FineTuningView.d.ts +0 -2
  1322. package/components/FineTuningView.d.ts.map +0 -1
  1323. package/components/FineTuningView.js +0 -433
  1324. package/components/FlaminaGuide.d.ts +0 -10
  1325. package/components/FlaminaGuide.d.ts.map +0 -1
  1326. package/components/FlaminaGuide.js +0 -64
  1327. package/components/GameView.d.ts +0 -11
  1328. package/components/GameView.d.ts.map +0 -1
  1329. package/components/GameView.js +0 -294
  1330. package/components/GameViewOverlay.d.ts +0 -8
  1331. package/components/GameViewOverlay.d.ts.map +0 -1
  1332. package/components/GameViewOverlay.js +0 -70
  1333. package/components/GlobalEmoteOverlay.d.ts +0 -2
  1334. package/components/GlobalEmoteOverlay.d.ts.map +0 -1
  1335. package/components/GlobalEmoteOverlay.js +0 -112
  1336. package/components/Header.d.ts +0 -9
  1337. package/components/Header.d.ts.map +0 -1
  1338. package/components/Header.js +0 -123
  1339. package/components/HeartbeatsView.d.ts +0 -2
  1340. package/components/HeartbeatsView.d.ts.map +0 -1
  1341. package/components/HeartbeatsView.js +0 -378
  1342. package/components/InventoryView.d.ts +0 -10
  1343. package/components/InventoryView.d.ts.map +0 -1
  1344. package/components/InventoryView.js +0 -176
  1345. package/components/KnowledgeView.d.ts +0 -20
  1346. package/components/KnowledgeView.d.ts.map +0 -1
  1347. package/components/KnowledgeView.js +0 -483
  1348. package/components/LanguageDropdown.d.ts +0 -30
  1349. package/components/LanguageDropdown.d.ts.map +0 -1
  1350. package/components/LanguageDropdown.js +0 -99
  1351. package/components/LifoMonitorPanel.d.ts +0 -21
  1352. package/components/LifoMonitorPanel.d.ts.map +0 -1
  1353. package/components/LifoMonitorPanel.js +0 -24
  1354. package/components/LifoSandboxView.d.ts +0 -5
  1355. package/components/LifoSandboxView.d.ts.map +0 -1
  1356. package/components/LifoSandboxView.js +0 -333
  1357. package/components/LoadingScreen.d.ts +0 -13
  1358. package/components/LoadingScreen.d.ts.map +0 -1
  1359. package/components/LoadingScreen.js +0 -70
  1360. package/components/LogsPageView.d.ts +0 -2
  1361. package/components/LogsPageView.d.ts.map +0 -1
  1362. package/components/LogsPageView.js +0 -7
  1363. package/components/LogsView.d.ts +0 -5
  1364. package/components/LogsView.d.ts.map +0 -1
  1365. package/components/LogsView.js +0 -71
  1366. package/components/MediaGalleryView.d.ts +0 -9
  1367. package/components/MediaGalleryView.d.ts.map +0 -1
  1368. package/components/MediaGalleryView.js +0 -236
  1369. package/components/MediaSettingsSection.d.ts +0 -11
  1370. package/components/MediaSettingsSection.d.ts.map +0 -1
  1371. package/components/MediaSettingsSection.js +0 -329
  1372. package/components/MessageContent.d.ts +0 -51
  1373. package/components/MessageContent.d.ts.map +0 -1
  1374. package/components/MessageContent.js +0 -553
  1375. package/components/OnboardingWizard.d.ts +0 -2
  1376. package/components/OnboardingWizard.d.ts.map +0 -1
  1377. package/components/OnboardingWizard.js +0 -86
  1378. package/components/PairingView.d.ts +0 -5
  1379. package/components/PairingView.d.ts.map +0 -1
  1380. package/components/PairingView.js +0 -29
  1381. package/components/PermissionsSection.d.ts +0 -20
  1382. package/components/PermissionsSection.d.ts.map +0 -1
  1383. package/components/PermissionsSection.js +0 -573
  1384. package/components/PluginsPageView.d.ts +0 -5
  1385. package/components/PluginsPageView.d.ts.map +0 -1
  1386. package/components/PluginsPageView.js +0 -8
  1387. package/components/PluginsView.d.ts +0 -21
  1388. package/components/PluginsView.d.ts.map +0 -1
  1389. package/components/PluginsView.js +0 -1534
  1390. package/components/ProviderSwitcher.d.ts +0 -42
  1391. package/components/ProviderSwitcher.d.ts.map +0 -1
  1392. package/components/ProviderSwitcher.js +0 -493
  1393. package/components/RestartBanner.d.ts +0 -2
  1394. package/components/RestartBanner.d.ts.map +0 -1
  1395. package/components/RestartBanner.js +0 -36
  1396. package/components/RuntimeView.d.ts +0 -10
  1397. package/components/RuntimeView.d.ts.map +0 -1
  1398. package/components/RuntimeView.js +0 -165
  1399. package/components/SaveCommandModal.d.ts +0 -12
  1400. package/components/SaveCommandModal.d.ts.map +0 -1
  1401. package/components/SaveCommandModal.js +0 -84
  1402. package/components/SecretsView.d.ts +0 -9
  1403. package/components/SecretsView.d.ts.map +0 -1
  1404. package/components/SecretsView.js +0 -249
  1405. package/components/SettingsView.d.ts +0 -9
  1406. package/components/SettingsView.d.ts.map +0 -1
  1407. package/components/SettingsView.js +0 -230
  1408. package/components/ShellOverlays.d.ts +0 -8
  1409. package/components/ShellOverlays.d.ts.map +0 -1
  1410. package/components/ShellOverlays.js +0 -10
  1411. package/components/ShortcutsOverlay.d.ts +0 -2
  1412. package/components/ShortcutsOverlay.d.ts.map +0 -1
  1413. package/components/ShortcutsOverlay.js +0 -79
  1414. package/components/SkillsView.d.ts +0 -11
  1415. package/components/SkillsView.d.ts.map +0 -1
  1416. package/components/SkillsView.js +0 -358
  1417. package/components/StartupFailureView.d.ts +0 -8
  1418. package/components/StartupFailureView.d.ts.map +0 -1
  1419. package/components/StartupFailureView.js +0 -16
  1420. package/components/StreamView.d.ts +0 -16
  1421. package/components/StreamView.d.ts.map +0 -1
  1422. package/components/StreamView.js +0 -300
  1423. package/components/StripeEmbeddedCheckout.d.ts +0 -24
  1424. package/components/StripeEmbeddedCheckout.d.ts.map +0 -1
  1425. package/components/StripeEmbeddedCheckout.js +0 -101
  1426. package/components/SubscriptionStatus.d.ts +0 -23
  1427. package/components/SubscriptionStatus.d.ts.map +0 -1
  1428. package/components/SubscriptionStatus.js +0 -301
  1429. package/components/SystemWarningBanner.d.ts +0 -6
  1430. package/components/SystemWarningBanner.d.ts.map +0 -1
  1431. package/components/SystemWarningBanner.js +0 -46
  1432. package/components/ThemeToggle.d.ts +0 -21
  1433. package/components/ThemeToggle.d.ts.map +0 -1
  1434. package/components/ThemeToggle.js +0 -24
  1435. package/components/TrajectoriesView.d.ts +0 -12
  1436. package/components/TrajectoriesView.d.ts.map +0 -1
  1437. package/components/TrajectoriesView.js +0 -183
  1438. package/components/TrajectoryDetailView.d.ts +0 -13
  1439. package/components/TrajectoryDetailView.d.ts.map +0 -1
  1440. package/components/TrajectoryDetailView.js +0 -112
  1441. package/components/TriggersView.d.ts +0 -2
  1442. package/components/TriggersView.d.ts.map +0 -1
  1443. package/components/TriggersView.js +0 -1
  1444. package/components/VectorBrowserView.d.ts +0 -10
  1445. package/components/VectorBrowserView.d.ts.map +0 -1
  1446. package/components/VectorBrowserView.js +0 -1000
  1447. package/components/VoiceConfigView.d.ts +0 -11
  1448. package/components/VoiceConfigView.d.ts.map +0 -1
  1449. package/components/VoiceConfigView.js +0 -331
  1450. package/components/VrmStage.d.ts +0 -28
  1451. package/components/VrmStage.d.ts.map +0 -1
  1452. package/components/VrmStage.js +0 -178
  1453. package/components/WhatsAppQrOverlay.d.ts +0 -8
  1454. package/components/WhatsAppQrOverlay.d.ts.map +0 -1
  1455. package/components/WhatsAppQrOverlay.js +0 -63
  1456. package/components/apps/AppDetailPane.d.ts +0 -15
  1457. package/components/apps/AppDetailPane.d.ts.map +0 -1
  1458. package/components/apps/AppDetailPane.js +0 -13
  1459. package/components/apps/AppsCatalogGrid.d.ts +0 -20
  1460. package/components/apps/AppsCatalogGrid.d.ts.map +0 -1
  1461. package/components/apps/AppsCatalogGrid.js +0 -18
  1462. package/components/apps/extensions/registry.d.ts +0 -4
  1463. package/components/apps/extensions/registry.d.ts.map +0 -1
  1464. package/components/apps/extensions/registry.js +0 -7
  1465. package/components/apps/extensions/types.d.ts +0 -7
  1466. package/components/apps/extensions/types.d.ts.map +0 -1
  1467. package/components/apps/helpers.d.ts +0 -7
  1468. package/components/apps/helpers.d.ts.map +0 -1
  1469. package/components/apps/helpers.js +0 -44
  1470. package/components/avatar/VrmAnimationLoader.d.ts +0 -30
  1471. package/components/avatar/VrmAnimationLoader.d.ts.map +0 -1
  1472. package/components/avatar/VrmAnimationLoader.js +0 -99
  1473. package/components/avatar/VrmBlinkController.d.ts +0 -37
  1474. package/components/avatar/VrmBlinkController.d.ts.map +0 -1
  1475. package/components/avatar/VrmBlinkController.js +0 -98
  1476. package/components/avatar/VrmCameraManager.d.ts +0 -57
  1477. package/components/avatar/VrmCameraManager.d.ts.map +0 -1
  1478. package/components/avatar/VrmCameraManager.js +0 -277
  1479. package/components/avatar/VrmEngine.d.ts +0 -246
  1480. package/components/avatar/VrmEngine.d.ts.map +0 -1
  1481. package/components/avatar/VrmEngine.js +0 -2087
  1482. package/components/avatar/VrmFootShadow.d.ts +0 -18
  1483. package/components/avatar/VrmFootShadow.d.ts.map +0 -1
  1484. package/components/avatar/VrmFootShadow.js +0 -83
  1485. package/components/avatar/VrmViewer.d.ts +0 -60
  1486. package/components/avatar/VrmViewer.d.ts.map +0 -1
  1487. package/components/avatar/VrmViewer.js +0 -396
  1488. package/components/avatar/mixamoVRMRigMap.d.ts +0 -3
  1489. package/components/avatar/mixamoVRMRigMap.d.ts.map +0 -1
  1490. package/components/avatar/mixamoVRMRigMap.js +0 -56
  1491. package/components/avatar/retargetMixamoFbxToVrm.d.ts +0 -9
  1492. package/components/avatar/retargetMixamoFbxToVrm.d.ts.map +0 -1
  1493. package/components/avatar/retargetMixamoFbxToVrm.js +0 -88
  1494. package/components/avatar/retargetMixamoGltfToVrm.d.ts +0 -11
  1495. package/components/avatar/retargetMixamoGltfToVrm.d.ts.map +0 -1
  1496. package/components/avatar/retargetMixamoGltfToVrm.js +0 -80
  1497. package/components/chainConfig.d.ts +0 -89
  1498. package/components/chainConfig.d.ts.map +0 -1
  1499. package/components/chainConfig.js +0 -287
  1500. package/components/companion/CompanionHeader.d.ts +0 -15
  1501. package/components/companion/CompanionHeader.d.ts.map +0 -1
  1502. package/components/companion/CompanionHeader.js +0 -7
  1503. package/components/companion/CompanionSceneHost.d.ts +0 -2
  1504. package/components/companion/CompanionSceneHost.d.ts.map +0 -1
  1505. package/components/companion/CompanionSceneHost.js +0 -1
  1506. package/components/companion/VrmStage.d.ts +0 -3
  1507. package/components/companion/VrmStage.d.ts.map +0 -1
  1508. package/components/companion/VrmStage.js +0 -1
  1509. package/components/companion/index.d.ts +0 -18
  1510. package/components/companion/index.d.ts.map +0 -1
  1511. package/components/companion/index.js +0 -17
  1512. package/components/companion/walletUtils.d.ts +0 -95
  1513. package/components/companion/walletUtils.d.ts.map +0 -1
  1514. package/components/companion/walletUtils.js +0 -167
  1515. package/components/companion-shell-styles.d.ts +0 -38
  1516. package/components/companion-shell-styles.d.ts.map +0 -1
  1517. package/components/companion-shell-styles.js +0 -248
  1518. package/components/confirm-delete-control.d.ts +0 -16
  1519. package/components/confirm-delete-control.d.ts.map +0 -1
  1520. package/components/confirm-delete-control.js +0 -12
  1521. package/components/conversations/ConversationListItem.d.ts +0 -31
  1522. package/components/conversations/ConversationListItem.d.ts.map +0 -1
  1523. package/components/conversations/ConversationListItem.js +0 -52
  1524. package/components/conversations/conversation-utils.d.ts +0 -9
  1525. package/components/conversations/conversation-utils.d.ts.map +0 -1
  1526. package/components/conversations/conversation-utils.js +0 -138
  1527. package/components/format.d.ts +0 -54
  1528. package/components/format.d.ts.map +0 -1
  1529. package/components/format.js +0 -82
  1530. package/components/index.d.ts +0 -96
  1531. package/components/index.d.ts.map +0 -1
  1532. package/components/index.js +0 -95
  1533. package/components/inventory/CopyableAddress.d.ts +0 -8
  1534. package/components/inventory/CopyableAddress.d.ts.map +0 -1
  1535. package/components/inventory/CopyableAddress.js +0 -18
  1536. package/components/inventory/InventoryToolbar.d.ts +0 -25
  1537. package/components/inventory/InventoryToolbar.d.ts.map +0 -1
  1538. package/components/inventory/InventoryToolbar.js +0 -28
  1539. package/components/inventory/NftGrid.d.ts +0 -13
  1540. package/components/inventory/NftGrid.d.ts.map +0 -1
  1541. package/components/inventory/NftGrid.js +0 -29
  1542. package/components/inventory/TokenLogo.d.ts +0 -12
  1543. package/components/inventory/TokenLogo.d.ts.map +0 -1
  1544. package/components/inventory/TokenLogo.js +0 -33
  1545. package/components/inventory/TokensTable.d.ts +0 -24
  1546. package/components/inventory/TokensTable.d.ts.map +0 -1
  1547. package/components/inventory/TokensTable.js +0 -26
  1548. package/components/inventory/constants.d.ts +0 -52
  1549. package/components/inventory/constants.d.ts.map +0 -1
  1550. package/components/inventory/constants.js +0 -121
  1551. package/components/inventory/index.d.ts +0 -9
  1552. package/components/inventory/index.d.ts.map +0 -1
  1553. package/components/inventory/index.js +0 -8
  1554. package/components/inventory/media-url.d.ts +0 -6
  1555. package/components/inventory/media-url.d.ts.map +0 -1
  1556. package/components/inventory/media-url.js +0 -28
  1557. package/components/inventory/useInventoryData.d.ts +0 -53
  1558. package/components/inventory/useInventoryData.d.ts.map +0 -1
  1559. package/components/inventory/useInventoryData.js +0 -332
  1560. package/components/knowledge-upload-image.d.ts +0 -27
  1561. package/components/knowledge-upload-image.d.ts.map +0 -1
  1562. package/components/knowledge-upload-image.js +0 -146
  1563. package/components/labels.d.ts +0 -6
  1564. package/components/labels.d.ts.map +0 -1
  1565. package/components/labels.js +0 -40
  1566. package/components/onboarding/ActivateStep.d.ts +0 -2
  1567. package/components/onboarding/ActivateStep.d.ts.map +0 -1
  1568. package/components/onboarding/ActivateStep.js +0 -10
  1569. package/components/onboarding/CloudLoginStep.d.ts +0 -2
  1570. package/components/onboarding/CloudLoginStep.d.ts.map +0 -1
  1571. package/components/onboarding/CloudLoginStep.js +0 -20
  1572. package/components/onboarding/ConnectionStep.d.ts +0 -2
  1573. package/components/onboarding/ConnectionStep.d.ts.map +0 -1
  1574. package/components/onboarding/ConnectionStep.js +0 -609
  1575. package/components/onboarding/IdentityStep.d.ts +0 -2
  1576. package/components/onboarding/IdentityStep.d.ts.map +0 -1
  1577. package/components/onboarding/IdentityStep.js +0 -102
  1578. package/components/onboarding/OnboardingPanel.d.ts +0 -9
  1579. package/components/onboarding/OnboardingPanel.d.ts.map +0 -1
  1580. package/components/onboarding/OnboardingPanel.js +0 -24
  1581. package/components/onboarding/OnboardingStepNav.d.ts +0 -2
  1582. package/components/onboarding/OnboardingStepNav.d.ts.map +0 -1
  1583. package/components/onboarding/OnboardingStepNav.js +0 -24
  1584. package/components/onboarding/PermissionsStep.d.ts +0 -2
  1585. package/components/onboarding/PermissionsStep.d.ts.map +0 -1
  1586. package/components/onboarding/PermissionsStep.js +0 -7
  1587. package/components/onboarding/RpcStep.d.ts +0 -2
  1588. package/components/onboarding/RpcStep.d.ts.map +0 -1
  1589. package/components/onboarding/RpcStep.js +0 -125
  1590. package/components/onboarding/SaveKeysStep.d.ts +0 -2
  1591. package/components/onboarding/SaveKeysStep.d.ts.map +0 -1
  1592. package/components/onboarding/SaveKeysStep.js +0 -44
  1593. package/components/onboarding/WelcomeStep.d.ts +0 -2
  1594. package/components/onboarding/WelcomeStep.d.ts.map +0 -1
  1595. package/components/onboarding/WelcomeStep.js +0 -30
  1596. package/components/permissions/PermissionIcon.d.ts +0 -4
  1597. package/components/permissions/PermissionIcon.d.ts.map +0 -1
  1598. package/components/permissions/PermissionIcon.js +0 -12
  1599. package/components/permissions/StreamingPermissions.d.ts +0 -20
  1600. package/components/permissions/StreamingPermissions.d.ts.map +0 -1
  1601. package/components/permissions/StreamingPermissions.js +0 -178
  1602. package/components/plugins/showcase-data.d.ts +0 -7
  1603. package/components/plugins/showcase-data.d.ts.map +0 -1
  1604. package/components/plugins/showcase-data.js +0 -464
  1605. package/components/shared/ShellHeaderControls.d.ts +0 -27
  1606. package/components/shared/ShellHeaderControls.d.ts.map +0 -1
  1607. package/components/shared/ShellHeaderControls.js +0 -55
  1608. package/components/shared-companion-scene-context.d.ts +0 -3
  1609. package/components/shared-companion-scene-context.d.ts.map +0 -1
  1610. package/components/shared-companion-scene-context.js +0 -13
  1611. package/components/skeletons.d.ts +0 -17
  1612. package/components/skeletons.d.ts.map +0 -1
  1613. package/components/skeletons.js +0 -22
  1614. package/components/stream/ActivityFeed.d.ts +0 -5
  1615. package/components/stream/ActivityFeed.d.ts.map +0 -1
  1616. package/components/stream/ActivityFeed.js +0 -57
  1617. package/components/stream/AvatarPip.d.ts +0 -5
  1618. package/components/stream/AvatarPip.d.ts.map +0 -1
  1619. package/components/stream/AvatarPip.js +0 -6
  1620. package/components/stream/ChatContent.d.ts +0 -6
  1621. package/components/stream/ChatContent.d.ts.map +0 -1
  1622. package/components/stream/ChatContent.js +0 -69
  1623. package/components/stream/ChatTicker.d.ts +0 -5
  1624. package/components/stream/ChatTicker.d.ts.map +0 -1
  1625. package/components/stream/ChatTicker.js +0 -34
  1626. package/components/stream/IdleContent.d.ts +0 -5
  1627. package/components/stream/IdleContent.d.ts.map +0 -1
  1628. package/components/stream/IdleContent.js +0 -17
  1629. package/components/stream/StatusBar.d.ts +0 -36
  1630. package/components/stream/StatusBar.d.ts.map +0 -1
  1631. package/components/stream/StatusBar.js +0 -140
  1632. package/components/stream/StreamSettings.d.ts +0 -33
  1633. package/components/stream/StreamSettings.d.ts.map +0 -1
  1634. package/components/stream/StreamSettings.js +0 -99
  1635. package/components/stream/StreamTerminal.d.ts +0 -2
  1636. package/components/stream/StreamTerminal.d.ts.map +0 -1
  1637. package/components/stream/StreamTerminal.js +0 -52
  1638. package/components/stream/StreamVoiceConfig.d.ts +0 -10
  1639. package/components/stream/StreamVoiceConfig.d.ts.map +0 -1
  1640. package/components/stream/StreamVoiceConfig.js +0 -88
  1641. package/components/stream/helpers.d.ts +0 -32
  1642. package/components/stream/helpers.d.ts.map +0 -1
  1643. package/components/stream/helpers.js +0 -110
  1644. package/components/stream/overlays/OverlayLayer.d.ts +0 -20
  1645. package/components/stream/overlays/OverlayLayer.d.ts.map +0 -1
  1646. package/components/stream/overlays/OverlayLayer.js +0 -24
  1647. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts +0 -8
  1648. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts.map +0 -1
  1649. package/components/stream/overlays/built-in/ActionTickerWidget.js +0 -44
  1650. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts +0 -7
  1651. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts.map +0 -1
  1652. package/components/stream/overlays/built-in/AlertPopupWidget.js +0 -62
  1653. package/components/stream/overlays/built-in/BrandingWidget.d.ts +0 -7
  1654. package/components/stream/overlays/built-in/BrandingWidget.d.ts.map +0 -1
  1655. package/components/stream/overlays/built-in/BrandingWidget.js +0 -36
  1656. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts +0 -26
  1657. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +0 -1
  1658. package/components/stream/overlays/built-in/CustomHtmlWidget.js +0 -78
  1659. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts +0 -11
  1660. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts.map +0 -1
  1661. package/components/stream/overlays/built-in/PeonGlassWidget.js +0 -188
  1662. package/components/stream/overlays/built-in/PeonHudWidget.d.ts +0 -10
  1663. package/components/stream/overlays/built-in/PeonHudWidget.d.ts.map +0 -1
  1664. package/components/stream/overlays/built-in/PeonHudWidget.js +0 -168
  1665. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts +0 -11
  1666. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +0 -1
  1667. package/components/stream/overlays/built-in/PeonSakuraWidget.js +0 -213
  1668. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +0 -8
  1669. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +0 -1
  1670. package/components/stream/overlays/built-in/ThoughtBubbleWidget.js +0 -59
  1671. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts +0 -7
  1672. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts.map +0 -1
  1673. package/components/stream/overlays/built-in/ViewerCountWidget.js +0 -34
  1674. package/components/stream/overlays/built-in/index.d.ts +0 -13
  1675. package/components/stream/overlays/built-in/index.d.ts.map +0 -1
  1676. package/components/stream/overlays/built-in/index.js +0 -12
  1677. package/components/stream/overlays/registry.d.ts +0 -11
  1678. package/components/stream/overlays/registry.d.ts.map +0 -1
  1679. package/components/stream/overlays/registry.js +0 -16
  1680. package/components/stream/overlays/types.d.ts +0 -67
  1681. package/components/stream/overlays/types.d.ts.map +0 -1
  1682. package/components/stream/overlays/types.js +0 -7
  1683. package/components/stream/overlays/useOverlayLayout.d.ts +0 -27
  1684. package/components/stream/overlays/useOverlayLayout.d.ts.map +0 -1
  1685. package/components/stream/overlays/useOverlayLayout.js +0 -162
  1686. package/components/trajectory-format.d.ts +0 -6
  1687. package/components/trajectory-format.d.ts.map +0 -1
  1688. package/components/trajectory-format.js +0 -43
  1689. package/components/ui-badges.d.ts +0 -23
  1690. package/components/ui-badges.d.ts.map +0 -1
  1691. package/components/ui-badges.js +0 -38
  1692. package/components/ui-switch.d.ts +0 -14
  1693. package/components/ui-switch.d.ts.map +0 -1
  1694. package/components/ui-switch.js +0 -15
  1695. package/components/vector-browser-three.d.ts +0 -4
  1696. package/components/vector-browser-three.d.ts.map +0 -1
  1697. package/components/vector-browser-three.js +0 -21
  1698. package/config/branding.d.ts +0 -49
  1699. package/config/branding.d.ts.map +0 -1
  1700. package/config/branding.js +0 -16
  1701. package/config/config-catalog.d.ts +0 -376
  1702. package/config/config-catalog.d.ts.map +0 -1
  1703. package/config/config-catalog.js +0 -724
  1704. package/config/config-field.d.ts +0 -68
  1705. package/config/config-field.d.ts.map +0 -1
  1706. package/config/config-field.js +0 -840
  1707. package/config/config-renderer.d.ts +0 -176
  1708. package/config/config-renderer.d.ts.map +0 -1
  1709. package/config/config-renderer.js +0 -405
  1710. package/config/index.d.ts +0 -6
  1711. package/config/index.d.ts.map +0 -1
  1712. package/config/index.js +0 -5
  1713. package/config/ui-renderer.d.ts +0 -26
  1714. package/config/ui-renderer.d.ts.map +0 -1
  1715. package/config/ui-renderer.js +0 -815
  1716. package/config/ui-spec.d.ts +0 -164
  1717. package/config/ui-spec.d.ts.map +0 -1
  1718. package/config/ui-spec.js +0 -13
  1719. package/events/index.d.ts +0 -48
  1720. package/events/index.d.ts.map +0 -1
  1721. package/events/index.js +0 -45
  1722. package/hooks/index.d.ts +0 -15
  1723. package/hooks/index.d.ts.map +0 -1
  1724. package/hooks/index.js +0 -14
  1725. package/hooks/useBugReport.d.ts +0 -14
  1726. package/hooks/useBugReport.d.ts.map +0 -1
  1727. package/hooks/useBugReport.js +0 -18
  1728. package/hooks/useCanvasWindow.d.ts +0 -38
  1729. package/hooks/useCanvasWindow.d.ts.map +0 -1
  1730. package/hooks/useCanvasWindow.js +0 -273
  1731. package/hooks/useChatAvatarVoice.d.ts +0 -10
  1732. package/hooks/useChatAvatarVoice.d.ts.map +0 -1
  1733. package/hooks/useChatAvatarVoice.js +0 -71
  1734. package/hooks/useClickOutside.d.ts +0 -6
  1735. package/hooks/useClickOutside.d.ts.map +0 -1
  1736. package/hooks/useClickOutside.js +0 -25
  1737. package/hooks/useContextMenu.d.ts +0 -17
  1738. package/hooks/useContextMenu.d.ts.map +0 -1
  1739. package/hooks/useContextMenu.js +0 -100
  1740. package/hooks/useKeyboardShortcuts.d.ts +0 -17
  1741. package/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  1742. package/hooks/useKeyboardShortcuts.js +0 -67
  1743. package/hooks/useLifoSync.d.ts +0 -18
  1744. package/hooks/useLifoSync.d.ts.map +0 -1
  1745. package/hooks/useLifoSync.js +0 -113
  1746. package/hooks/useMemoryMonitor.d.ts +0 -87
  1747. package/hooks/useMemoryMonitor.d.ts.map +0 -1
  1748. package/hooks/useMemoryMonitor.js +0 -209
  1749. package/hooks/useRenderGuard.d.ts +0 -17
  1750. package/hooks/useRenderGuard.d.ts.map +0 -1
  1751. package/hooks/useRenderGuard.js +0 -36
  1752. package/hooks/useRetakeCapture.d.ts +0 -12
  1753. package/hooks/useRetakeCapture.d.ts.map +0 -1
  1754. package/hooks/useRetakeCapture.js +0 -60
  1755. package/hooks/useStreamPopoutNavigation.d.ts +0 -3
  1756. package/hooks/useStreamPopoutNavigation.d.ts.map +0 -1
  1757. package/hooks/useStreamPopoutNavigation.js +0 -17
  1758. package/hooks/useTimeout.d.ts +0 -11
  1759. package/hooks/useTimeout.d.ts.map +0 -1
  1760. package/hooks/useTimeout.js +0 -32
  1761. package/hooks/useVoiceChat.d.ts +0 -94
  1762. package/hooks/useVoiceChat.d.ts.map +0 -1
  1763. package/hooks/useVoiceChat.js +0 -1077
  1764. package/hooks/useWhatsAppPairing.d.ts +0 -11
  1765. package/hooks/useWhatsAppPairing.d.ts.map +0 -1
  1766. package/hooks/useWhatsAppPairing.js +0 -95
  1767. package/i18n/index.d.ts +0 -7
  1768. package/i18n/index.d.ts.map +0 -1
  1769. package/i18n/index.js +0 -53
  1770. package/i18n/locales/en.json +0 -1268
  1771. package/i18n/locales/es.json +0 -1236
  1772. package/i18n/locales/ko.json +0 -1236
  1773. package/i18n/locales/pt.json +0 -1236
  1774. package/i18n/locales/zh-CN.json +0 -1236
  1775. package/i18n/messages.d.ts +0 -6
  1776. package/i18n/messages.d.ts.map +0 -1
  1777. package/i18n/messages.js +0 -14
  1778. package/navigation/index.d.ts +0 -27
  1779. package/navigation/index.d.ts.map +0 -1
  1780. package/navigation/index.js +0 -232
  1781. package/onboarding-config.d.ts +0 -25
  1782. package/onboarding-config.d.ts.map +0 -1
  1783. package/onboarding-config.js +0 -76
  1784. package/platform/browser-launch.d.ts +0 -2
  1785. package/platform/browser-launch.d.ts.map +0 -1
  1786. package/platform/browser-launch.js +0 -109
  1787. package/platform/index.d.ts +0 -14
  1788. package/platform/index.d.ts.map +0 -1
  1789. package/platform/index.js +0 -24
  1790. package/platform/init.d.ts +0 -40
  1791. package/platform/init.d.ts.map +0 -1
  1792. package/platform/init.js +0 -160
  1793. package/platform/lifo.d.ts +0 -51
  1794. package/platform/lifo.d.ts.map +0 -1
  1795. package/platform/lifo.js +0 -138
  1796. package/providers/index.d.ts +0 -19
  1797. package/providers/index.d.ts.map +0 -1
  1798. package/providers/index.js +0 -80
  1799. package/shell-params.d.ts +0 -12
  1800. package/shell-params.d.ts.map +0 -1
  1801. package/shell-params.js +0 -19
  1802. package/state/AppContext.d.ts +0 -12
  1803. package/state/AppContext.d.ts.map +0 -1
  1804. package/state/AppContext.js +0 -5102
  1805. package/state/index.d.ts +0 -7
  1806. package/state/index.d.ts.map +0 -1
  1807. package/state/index.js +0 -6
  1808. package/state/internal.d.ts +0 -7
  1809. package/state/internal.d.ts.map +0 -1
  1810. package/state/internal.js +0 -6
  1811. package/state/onboarding-resume.d.ts +0 -11
  1812. package/state/onboarding-resume.d.ts.map +0 -1
  1813. package/state/onboarding-resume.js +0 -187
  1814. package/state/parsers.d.ts +0 -26
  1815. package/state/parsers.d.ts.map +0 -1
  1816. package/state/parsers.js +0 -255
  1817. package/state/persistence.d.ts +0 -59
  1818. package/state/persistence.d.ts.map +0 -1
  1819. package/state/persistence.js +0 -328
  1820. package/state/shell-routing.d.ts +0 -12
  1821. package/state/shell-routing.d.ts.map +0 -1
  1822. package/state/shell-routing.js +0 -26
  1823. package/state/types.d.ts +0 -426
  1824. package/state/types.d.ts.map +0 -1
  1825. package/state/types.js +0 -89
  1826. package/state/ui-preferences.d.ts +0 -3
  1827. package/state/ui-preferences.d.ts.map +0 -1
  1828. package/state/ui-preferences.js +0 -1
  1829. package/state/useApp.d.ts +0 -4
  1830. package/state/useApp.d.ts.map +0 -1
  1831. package/state/useApp.js +0 -22
  1832. package/state/vrm.d.ts +0 -30
  1833. package/state/vrm.d.ts.map +0 -1
  1834. package/state/vrm.js +0 -82
  1835. package/styles/anime.css +0 -6364
  1836. package/styles/base.css +0 -255
  1837. package/styles/onboarding-game.css +0 -1095
  1838. package/styles/styles.css +0 -2087
  1839. package/styles/xterm.css +0 -241
  1840. package/types/index.d.ts +0 -657
  1841. package/types/index.d.ts.map +0 -1
  1842. package/types/index.js +0 -1
  1843. package/utils/asset-url.d.ts +0 -26
  1844. package/utils/asset-url.d.ts.map +0 -1
  1845. package/utils/asset-url.js +0 -99
  1846. package/utils/assistant-text.d.ts +0 -2
  1847. package/utils/assistant-text.d.ts.map +0 -1
  1848. package/utils/assistant-text.js +0 -161
  1849. package/utils/clipboard.d.ts +0 -2
  1850. package/utils/clipboard.d.ts.map +0 -1
  1851. package/utils/clipboard.js +0 -38
  1852. package/utils/desktop-dialogs.d.ts +0 -19
  1853. package/utils/desktop-dialogs.d.ts.map +0 -1
  1854. package/utils/desktop-dialogs.js +0 -50
  1855. package/utils/eliza-globals.d.ts +0 -11
  1856. package/utils/eliza-globals.d.ts.map +0 -1
  1857. package/utils/eliza-globals.js +0 -33
  1858. package/utils/index.d.ts +0 -8
  1859. package/utils/index.d.ts.map +0 -1
  1860. package/utils/index.js +0 -7
  1861. package/utils/number-parsing.d.ts +0 -44
  1862. package/utils/number-parsing.d.ts.map +0 -1
  1863. package/utils/number-parsing.js +0 -56
  1864. package/utils/openExternalUrl.d.ts +0 -2
  1865. package/utils/openExternalUrl.d.ts.map +0 -1
  1866. package/utils/openExternalUrl.js +0 -17
  1867. package/utils/spoken-text.d.ts +0 -2
  1868. package/utils/spoken-text.d.ts.map +0 -1
  1869. package/utils/spoken-text.js +0 -56
  1870. package/utils/streaming-text.d.ts +0 -3
  1871. package/utils/streaming-text.d.ts.map +0 -1
  1872. package/utils/streaming-text.js +0 -87
  1873. package/voice/index.d.ts +0 -2
  1874. package/voice/index.d.ts.map +0 -1
  1875. package/voice/index.js +0 -1
  1876. package/voice/types.d.ts +0 -25
  1877. package/voice/types.d.ts.map +0 -1
  1878. package/voice/types.js +0 -166
  1879. package/wallet-rpc.d.ts +0 -8
  1880. package/wallet-rpc.d.ts.map +0 -1
  1881. package/wallet-rpc.js +0 -131
  1882. /package/{components/apps/extensions → services/local-inference/voice}/types.js +0 -0
@@ -0,0 +1,2317 @@
1
+ /**
2
+ * Desktop Native Module for Electrobun
3
+ *
4
+ * Implements the desktop manager on top of Electrobun APIs:
5
+ * - System tray management (Tray)
6
+ * - Global keyboard shortcuts (GlobalShortcut)
7
+ * - Window management (BrowserWindow)
8
+ * - Native notifications (Utils.showNotification)
9
+ * - Clipboard operations (Utils.clipboard*)
10
+ * - Shell operations (Utils.openExternal, Utils.showItemInFolder)
11
+ * - App lifecycle (Utils.quit)
12
+ * - Path resolution (Utils.paths)
13
+ *
14
+ * Key differences from the prior desktop runtime:
15
+ * - No ipcMain — methods are called directly from rpc-handlers.ts
16
+ * - Uses sendToWebview callback instead of mainWindow.webContents.send()
17
+ * - No powerMonitor — power state via `pmset` (macOS), sysfs (Linux), or WinForms power line (Windows)
18
+ * - No nativeImage — tray icons use file paths directly
19
+ * - No setOpacity on BrowserWindow — no-op
20
+ * - No hide() on BrowserWindow — uses minimize() as fallback
21
+ * - No app.setLoginItemSettings — stubbed
22
+ */
23
+
24
+ import * as fs from "node:fs";
25
+ import os from "node:os";
26
+ import path from "node:path";
27
+ import Electrobun, {
28
+ type ApplicationMenuItemConfig,
29
+ BrowserView,
30
+ type BrowserWindow,
31
+ BuildConfig,
32
+ ContextMenu,
33
+ GlobalShortcut,
34
+ type MenuItemConfig,
35
+ Screen,
36
+ Session,
37
+ Tray,
38
+ Updater,
39
+ Utils,
40
+ } from "electrobun/bun";
41
+ import { getBrandConfig } from "../brand-config";
42
+ import { logger } from "../logger";
43
+ import type {
44
+ ClipboardReadResult,
45
+ ClipboardWriteOptions,
46
+ CursorPosition,
47
+ DesktopBuildInfo,
48
+ DesktopManagedWindowSnapshot,
49
+ DesktopReleaseNotesWindowInfo,
50
+ DesktopSessionSnapshot,
51
+ DesktopSessionStorageType,
52
+ DesktopUpdaterSnapshot,
53
+ DisplayInfo,
54
+ FileDialogOptions,
55
+ FileDialogResult,
56
+ MessageBoxOptions,
57
+ MessageBoxResult,
58
+ NotificationOptions,
59
+ PowerState,
60
+ ShortcutOptions,
61
+ TrayMenuItem,
62
+ TrayOptions,
63
+ VersionInfo,
64
+ WindowBounds,
65
+ WindowOptions,
66
+ } from "../rpc-schema";
67
+ import type { SendToWebview } from "../types.js";
68
+ import {
69
+ createBugReportBundle,
70
+ getStartupDiagnosticLogTail,
71
+ getStartupDiagnosticsSnapshot,
72
+ } from "./agent";
73
+ import {
74
+ createSecurityScopedBookmark,
75
+ isAppActive,
76
+ isKeyWindow,
77
+ makeKeyAndOrderFront,
78
+ orderOut,
79
+ startAccessingSecurityScopedBookmark,
80
+ stopAccessingSecurityScopedBookmarks,
81
+ } from "./mac-window-effects";
82
+ import {
83
+ linuxSysfsOnBattery,
84
+ parseLinuxLockedHintOutput,
85
+ parseMacOsHidIdleTimeOutput,
86
+ parseMacOsPowerSourceOutput,
87
+ parseMacOsSessionLockedOutput,
88
+ parseWindowsIdleTimeOutput,
89
+ parseWindowsLockStateOutput,
90
+ parseWindowsPowerLineOutput,
91
+ parseXprintidleOutput,
92
+ } from "./power-state";
93
+ import { checkWebGpuSupport } from "./webgpu-browser-support";
94
+
95
+ interface SetAlwaysOnTopOptions {
96
+ flag: boolean;
97
+ level?: string;
98
+ }
99
+
100
+ interface SetFullscreenOptions {
101
+ flag: boolean;
102
+ }
103
+
104
+ interface SetOpacityOptions {
105
+ opacity: number;
106
+ }
107
+
108
+ interface OpenExternalOptions {
109
+ url: string;
110
+ }
111
+
112
+ interface ShowItemInFolderOptions {
113
+ path: string;
114
+ }
115
+
116
+ type ElectrobunEventHandler = (...args: unknown[]) => void;
117
+
118
+ interface ElectrobunEventTarget {
119
+ off?: (event: string, handler: ElectrobunEventHandler) => void;
120
+ removeListener?: (event: string, handler: ElectrobunEventHandler) => void;
121
+ }
122
+
123
+ // ============================================================================
124
+ // Path name mapping: legacy desktop path names -> Utils.paths equivalents
125
+ // ============================================================================
126
+
127
+ const PATH_NAME_MAP: Record<string, string | (() => string)> = {
128
+ home: Utils.paths.home,
129
+ appData: Utils.paths.appData,
130
+ userData: Utils.paths.userData,
131
+ userCache: Utils.paths.userCache,
132
+ userLogs: Utils.paths.userLogs,
133
+ temp: Utils.paths.temp,
134
+ cache: Utils.paths.cache,
135
+ logs: Utils.paths.logs,
136
+ config: Utils.paths.config,
137
+ documents: Utils.paths.documents,
138
+ downloads: Utils.paths.downloads,
139
+ desktop: Utils.paths.desktop,
140
+ pictures: Utils.paths.pictures,
141
+ music: Utils.paths.music,
142
+ videos: Utils.paths.videos,
143
+ };
144
+
145
+ const DEFAULT_RELEASE_NOTES_URL = getBrandConfig().releaseUrl;
146
+ const RELEASE_NOTES_PARTITION = getBrandConfig().releaseNotesPartition;
147
+ const MACOS_IDLE_THRESHOLD_SECONDS = 60;
148
+ const MACOS_CGSESSION_PATH =
149
+ "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession";
150
+ const LINUX_IDLE_THRESHOLD_SECONDS = 60;
151
+ const WINDOWS_IDLE_THRESHOLD_SECONDS = 60;
152
+ const POWER_STATE_PROBE_TIMEOUT_MS = 1_500;
153
+
154
+ let activeDesktopManager: DesktopManager | null = null;
155
+ let nativeContextMenuEventsInstalled = false;
156
+
157
+ export function resetDesktopManagerForTesting(): void {
158
+ activeDesktopManager = null;
159
+ nativeContextMenuEventsInstalled = false;
160
+ }
161
+
162
+ /**
163
+ * Injectable shell-runner used by every native power-state probe in this
164
+ * module. Tests override this via {@link setNativeShellRunnerForTesting} so
165
+ * `pmset`, `ioreg`, `CGSession`, `xprintidle`, `loginctl`, `powershell`, and
166
+ * other host subprocesses are never invoked on developer machines during
167
+ * unit / integration runs.
168
+ */
169
+ export interface NativeShellRunner {
170
+ read(argv: string[]): Promise<string>;
171
+ readSafe(argv: string[], timeoutMs?: number): Promise<string | null>;
172
+ }
173
+
174
+ const realNativeShellRunner: NativeShellRunner = {
175
+ async read(argv) {
176
+ const proc = Bun.spawn(argv, {
177
+ stdout: "pipe",
178
+ stderr: "ignore",
179
+ });
180
+ const text = await new Response(proc.stdout).text();
181
+ await proc.exited;
182
+ return text;
183
+ },
184
+ async readSafe(argv, timeoutMs = POWER_STATE_PROBE_TIMEOUT_MS) {
185
+ try {
186
+ const proc = Bun.spawn(argv, {
187
+ stdout: "pipe",
188
+ stderr: "ignore",
189
+ });
190
+ const timer = setTimeout(() => {
191
+ try {
192
+ proc.kill();
193
+ } catch {
194
+ // already exited
195
+ }
196
+ }, timeoutMs);
197
+ const text = await new Response(proc.stdout).text();
198
+ await proc.exited;
199
+ clearTimeout(timer);
200
+ if (typeof proc.exitCode === "number" && proc.exitCode !== 0) {
201
+ return null;
202
+ }
203
+ return text;
204
+ } catch {
205
+ return null;
206
+ }
207
+ },
208
+ };
209
+
210
+ let activeNativeShellRunner: NativeShellRunner = realNativeShellRunner;
211
+
212
+ /**
213
+ * Test-only seam: swap the native shell runner used by power-state probes.
214
+ * Pass `null` to restore the real `Bun.spawn`-backed implementation.
215
+ */
216
+ export function setNativeShellRunnerForTesting(
217
+ runner: NativeShellRunner | null,
218
+ ): void {
219
+ activeNativeShellRunner = runner ?? realNativeShellRunner;
220
+ }
221
+
222
+ function readProcessStdout(argv: string[]): Promise<string> {
223
+ return activeNativeShellRunner.read(argv);
224
+ }
225
+
226
+ function readProcessStdoutSafe(
227
+ argv: string[],
228
+ timeoutMs = POWER_STATE_PROBE_TIMEOUT_MS,
229
+ ): Promise<string | null> {
230
+ return activeNativeShellRunner.readSafe(argv, timeoutMs);
231
+ }
232
+
233
+ async function readLinuxLockedHint(): Promise<boolean | null> {
234
+ const sessionId = process.env.XDG_SESSION_ID?.trim();
235
+ if (!sessionId) {
236
+ return null;
237
+ }
238
+ const output = await readProcessStdoutSafe([
239
+ "loginctl",
240
+ "show-session",
241
+ sessionId,
242
+ "-p",
243
+ "LockedHint",
244
+ ]);
245
+ return output ? parseLinuxLockedHintOutput(output) : null;
246
+ }
247
+
248
+ const WINDOWS_IDLE_POWERSHELL_SCRIPT = [
249
+ "Add-Type -Namespace W -Name U32 -MemberDefinition @'",
250
+ ' [DllImport("user32.dll")] public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);',
251
+ " [StructLayout(LayoutKind.Sequential)] public struct LASTINPUTINFO {",
252
+ " public uint cbSize; public uint dwTime;",
253
+ " }",
254
+ "'@;",
255
+ "$info = New-Object W.U32+LASTINPUTINFO;",
256
+ "$info.cbSize = [System.Runtime.InteropServices.Marshal]::SizeOf($info);",
257
+ "[void][W.U32]::GetLastInputInfo([ref]$info);",
258
+ "[int]($env:COMPUTERNAME | Out-Null);",
259
+ "[int][System.Environment]::TickCount - [int]$info.dwTime",
260
+ ].join(" ");
261
+
262
+ // ============================================================================
263
+ // DesktopManager
264
+ // ============================================================================
265
+
266
+ /**
267
+ * Desktop Manager — handles all native desktop features for Electrobun.
268
+ *
269
+ * This implementation does not register IPC handlers.
270
+ * Methods are called directly from rpc-handlers.ts. Push events to the
271
+ * webview are sent via the sendToWebview callback.
272
+ */
273
+ export class DesktopManager {
274
+ private mainWindow: BrowserWindow | null = null;
275
+ private tray: Tray | null = null;
276
+ private releaseNotesWindow: BrowserWindow | null = null;
277
+ private releaseNotesView: BrowserView | null = null;
278
+ private shortcuts: Map<string, ShortcutOptions> = new Map();
279
+ private notificationCounter = 0;
280
+ private sendToWebview: SendToWebview | null = null;
281
+ private _windowFocused = true;
282
+ private _windowHidden = false;
283
+ private _focusPoller: ReturnType<typeof setInterval> | null = null;
284
+ private _appActive = false;
285
+
286
+ // Callback to open the settings window (set by index.ts)
287
+ private openSettingsCallback: ((tabHint?: string) => void) | null = null;
288
+ private openSurfaceWindowCallback:
289
+ | ((
290
+ surface:
291
+ | "chat"
292
+ | "browser"
293
+ | "release"
294
+ | "triggers"
295
+ | "plugins"
296
+ | "connectors"
297
+ | "cloud",
298
+ browse?: string,
299
+ alwaysOnTop?: boolean,
300
+ ) => Promise<DesktopManagedWindowSnapshot> | DesktopManagedWindowSnapshot)
301
+ | null = null;
302
+ private openAppWindowCallback:
303
+ | ((options: {
304
+ slug?: string;
305
+ title: string;
306
+ path: string;
307
+ alwaysOnTop?: boolean;
308
+ }) =>
309
+ | Promise<DesktopManagedWindowSnapshot>
310
+ | DesktopManagedWindowSnapshot)
311
+ | null = null;
312
+ private managedWindowAlwaysOnTopCallback:
313
+ | ((id: string, flag: boolean) => boolean)
314
+ | null = null;
315
+ private openExternalHandler:
316
+ | ((url: string) => boolean | Promise<boolean>)
317
+ | null = null;
318
+ private requestQuitCallback: (() => void | Promise<void>) | null = null;
319
+ private restoreMainWindowCallback: (() => void | Promise<void>) | null = null;
320
+
321
+ // Track menu items for context-menu-clicked matching
322
+ private trayMenuItems: Map<string, TrayMenuItem> = new Map();
323
+ private trayClickHandler: (() => void) | null = null;
324
+ private contextMenuHandler: ElectrobunEventHandler | null = null;
325
+ private windowEventHandlers: Partial<
326
+ Record<"focus" | "blur" | "close" | "resize" | "move", () => void>
327
+ > = {};
328
+ private appExitStarted = false;
329
+
330
+ constructor() {
331
+ activeDesktopManager = this;
332
+ this.ensureNativeContextMenuEvents();
333
+ }
334
+
335
+ // MARK: - Configuration
336
+
337
+ /**
338
+ * Set the main BrowserWindow reference and wire up window events.
339
+ */
340
+ setMainWindow(window: BrowserWindow): void {
341
+ if (this.mainWindow === window) {
342
+ return;
343
+ }
344
+
345
+ this.teardownWindowEvents(this.mainWindow);
346
+ this.mainWindow = window;
347
+ this.setupWindowEvents();
348
+ }
349
+
350
+ async getShellDiagnosticsState(): Promise<{
351
+ trayPresent: boolean;
352
+ mainWindowPresent: boolean;
353
+ windowVisible: boolean;
354
+ windowFocused: boolean;
355
+ }> {
356
+ return {
357
+ trayPresent: Boolean(this.tray),
358
+ mainWindowPresent: Boolean(this.mainWindow),
359
+ windowVisible: (await this.isWindowVisible()).visible,
360
+ windowFocused: this._windowFocused,
361
+ };
362
+ }
363
+
364
+ /**
365
+ * Set the callback used to push messages to the webview renderer.
366
+ */
367
+ setSendToWebview(fn: SendToWebview): void {
368
+ this.sendToWebview = fn;
369
+ }
370
+
371
+ /**
372
+ * Set the callback used to open the settings window from menus.
373
+ */
374
+ setOpenSettingsCallback(cb: (tabHint?: string) => void): void {
375
+ this.openSettingsCallback = cb;
376
+ }
377
+
378
+ /**
379
+ * Set the callback used to open detached surface windows from RPC or menus.
380
+ */
381
+ setOpenSurfaceWindowCallback(
382
+ cb: (
383
+ surface:
384
+ | "chat"
385
+ | "browser"
386
+ | "release"
387
+ | "triggers"
388
+ | "plugins"
389
+ | "connectors"
390
+ | "cloud",
391
+ browse?: string,
392
+ alwaysOnTop?: boolean,
393
+ ) => Promise<DesktopManagedWindowSnapshot> | DesktopManagedWindowSnapshot,
394
+ ): void {
395
+ this.openSurfaceWindowCallback = cb;
396
+ }
397
+
398
+ setOpenAppWindowCallback(
399
+ cb:
400
+ | ((options: {
401
+ slug?: string;
402
+ title: string;
403
+ path: string;
404
+ alwaysOnTop?: boolean;
405
+ }) =>
406
+ | Promise<DesktopManagedWindowSnapshot>
407
+ | DesktopManagedWindowSnapshot)
408
+ | null,
409
+ ): void {
410
+ this.openAppWindowCallback = cb;
411
+ }
412
+
413
+ setManagedWindowAlwaysOnTopCallback(
414
+ cb: ((id: string, flag: boolean) => boolean) | null,
415
+ ): void {
416
+ this.managedWindowAlwaysOnTopCallback = cb;
417
+ }
418
+
419
+ /**
420
+ * Optionally handle trusted external URLs inside an app-managed window.
421
+ */
422
+ setOpenExternalHandler(
423
+ cb: ((url: string) => boolean | Promise<boolean>) | null,
424
+ ): void {
425
+ this.openExternalHandler = cb;
426
+ }
427
+
428
+ setRequestQuitCallback(cb: (() => void | Promise<void>) | null): void {
429
+ this.requestQuitCallback = cb;
430
+ }
431
+
432
+ setRestoreMainWindowCallback(cb: (() => void | Promise<void>) | null): void {
433
+ this.restoreMainWindowCallback = cb;
434
+ }
435
+
436
+ clearMainWindow(window?: BrowserWindow | null): void {
437
+ if (!window || this.mainWindow === window) {
438
+ this.teardownWindowEvents(this.mainWindow);
439
+ this.mainWindow = null;
440
+ }
441
+ }
442
+
443
+ /**
444
+ * Open the settings window via the registered callback.
445
+ */
446
+ openSettings(tabHint?: string): void {
447
+ this.openSettingsCallback?.(tabHint);
448
+ }
449
+
450
+ /**
451
+ * Open a detached surface window via the registered callback.
452
+ */
453
+ openSurfaceWindow(
454
+ surface:
455
+ | "chat"
456
+ | "browser"
457
+ | "release"
458
+ | "triggers"
459
+ | "plugins"
460
+ | "connectors"
461
+ | "cloud",
462
+ browse?: string,
463
+ alwaysOnTop?: boolean,
464
+ ): Promise<DesktopManagedWindowSnapshot | null> {
465
+ return Promise.resolve(
466
+ this.openSurfaceWindowCallback?.(surface, browse, alwaysOnTop) ?? null,
467
+ );
468
+ }
469
+
470
+ async openAppWindow(options: {
471
+ slug?: string;
472
+ title: string;
473
+ path: string;
474
+ alwaysOnTop?: boolean;
475
+ }): Promise<DesktopManagedWindowSnapshot | null> {
476
+ return this.openAppWindowCallback?.(options) ?? null;
477
+ }
478
+
479
+ setManagedWindowAlwaysOnTop(id: string, flag: boolean): boolean {
480
+ return this.managedWindowAlwaysOnTopCallback?.(id, flag) ?? false;
481
+ }
482
+
483
+ private getWindow(): BrowserWindow | null {
484
+ return this.mainWindow ?? null;
485
+ }
486
+
487
+ private send(message: string, payload?: unknown): void {
488
+ if (this.sendToWebview) {
489
+ this.sendToWebview(message, payload);
490
+ }
491
+ }
492
+
493
+ private ensureNativeContextMenuEvents(): void {
494
+ activeDesktopManager = this;
495
+ if (nativeContextMenuEventsInstalled) {
496
+ return;
497
+ }
498
+
499
+ nativeContextMenuEventsInstalled = true;
500
+ ContextMenu.on("context-menu-clicked", (event) => {
501
+ activeDesktopManager?.handleNativeContextMenuClick(
502
+ event as {
503
+ data?: {
504
+ action?: string;
505
+ data?: { text?: string };
506
+ };
507
+ },
508
+ );
509
+ });
510
+ }
511
+
512
+ private handleNativeContextMenuClick(event: {
513
+ data?: { action?: string; data?: { text?: string } };
514
+ }): void {
515
+ const action = event.data?.action;
516
+ const text = event.data?.data?.text?.trim();
517
+
518
+ if (!action) {
519
+ return;
520
+ }
521
+
522
+ if (action === "copy-selection") {
523
+ if (text) {
524
+ Utils.clipboardWriteText(text);
525
+ }
526
+ return;
527
+ }
528
+
529
+ if (!text) {
530
+ return;
531
+ }
532
+
533
+ if (action === "ask-agent") {
534
+ this.send("contextMenuAskAgent", { text });
535
+ return;
536
+ }
537
+
538
+ if (action === "quote-in-chat") {
539
+ this.send("contextMenuQuoteInChat", { text });
540
+ return;
541
+ }
542
+
543
+ if (action === "create-skill") {
544
+ this.send("contextMenuCreateSkill", { text });
545
+ return;
546
+ }
547
+
548
+ if (action === "save-as-command") {
549
+ this.send("contextMenuSaveAsCommand", { text });
550
+ }
551
+ }
552
+
553
+ // MARK: - System Tray
554
+
555
+ async createTray(options: TrayOptions): Promise<void> {
556
+ if (this.tray) {
557
+ await this.destroyTray();
558
+ }
559
+
560
+ const iconPath = this.resolveIconPath(options.icon);
561
+
562
+ this.tray = new Tray({
563
+ title: options.tooltip ?? options.title ?? "",
564
+ image: iconPath,
565
+ });
566
+
567
+ if (options.title && process.platform === "darwin") {
568
+ this.tray.setTitle(options.title);
569
+ }
570
+
571
+ if (options.menu) {
572
+ this.setTrayMenu({ menu: options.menu });
573
+ }
574
+
575
+ this.setupTrayEvents();
576
+ }
577
+
578
+ async updateTray(options: Partial<TrayOptions>): Promise<void> {
579
+ if (!this.tray) return;
580
+
581
+ if (options.icon) {
582
+ const iconPath = this.resolveIconPath(options.icon);
583
+ this.tray.setImage(iconPath);
584
+ }
585
+
586
+ if (options.title !== undefined && process.platform === "darwin") {
587
+ this.tray.setTitle(options.title);
588
+ }
589
+
590
+ if (options.menu) {
591
+ this.setTrayMenu({ menu: options.menu });
592
+ }
593
+ }
594
+
595
+ async destroyTray(): Promise<void> {
596
+ this.teardownTrayEvents();
597
+ if (this.tray) {
598
+ this.tray.remove();
599
+ this.tray = null;
600
+ }
601
+ this.trayMenuItems.clear();
602
+ }
603
+
604
+ setTrayMenu(options: { menu: TrayMenuItem[] }): void {
605
+ if (!this.tray) return;
606
+
607
+ // Store menu items for action matching
608
+ this.trayMenuItems.clear();
609
+ this.indexMenuItems(options.menu);
610
+
611
+ const template = this.buildMenuTemplate(options.menu);
612
+ this.tray.setMenu(template);
613
+ }
614
+
615
+ /**
616
+ * Recursively index menu items by id for context-menu-clicked matching.
617
+ */
618
+ private indexMenuItems(items: TrayMenuItem[]): void {
619
+ for (const item of items) {
620
+ if (item.id) {
621
+ this.trayMenuItems.set(item.id, item);
622
+ }
623
+ if (item.submenu) {
624
+ this.indexMenuItems(item.submenu);
625
+ }
626
+ }
627
+ }
628
+
629
+ /**
630
+ * Convert TrayMenuItem[] to Electrobun's menu format.
631
+ * Electrobun uses { type, label, action, submenu? }.
632
+ */
633
+ private buildMenuTemplate(items: TrayMenuItem[]): MenuItemConfig[] {
634
+ return items.map((item): MenuItemConfig => {
635
+ if (item.type === "separator") {
636
+ return { type: "separator" };
637
+ }
638
+
639
+ const menuItem: MenuItemConfig & { type: "normal" } = {
640
+ type: "normal",
641
+ label: item.label ?? "",
642
+ // Use the item id as the action identifier for matching clicks
643
+ action: item.id,
644
+ };
645
+
646
+ if (item.enabled === false) {
647
+ menuItem.enabled = false;
648
+ }
649
+
650
+ if (item.submenu) {
651
+ menuItem.submenu = this.buildMenuTemplate(item.submenu);
652
+ }
653
+
654
+ return menuItem;
655
+ });
656
+ }
657
+
658
+ private setupTrayEvents(): void {
659
+ if (!this.tray) return;
660
+
661
+ this.teardownTrayEvents();
662
+
663
+ // Electrobun tray click is simpler — no bounds/modifiers
664
+ this.trayClickHandler = () => {
665
+ void this.showWindow().catch((err: unknown) => {
666
+ logger.warn(
667
+ `[Desktop] Failed to show window from tray click: ${err instanceof Error ? err.message : String(err)}`,
668
+ );
669
+ });
670
+ this.send("desktopTrayClick", {
671
+ x: 0,
672
+ y: 0,
673
+ button: "left",
674
+ modifiers: { alt: false, shift: false, ctrl: false, meta: false },
675
+ });
676
+ };
677
+ this.tray.on("tray-clicked", this.trayClickHandler);
678
+
679
+ const triggerAgentRestart = () => {
680
+ // Lazy import to avoid circular dependency (agent → desktop → agent).
681
+ import("./agent").then(({ getAgentManager }) => {
682
+ getAgentManager()
683
+ .restart()
684
+ .catch((err: unknown) => {
685
+ logger.error(
686
+ `[Desktop] Agent restart failed: ${err instanceof Error ? err.message : String(err)}`,
687
+ );
688
+ });
689
+ });
690
+ };
691
+
692
+ // Tray menu item clicks fire "tray-clicked" on the global event bus
693
+ // (NOT "context-menu-clicked" — that's for right-click context menus).
694
+ // The event data shape is { data: { id, action, data? } }.
695
+ // Electrobun emits ElectrobunEvent<TrayClickedData> for tray-clicked;
696
+ // the shape carries { data: { action, id, data? } }.
697
+ this.contextMenuHandler = ((e: { data?: { action?: string } }): void => {
698
+ const action = e?.data?.action;
699
+ if (!action) return;
700
+
701
+ // Native actions — these must work even when the renderer RPC bridge
702
+ // is not yet connected (e.g. PGLite init on Windows can take 240s).
703
+ if (action === "show" || action === "tray-show-window") {
704
+ void this.showWindow().catch((err: unknown) => {
705
+ logger.warn(
706
+ `[Desktop] Failed to show window from tray menu: ${err instanceof Error ? err.message : String(err)}`,
707
+ );
708
+ });
709
+ } else if (action === "tray-hide-window") {
710
+ void this.hideWindow().catch((err: unknown) => {
711
+ logger.warn(
712
+ `[Desktop] Failed to hide window from tray menu: ${err instanceof Error ? err.message : String(err)}`,
713
+ );
714
+ });
715
+ } else if (action === "restart-agent" || action === "tray-restart") {
716
+ triggerAgentRestart();
717
+ } else if (action === "quit") {
718
+ Utils.quit();
719
+ } else if (action === "open-settings") {
720
+ this.openSettingsCallback?.();
721
+ }
722
+
723
+ // Renderer notification for all items
724
+ const menuItem = this.trayMenuItems.get(action);
725
+ if (menuItem) {
726
+ this.send("desktopTrayMenuClick", {
727
+ itemId: menuItem.id,
728
+ checked:
729
+ menuItem.type === "checkbox" ? !menuItem.checked : menuItem.checked,
730
+ });
731
+ }
732
+ }) as ElectrobunEventHandler;
733
+ Electrobun.events.on(
734
+ "tray-clicked",
735
+ this.contextMenuHandler as ElectrobunEventHandler,
736
+ );
737
+ }
738
+
739
+ private teardownTrayEvents(): void {
740
+ this.removeEventHandler(this.tray, "tray-clicked", this.trayClickHandler);
741
+ this.removeEventHandler(
742
+ Electrobun.events,
743
+ "tray-clicked",
744
+ this.contextMenuHandler,
745
+ );
746
+ this.trayClickHandler = null;
747
+ this.contextMenuHandler = null;
748
+ }
749
+
750
+ private removeEventHandler(
751
+ target: unknown,
752
+ event: string,
753
+ handler: ElectrobunEventHandler | null | undefined,
754
+ ): void {
755
+ const eventTarget = target as ElectrobunEventTarget | null | undefined;
756
+ if (!eventTarget || !handler) {
757
+ return;
758
+ }
759
+
760
+ if (typeof eventTarget.off === "function") {
761
+ eventTarget.off(event, handler);
762
+ return;
763
+ }
764
+
765
+ if (typeof eventTarget.removeListener === "function") {
766
+ eventTarget.removeListener(event, handler);
767
+ }
768
+ }
769
+
770
+ // MARK: - Global Shortcuts
771
+
772
+ async registerShortcut(
773
+ options: ShortcutOptions,
774
+ ): Promise<{ success: boolean }> {
775
+ // Unregister existing shortcut with same id
776
+ if (this.shortcuts.has(options.id)) {
777
+ const existing = this.shortcuts.get(options.id);
778
+ if (existing) {
779
+ GlobalShortcut.unregister(existing.accelerator);
780
+ }
781
+ }
782
+
783
+ try {
784
+ GlobalShortcut.register(options.accelerator, () => {
785
+ this.send("desktopShortcutPressed", {
786
+ id: options.id,
787
+ accelerator: options.accelerator,
788
+ });
789
+ });
790
+ this.shortcuts.set(options.id, options);
791
+ return { success: true };
792
+ } catch {
793
+ return { success: false };
794
+ }
795
+ }
796
+
797
+ async unregisterShortcut(options: { id: string }): Promise<void> {
798
+ const shortcut = this.shortcuts.get(options.id);
799
+ if (shortcut) {
800
+ GlobalShortcut.unregister(shortcut.accelerator);
801
+ this.shortcuts.delete(options.id);
802
+ }
803
+ }
804
+
805
+ async unregisterAllShortcuts(): Promise<void> {
806
+ GlobalShortcut.unregisterAll();
807
+ this.shortcuts.clear();
808
+ }
809
+
810
+ async isShortcutRegistered(options: {
811
+ accelerator: string;
812
+ }): Promise<{ registered: boolean }> {
813
+ return { registered: GlobalShortcut.isRegistered(options.accelerator) };
814
+ }
815
+
816
+ // MARK: - Auto Launch
817
+
818
+ async setAutoLaunch(options: {
819
+ enabled: boolean;
820
+ openAsHidden?: boolean;
821
+ }): Promise<void> {
822
+ const appPath = process.execPath;
823
+
824
+ const openAsHidden = options.openAsHidden ?? false;
825
+
826
+ if (process.platform === "darwin") {
827
+ await this.setAutoLaunchMac(options.enabled, appPath, openAsHidden);
828
+ } else if (process.platform === "linux") {
829
+ this.setAutoLaunchLinux(options.enabled, appPath, openAsHidden);
830
+ } else if (process.platform === "win32") {
831
+ await this.setAutoLaunchWin(options.enabled, appPath, openAsHidden);
832
+ } else {
833
+ logger.warn(
834
+ `[DesktopManager] setAutoLaunch: unsupported platform ${process.platform}`,
835
+ );
836
+ }
837
+ }
838
+
839
+ async getAutoLaunchStatus(): Promise<{
840
+ enabled: boolean;
841
+ openAsHidden: boolean;
842
+ }> {
843
+ if (process.platform === "darwin") {
844
+ const plistPath = this.getMacLaunchAgentPath();
845
+ if (!fs.existsSync(plistPath))
846
+ return { enabled: false, openAsHidden: false };
847
+ const content = fs.readFileSync(plistPath, "utf8");
848
+ return { enabled: true, openAsHidden: content.includes("--hidden") };
849
+ }
850
+
851
+ if (process.platform === "linux") {
852
+ const desktopPath = this.getLinuxAutostartPath();
853
+ if (!fs.existsSync(desktopPath))
854
+ return { enabled: false, openAsHidden: false };
855
+ const content = fs.readFileSync(desktopPath, "utf8");
856
+ return { enabled: true, openAsHidden: content.includes("--hidden") };
857
+ }
858
+
859
+ if (process.platform === "win32") {
860
+ const { enabled, openAsHidden } = await this.getAutoLaunchStatusWin();
861
+ return { enabled, openAsHidden };
862
+ }
863
+
864
+ return { enabled: false, openAsHidden: false };
865
+ }
866
+
867
+ // MARK: - Auto-launch helpers (macOS)
868
+
869
+ private getMacLaunchAgentPath(): string {
870
+ return path.join(
871
+ os.homedir(),
872
+ "Library",
873
+ "LaunchAgents",
874
+ getBrandConfig().macLaunchAgentPlist,
875
+ );
876
+ }
877
+
878
+ private async setAutoLaunchMac(
879
+ enabled: boolean,
880
+ appPath: string,
881
+ openAsHidden = false,
882
+ ): Promise<void> {
883
+ const plistPath = this.getMacLaunchAgentPath();
884
+
885
+ if (enabled) {
886
+ const hiddenArg = openAsHidden ? "\n <string>--hidden</string>" : "";
887
+ const plistContent = `<?xml version="1.0" encoding="UTF-8"?>
888
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
889
+ <plist version="1.0">
890
+ <dict>
891
+ <key>Label</key>
892
+ <string>${getBrandConfig().macLaunchAgentLabel}</string>
893
+ <key>ProgramArguments</key>
894
+ <array>
895
+ <string>${appPath}</string>${hiddenArg}
896
+ </array>
897
+ <key>RunAtLoad</key>
898
+ <true/>
899
+ <key>KeepAlive</key>
900
+ <false/>
901
+ </dict>
902
+ </plist>
903
+ `;
904
+ const dir = path.dirname(plistPath);
905
+ if (!fs.existsSync(dir)) {
906
+ fs.mkdirSync(dir, { recursive: true });
907
+ }
908
+ fs.writeFileSync(plistPath, plistContent, "utf8");
909
+
910
+ const proc = Bun.spawn(["launchctl", "load", plistPath], {
911
+ stdout: "pipe",
912
+ stderr: "pipe",
913
+ });
914
+ await proc.exited;
915
+ } else {
916
+ if (fs.existsSync(plistPath)) {
917
+ const proc = Bun.spawn(["launchctl", "unload", plistPath], {
918
+ stdout: "pipe",
919
+ stderr: "pipe",
920
+ });
921
+ await proc.exited;
922
+ fs.unlinkSync(plistPath);
923
+ }
924
+ }
925
+ }
926
+
927
+ // MARK: - Auto-launch helpers (Linux)
928
+
929
+ private getLinuxAutostartPath(): string {
930
+ return path.join(
931
+ os.homedir(),
932
+ ".config",
933
+ "autostart",
934
+ getBrandConfig().linuxDesktopFileName,
935
+ );
936
+ }
937
+
938
+ private setAutoLaunchLinux(
939
+ enabled: boolean,
940
+ appPath: string,
941
+ openAsHidden = false,
942
+ ): void {
943
+ const desktopPath = this.getLinuxAutostartPath();
944
+
945
+ if (enabled) {
946
+ const execLine = openAsHidden ? `${appPath} --hidden` : appPath;
947
+ const desktopContent = `[Desktop Entry]
948
+ Type=Application
949
+ Name=${getBrandConfig().linuxDesktopEntryName}
950
+ Exec=${execLine}
951
+ X-GNOME-Autostart-enabled=true
952
+ `;
953
+ const dir = path.dirname(desktopPath);
954
+ if (!fs.existsSync(dir)) {
955
+ fs.mkdirSync(dir, { recursive: true });
956
+ }
957
+ fs.writeFileSync(desktopPath, desktopContent, "utf8");
958
+ } else {
959
+ if (fs.existsSync(desktopPath)) {
960
+ fs.unlinkSync(desktopPath);
961
+ }
962
+ }
963
+ }
964
+
965
+ // MARK: - Auto-launch helpers (Windows)
966
+
967
+ private readonly WIN_REG_KEY =
968
+ "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
969
+
970
+ private async setAutoLaunchWin(
971
+ enabled: boolean,
972
+ appPath: string,
973
+ openAsHidden = false,
974
+ ): Promise<void> {
975
+ if (enabled) {
976
+ const launchValue = openAsHidden ? `${appPath} --hidden` : appPath;
977
+ const proc = Bun.spawn(
978
+ [
979
+ "reg",
980
+ "add",
981
+ this.WIN_REG_KEY,
982
+ "/v",
983
+ getBrandConfig().windowsRegistryValueName,
984
+ "/t",
985
+ "REG_SZ",
986
+ "/d",
987
+ launchValue,
988
+ "/f",
989
+ ],
990
+ { stdout: "pipe", stderr: "pipe" },
991
+ );
992
+ await proc.exited;
993
+ } else {
994
+ const proc = Bun.spawn(
995
+ [
996
+ "reg",
997
+ "delete",
998
+ this.WIN_REG_KEY,
999
+ "/v",
1000
+ getBrandConfig().windowsRegistryValueName,
1001
+ "/f",
1002
+ ],
1003
+ { stdout: "pipe", stderr: "pipe" },
1004
+ );
1005
+ await proc.exited;
1006
+ }
1007
+ }
1008
+
1009
+ private async getAutoLaunchStatusWin(): Promise<{
1010
+ enabled: boolean;
1011
+ openAsHidden: boolean;
1012
+ }> {
1013
+ try {
1014
+ const proc = Bun.spawn(
1015
+ [
1016
+ "reg",
1017
+ "query",
1018
+ this.WIN_REG_KEY,
1019
+ "/v",
1020
+ getBrandConfig().windowsRegistryValueName,
1021
+ ],
1022
+ { stdout: "pipe", stderr: "pipe" },
1023
+ );
1024
+ const [stdout] = await Promise.all([
1025
+ new Response(proc.stdout).text(),
1026
+ proc.exited,
1027
+ ]);
1028
+ if (!stdout.includes(getBrandConfig().windowsRegistryValueName))
1029
+ return { enabled: false, openAsHidden: false };
1030
+ return { enabled: true, openAsHidden: stdout.includes("--hidden") };
1031
+ } catch {
1032
+ return { enabled: false, openAsHidden: false };
1033
+ }
1034
+ }
1035
+
1036
+ // MARK: - Window Management
1037
+
1038
+ async setWindowOptions(options: WindowOptions): Promise<void> {
1039
+ const win = this.getWindow();
1040
+ if (!win) return;
1041
+
1042
+ if (options.width !== undefined || options.height !== undefined) {
1043
+ const { width: currentW, height: currentH } = win.getSize();
1044
+ win.setSize(options.width ?? currentW, options.height ?? currentH);
1045
+ }
1046
+
1047
+ if (options.x !== undefined || options.y !== undefined) {
1048
+ const { x: currentX, y: currentY } = win.getPosition();
1049
+ win.setPosition(options.x ?? currentX, options.y ?? currentY);
1050
+ }
1051
+
1052
+ // minWidth/minHeight/maxWidth/maxHeight — not directly supported
1053
+ // in Electrobun BrowserWindow. Skip silently.
1054
+
1055
+ if (options.alwaysOnTop !== undefined) {
1056
+ win.setAlwaysOnTop(options.alwaysOnTop);
1057
+ }
1058
+
1059
+ if (options.fullscreen !== undefined) {
1060
+ win.setFullScreen(options.fullscreen);
1061
+ }
1062
+
1063
+ // opacity — no setOpacity in Electrobun (no-op)
1064
+ if (options.opacity !== undefined) {
1065
+ // No-op: Electrobun BrowserWindow does not support setOpacity
1066
+ }
1067
+
1068
+ if (options.title !== undefined) {
1069
+ win.setTitle(options.title);
1070
+ }
1071
+
1072
+ // resizable — not directly settable post-creation in Electrobun.
1073
+ // Skip silently.
1074
+ }
1075
+
1076
+ async getWindowBounds(): Promise<WindowBounds> {
1077
+ const win = this.getWindow();
1078
+ if (!win) return { x: 0, y: 0, width: 0, height: 0 };
1079
+ const { x, y } = win.getPosition();
1080
+ const { width, height } = win.getSize();
1081
+ return { x, y, width, height };
1082
+ }
1083
+
1084
+ async setWindowBounds(options: WindowBounds): Promise<void> {
1085
+ const win = this.getWindow();
1086
+ if (!win) return;
1087
+ win.setPosition(options.x, options.y);
1088
+ win.setSize(options.width, options.height);
1089
+ }
1090
+
1091
+ async minimizeWindow(): Promise<void> {
1092
+ this.getWindow()?.minimize();
1093
+ }
1094
+
1095
+ async unminimizeWindow(): Promise<void> {
1096
+ this.getWindow()?.unminimize();
1097
+ }
1098
+
1099
+ async maximizeWindow(): Promise<void> {
1100
+ this.getWindow()?.maximize();
1101
+ }
1102
+
1103
+ async unmaximizeWindow(): Promise<void> {
1104
+ this.getWindow()?.unmaximize();
1105
+ }
1106
+
1107
+ async closeWindow(): Promise<void> {
1108
+ this.getWindow()?.close();
1109
+ }
1110
+
1111
+ async showWindow(): Promise<void> {
1112
+ let win = this.mainWindow;
1113
+ if (!win) {
1114
+ await this.restoreMainWindowCallback?.();
1115
+ win = this.mainWindow;
1116
+ }
1117
+ if (!win) return;
1118
+ try {
1119
+ this.showMainWindow(win);
1120
+ } catch {
1121
+ this.clearMainWindow(win);
1122
+ await this.restoreMainWindowCallback?.();
1123
+ win = this.mainWindow;
1124
+ if (!win) return;
1125
+ this.showMainWindow(win);
1126
+ }
1127
+ }
1128
+
1129
+ async hideWindow(): Promise<void> {
1130
+ const win = this.mainWindow;
1131
+ if (!win) return;
1132
+ const ptr = (win as { ptr?: unknown }).ptr;
1133
+ if (ptr && process.platform === "darwin") {
1134
+ // orderOut removes the window from screen AND Cmd+Tab / Mission Control
1135
+ orderOut(ptr as Parameters<typeof orderOut>[0]);
1136
+ } else {
1137
+ // Non-macOS fallback: minimize
1138
+ win.minimize();
1139
+ }
1140
+ this._windowHidden = true;
1141
+ }
1142
+
1143
+ async focusWindow(): Promise<void> {
1144
+ this.getWindow()?.focus();
1145
+ }
1146
+
1147
+ async isWindowMaximized(): Promise<{ maximized: boolean }> {
1148
+ const win = this.getWindow();
1149
+ return { maximized: win ? win.isMaximized() : false };
1150
+ }
1151
+
1152
+ async isWindowMinimized(): Promise<{ minimized: boolean }> {
1153
+ const win = this.getWindow();
1154
+ return { minimized: win ? win.isMinimized() : false };
1155
+ }
1156
+
1157
+ async isWindowVisible(): Promise<{ visible: boolean }> {
1158
+ if (this._windowHidden) return { visible: false };
1159
+ const win = this.getWindow();
1160
+ if (!win) return { visible: false };
1161
+ return { visible: !win.isMinimized() };
1162
+ }
1163
+
1164
+ async isWindowFocused(): Promise<{ focused: boolean }> {
1165
+ return { focused: this._windowFocused };
1166
+ }
1167
+
1168
+ async setAlwaysOnTop(options: SetAlwaysOnTopOptions): Promise<void> {
1169
+ // Electrobun setAlwaysOnTop takes a boolean — ignore level
1170
+ this.getWindow()?.setAlwaysOnTop(options.flag);
1171
+ }
1172
+
1173
+ async setFullscreen(options: SetFullscreenOptions): Promise<void> {
1174
+ this.getWindow()?.setFullScreen(options.flag);
1175
+ }
1176
+
1177
+ async setOpacity(_options: SetOpacityOptions): Promise<void> {
1178
+ // No-op: Electrobun BrowserWindow does not support setOpacity
1179
+ }
1180
+
1181
+ private showMainWindow(win: BrowserWindow): void {
1182
+ const ptr = (win as { ptr?: unknown }).ptr;
1183
+ if (ptr && process.platform === "darwin") {
1184
+ makeKeyAndOrderFront(ptr as Parameters<typeof makeKeyAndOrderFront>[0]);
1185
+ } else {
1186
+ win.show();
1187
+ win.focus();
1188
+ }
1189
+ this._windowHidden = false;
1190
+ }
1191
+
1192
+ private setupWindowEvents(): void {
1193
+ const win = this.mainWindow;
1194
+ if (!win) return;
1195
+
1196
+ const focusHandler = () => {
1197
+ this._windowFocused = true;
1198
+ this.send("desktopWindowFocus");
1199
+ };
1200
+ this.windowEventHandlers.focus = focusHandler;
1201
+ win.on("focus", focusHandler);
1202
+
1203
+ // Blur via native event (Electrobun may not surface this, but try it for free)
1204
+ const blurHandler = () => {
1205
+ this._windowFocused = false;
1206
+ this.send("desktopWindowBlur");
1207
+ };
1208
+ this.windowEventHandlers.blur = blurHandler;
1209
+ win.on("blur", blurHandler);
1210
+
1211
+ const closeHandler = () => {
1212
+ this.send("desktopWindowClose");
1213
+ };
1214
+ this.windowEventHandlers.close = closeHandler;
1215
+ win.on("close", closeHandler);
1216
+
1217
+ const resizeHandler = () => {
1218
+ // Electrobun fires resize but doesn't distinguish maximize/unmaximize.
1219
+ // We detect state changes to emit the right event.
1220
+ if (win.isMaximized()) {
1221
+ this.send("desktopWindowMaximize");
1222
+ }
1223
+ };
1224
+ this.windowEventHandlers.resize = resizeHandler;
1225
+ win.on("resize", resizeHandler);
1226
+
1227
+ let wasMaximized = false;
1228
+ const moveHandler = () => {
1229
+ // Only emit desktopWindowUnmaximize when transitioning FROM maximized
1230
+ // to not-maximized, not on every move during a normal window drag.
1231
+ const isMaximized = win.isMaximized();
1232
+ if (wasMaximized && !isMaximized) {
1233
+ this.send("desktopWindowUnmaximize");
1234
+ }
1235
+ wasMaximized = isMaximized;
1236
+ };
1237
+ this.windowEventHandlers.move = moveHandler;
1238
+ win.on("move", moveHandler);
1239
+
1240
+ // Blur fallback: poll [NSWindow isKeyWindow] at 2Hz on macOS.
1241
+ // Electrobun does not guarantee blur events, so this gives bounded
1242
+ // ≤500ms latency for focus-loss detection.
1243
+ if (process.platform === "darwin") {
1244
+ this._startFocusPoller();
1245
+ }
1246
+ }
1247
+
1248
+ private teardownWindowEvents(window: BrowserWindow | null): void {
1249
+ if (!window) {
1250
+ return;
1251
+ }
1252
+
1253
+ this.removeEventHandler(window, "focus", this.windowEventHandlers.focus);
1254
+ this.removeEventHandler(window, "blur", this.windowEventHandlers.blur);
1255
+ this.removeEventHandler(window, "close", this.windowEventHandlers.close);
1256
+ this.removeEventHandler(window, "resize", this.windowEventHandlers.resize);
1257
+ this.removeEventHandler(window, "move", this.windowEventHandlers.move);
1258
+ this.windowEventHandlers = {};
1259
+ }
1260
+
1261
+ private _startFocusPoller(): void {
1262
+ if (this._focusPoller) return;
1263
+ this._focusPoller = setInterval(() => {
1264
+ const win = this.mainWindow;
1265
+ if (!win) return;
1266
+
1267
+ // Electrobun does not expose an application activation callback.
1268
+ // When the app becomes foreground again with only a minimized window
1269
+ // (for example via Dock click), restore it automatically.
1270
+ const appActive = isAppActive();
1271
+ if (!this._appActive && appActive && win.isMinimized()) {
1272
+ void this.showWindow();
1273
+ }
1274
+ this._appActive = appActive;
1275
+
1276
+ const ptr = (win as { ptr?: unknown }).ptr;
1277
+ if (!ptr) return;
1278
+ const focused = isKeyWindow(ptr as Parameters<typeof isKeyWindow>[0]);
1279
+ if (focused !== this._windowFocused) {
1280
+ this._windowFocused = focused;
1281
+ if (!focused) {
1282
+ this.send("desktopWindowBlur");
1283
+ }
1284
+ }
1285
+ }, 500);
1286
+ }
1287
+
1288
+ // MARK: - Notifications
1289
+
1290
+ async showNotification(
1291
+ options: NotificationOptions,
1292
+ ): Promise<{ id: string }> {
1293
+ const id = `notification_${++this.notificationCounter}`;
1294
+
1295
+ // Electrobun Utils.showNotification — fire-and-forget, no event callbacks
1296
+ Utils.showNotification({
1297
+ title: options.title,
1298
+ body: options.body,
1299
+ subtitle: undefined,
1300
+ silent: options.silent,
1301
+ });
1302
+
1303
+ return { id };
1304
+ }
1305
+
1306
+ async closeNotification(_options: { id: string }): Promise<void> {
1307
+ // Electrobun does not support programmatic notification dismissal.
1308
+ // No-op.
1309
+ }
1310
+
1311
+ // MARK: - Power Monitor
1312
+
1313
+ async getPowerState(): Promise<PowerState> {
1314
+ try {
1315
+ if (process.platform === "darwin") {
1316
+ const powerSource = parseMacOsPowerSourceOutput(
1317
+ await readProcessStdout(["pmset", "-g", "batt"]),
1318
+ );
1319
+ const idleTime =
1320
+ parseMacOsHidIdleTimeOutput(
1321
+ await readProcessStdout(["ioreg", "-c", "IOHIDSystem"]),
1322
+ ) ?? 0;
1323
+ const locked = fs.existsSync(MACOS_CGSESSION_PATH)
1324
+ ? parseMacOsSessionLockedOutput(
1325
+ await readProcessStdout([
1326
+ MACOS_CGSESSION_PATH,
1327
+ "-currentSession",
1328
+ ]),
1329
+ )
1330
+ : null;
1331
+ const idleState =
1332
+ locked === true
1333
+ ? "locked"
1334
+ : idleTime >= MACOS_IDLE_THRESHOLD_SECONDS
1335
+ ? "idle"
1336
+ : locked === false
1337
+ ? "active"
1338
+ : "unknown";
1339
+ return {
1340
+ onBattery: powerSource.known ? powerSource.onBattery : false,
1341
+ idleState,
1342
+ idleTime,
1343
+ };
1344
+ }
1345
+ if (process.platform === "linux") {
1346
+ const idleOutput = await readProcessStdoutSafe(["xprintidle"]);
1347
+ const idleTime =
1348
+ idleOutput !== null ? (parseXprintidleOutput(idleOutput) ?? 0) : 0;
1349
+ const locked = await readLinuxLockedHint();
1350
+ const idleState =
1351
+ locked === true
1352
+ ? "locked"
1353
+ : idleOutput === null
1354
+ ? "unknown"
1355
+ : idleTime >= LINUX_IDLE_THRESHOLD_SECONDS
1356
+ ? "idle"
1357
+ : locked === false
1358
+ ? "active"
1359
+ : "active";
1360
+ return {
1361
+ onBattery: linuxSysfsOnBattery(),
1362
+ idleState,
1363
+ idleTime,
1364
+ };
1365
+ }
1366
+ if (process.platform === "win32") {
1367
+ const batteryOutput = await readProcessStdoutSafe([
1368
+ "powershell",
1369
+ "-NoProfile",
1370
+ "-NoLogo",
1371
+ "-Command",
1372
+ "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SystemInformation]::PowerStatus.PowerLineStatus.ToString()",
1373
+ ]);
1374
+ const batteryParsed = batteryOutput
1375
+ ? parseWindowsPowerLineOutput(batteryOutput)
1376
+ : { onBattery: false, known: false };
1377
+ const idleOutput = await readProcessStdoutSafe([
1378
+ "powershell",
1379
+ "-NoProfile",
1380
+ "-NoLogo",
1381
+ "-Command",
1382
+ WINDOWS_IDLE_POWERSHELL_SCRIPT,
1383
+ ]);
1384
+ const idleTime =
1385
+ idleOutput !== null
1386
+ ? (parseWindowsIdleTimeOutput(idleOutput) ?? 0)
1387
+ : 0;
1388
+ const lockOutput = await readProcessStdoutSafe([
1389
+ "powershell",
1390
+ "-NoProfile",
1391
+ "-NoLogo",
1392
+ "-Command",
1393
+ "(Get-Process logonui -ErrorAction SilentlyContinue).Count",
1394
+ ]);
1395
+ const locked = lockOutput
1396
+ ? parseWindowsLockStateOutput(lockOutput)
1397
+ : null;
1398
+ const idleState =
1399
+ locked === true
1400
+ ? "locked"
1401
+ : idleOutput === null
1402
+ ? "unknown"
1403
+ : idleTime >= WINDOWS_IDLE_THRESHOLD_SECONDS
1404
+ ? "idle"
1405
+ : "active";
1406
+ return {
1407
+ onBattery: batteryParsed.known ? batteryParsed.onBattery : false,
1408
+ idleState,
1409
+ idleTime,
1410
+ };
1411
+ }
1412
+ } catch {
1413
+ // Fall through to stub below
1414
+ }
1415
+ return { onBattery: false, idleState: "unknown", idleTime: 0 };
1416
+ }
1417
+
1418
+ // MARK: - App
1419
+
1420
+ private async beginAppExit(reason: string): Promise<void> {
1421
+ if (this.appExitStarted) {
1422
+ return;
1423
+ }
1424
+ this.appExitStarted = true;
1425
+ await this.showWindow().catch(() => {});
1426
+ this.send("desktopShutdownStarted", { reason });
1427
+ await new Promise((resolve) => setTimeout(resolve, 150));
1428
+ }
1429
+
1430
+ async quit(): Promise<void> {
1431
+ await this.beginAppExit("desktop-quit");
1432
+ if (this.requestQuitCallback) {
1433
+ await this.requestQuitCallback();
1434
+ return;
1435
+ }
1436
+ Utils.quit();
1437
+ }
1438
+
1439
+ async relaunch(): Promise<void> {
1440
+ await this.beginAppExit("desktop-relaunch");
1441
+ try {
1442
+ const child = Bun.spawn([process.execPath, ...process.argv.slice(1)], {
1443
+ detached: true,
1444
+ stdout: "ignore",
1445
+ stderr: "ignore",
1446
+ stdin: "ignore",
1447
+ });
1448
+ // Detach so the new instance survives the parent quitting
1449
+ child.unref?.();
1450
+ } catch (err) {
1451
+ logger.error(
1452
+ `[DesktopManager] relaunch: failed to spawn new instance: ${err instanceof Error ? err.message : String(err)}`,
1453
+ );
1454
+ }
1455
+ Utils.quit();
1456
+ }
1457
+
1458
+ async getVersion(): Promise<VersionInfo> {
1459
+ let version = "0.0.0";
1460
+ try {
1461
+ version = await Updater.localInfo.version();
1462
+ } catch {
1463
+ // Updater may not be available in dev
1464
+ }
1465
+
1466
+ return {
1467
+ version,
1468
+ name: getBrandConfig().appName,
1469
+ runtime: `electrobun/${Bun.version}`,
1470
+ };
1471
+ }
1472
+
1473
+ async isPackaged(): Promise<{ packaged: boolean }> {
1474
+ // In Electrobun, check if running from a built bundle
1475
+ // DEV mode typically has specific env flags
1476
+ return {
1477
+ packaged:
1478
+ process.env.NODE_ENV === "production" || !process.env.ELECTROBUN_DEV,
1479
+ };
1480
+ }
1481
+
1482
+ async getPath(options: { name: string }): Promise<{ path: string }> {
1483
+ const mapped = PATH_NAME_MAP[options.name];
1484
+ if (typeof mapped === "function") {
1485
+ return { path: mapped() };
1486
+ }
1487
+ if (typeof mapped === "string") {
1488
+ return { path: mapped };
1489
+ }
1490
+
1491
+ // Fallback: try to return a sensible default under userData
1492
+ logger.warn(
1493
+ `[DesktopManager] Unknown path name "${options.name}", falling back to userData`,
1494
+ );
1495
+ return { path: Utils.paths.userData };
1496
+ }
1497
+
1498
+ async getStartupDiagnostics(): Promise<{
1499
+ state: "not_started" | "starting" | "running" | "stopped" | "error";
1500
+ phase: string;
1501
+ updatedAt: string;
1502
+ lastError: string | null;
1503
+ agentName: string | null;
1504
+ port: number | null;
1505
+ startedAt: number | null;
1506
+ platform: string;
1507
+ arch: string;
1508
+ configDir: string;
1509
+ logPath: string;
1510
+ statusPath: string;
1511
+ logTail: string;
1512
+ appVersion?: string;
1513
+ appRuntime?: string;
1514
+ packaged?: boolean;
1515
+ locale?: string;
1516
+ }> {
1517
+ const snapshot = getStartupDiagnosticsSnapshot();
1518
+ const version = await this.getVersion();
1519
+ const packaged = await this.isPackaged();
1520
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale;
1521
+ return {
1522
+ ...snapshot,
1523
+ logTail: getStartupDiagnosticLogTail(),
1524
+ appVersion: version.version,
1525
+ appRuntime: version.runtime,
1526
+ packaged: packaged.packaged,
1527
+ locale,
1528
+ };
1529
+ }
1530
+
1531
+ async openLogsFolder(): Promise<void> {
1532
+ const diagnostics = getStartupDiagnosticsSnapshot();
1533
+ const folderPath = path.dirname(diagnostics.logPath);
1534
+ Utils.openPath(folderPath);
1535
+ }
1536
+
1537
+ async createBugReportBundle(options: {
1538
+ reportMarkdown: string;
1539
+ reportJson: Record<string, unknown>;
1540
+ prefix?: string;
1541
+ }): Promise<{
1542
+ directory: string;
1543
+ reportMarkdownPath: string;
1544
+ reportJsonPath: string;
1545
+ startupLogPath: string | null;
1546
+ startupStatusPath: string | null;
1547
+ }> {
1548
+ return createBugReportBundle(options);
1549
+ }
1550
+
1551
+ async checkForUpdates(): Promise<DesktopUpdaterSnapshot> {
1552
+ const availability = this.getUpdaterAvailability();
1553
+ if (!availability.canAutoUpdate) {
1554
+ return this.buildUpdaterSnapshot(undefined, availability);
1555
+ }
1556
+
1557
+ try {
1558
+ const result = await Updater.checkForUpdate();
1559
+ if (result?.updateAvailable) {
1560
+ void this.downloadUpdateWithRetry().catch((error: unknown) => {
1561
+ logger.warn(
1562
+ `[Desktop] Update download failed after retries: ${error instanceof Error ? error.message : String(error)}`,
1563
+ );
1564
+ });
1565
+ }
1566
+ return await this.getUpdaterState();
1567
+ } catch (error) {
1568
+ return this.buildUpdaterSnapshot(error, availability);
1569
+ }
1570
+ }
1571
+
1572
+ async getUpdaterState(): Promise<DesktopUpdaterSnapshot> {
1573
+ return this.buildUpdaterSnapshot();
1574
+ }
1575
+
1576
+ private async downloadUpdateWithRetry(
1577
+ maxAttempts = 3,
1578
+ baseDelayMs = 2_000,
1579
+ ): Promise<void> {
1580
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
1581
+ try {
1582
+ await Updater.downloadUpdate();
1583
+ return;
1584
+ } catch (error) {
1585
+ const isLastAttempt = attempt === maxAttempts;
1586
+ if (isLastAttempt) throw error;
1587
+ const delay = baseDelayMs * 2 ** (attempt - 1);
1588
+ logger.warn(
1589
+ `[Desktop] Update download attempt ${attempt}/${maxAttempts} failed, retrying in ${delay}ms: ${error instanceof Error ? error.message : String(error)}`,
1590
+ );
1591
+ await new Promise((resolve) => setTimeout(resolve, delay));
1592
+ }
1593
+ }
1594
+ }
1595
+
1596
+ async applyUpdate(): Promise<void> {
1597
+ const availability = this.getUpdaterAvailability();
1598
+ if (!availability.canAutoUpdate) {
1599
+ throw new Error(
1600
+ availability.autoUpdateDisabledReason ??
1601
+ "Auto-update is unavailable for this installation.",
1602
+ );
1603
+ }
1604
+
1605
+ Updater.applyUpdate();
1606
+ }
1607
+
1608
+ async getBuildInfo(): Promise<DesktopBuildInfo> {
1609
+ const config = await BuildConfig.get();
1610
+ return {
1611
+ platform: process.platform,
1612
+ arch: process.arch,
1613
+ defaultRenderer: config.defaultRenderer,
1614
+ availableRenderers: config.availableRenderers,
1615
+ cefVersion: config.cefVersion,
1616
+ bunVersion: config.bunVersion,
1617
+ runtime: config.runtime,
1618
+ };
1619
+ }
1620
+
1621
+ async getDockIconVisibility(): Promise<{ visible: boolean }> {
1622
+ if (process.platform !== "darwin") {
1623
+ return { visible: true };
1624
+ }
1625
+
1626
+ return {
1627
+ visible: Utils.isDockIconVisible?.() ?? true,
1628
+ };
1629
+ }
1630
+
1631
+ async setDockIconVisibility(options: {
1632
+ visible: boolean;
1633
+ }): Promise<{ visible: boolean }> {
1634
+ if (process.platform === "darwin") {
1635
+ Utils.setDockIconVisible?.(options.visible);
1636
+ }
1637
+
1638
+ return this.getDockIconVisibility();
1639
+ }
1640
+
1641
+ async showSelectionContextMenu(options: {
1642
+ text: string;
1643
+ }): Promise<{ shown: boolean }> {
1644
+ const text = options.text.trim();
1645
+ if (!text) {
1646
+ return { shown: false };
1647
+ }
1648
+
1649
+ const menu: ApplicationMenuItemConfig[] = [
1650
+ {
1651
+ type: "normal",
1652
+ label: "Ask Agent",
1653
+ action: "ask-agent",
1654
+ data: { text },
1655
+ },
1656
+ {
1657
+ type: "normal",
1658
+ label: "Quote in Chat",
1659
+ action: "quote-in-chat",
1660
+ data: { text },
1661
+ },
1662
+ {
1663
+ type: "normal",
1664
+ label: "Create Skill",
1665
+ action: "create-skill",
1666
+ data: { text },
1667
+ },
1668
+ {
1669
+ type: "normal",
1670
+ label: "Save as Command",
1671
+ action: "save-as-command",
1672
+ data: { text },
1673
+ },
1674
+ { type: "separator" },
1675
+ {
1676
+ type: "normal",
1677
+ label: "Copy Selection",
1678
+ action: "copy-selection",
1679
+ data: { text },
1680
+ },
1681
+ ];
1682
+
1683
+ ContextMenu.showContextMenu(menu);
1684
+ return { shown: true };
1685
+ }
1686
+
1687
+ async getSessionSnapshot(options: {
1688
+ partition: string;
1689
+ }): Promise<DesktopSessionSnapshot> {
1690
+ return this.readSessionSnapshot(options.partition);
1691
+ }
1692
+
1693
+ async clearSessionData(options: {
1694
+ partition: string;
1695
+ storageTypes?: DesktopSessionStorageType[] | "all";
1696
+ clearCookies?: boolean;
1697
+ }): Promise<DesktopSessionSnapshot> {
1698
+ const session = this.getSession(options.partition);
1699
+ const shouldClearCookies =
1700
+ options.clearCookies === true ||
1701
+ options.storageTypes === "all" ||
1702
+ options.storageTypes?.includes("cookies");
1703
+
1704
+ if (shouldClearCookies) {
1705
+ session.cookies.clear();
1706
+ }
1707
+
1708
+ if (options.storageTypes === "all") {
1709
+ session.clearStorageData("all");
1710
+ } else if (options.storageTypes) {
1711
+ const storageTypes = options.storageTypes.filter(
1712
+ (type) => type !== "cookies",
1713
+ );
1714
+ if (storageTypes.length > 0) {
1715
+ session.clearStorageData(
1716
+ storageTypes as Exclude<DesktopSessionStorageType, "cookies">[],
1717
+ );
1718
+ }
1719
+ }
1720
+
1721
+ return this.readSessionSnapshot(options.partition);
1722
+ }
1723
+
1724
+ async getWebGpuBrowserStatus(): Promise<
1725
+ ReturnType<typeof checkWebGpuSupport>
1726
+ > {
1727
+ const config = await BuildConfig.get();
1728
+ return checkWebGpuSupport(this.resolvePreferredBrowserRenderer(config));
1729
+ }
1730
+
1731
+ async openReleaseNotesWindow(options: {
1732
+ url: string;
1733
+ title?: string;
1734
+ }): Promise<DesktopReleaseNotesWindowInfo> {
1735
+ const url = this.normalizeReleaseNotesUrl(options.url);
1736
+ const title =
1737
+ options.title?.trim() || `${getBrandConfig().appName} Release Notes`;
1738
+
1739
+ if (this.releaseNotesWindow && this.releaseNotesView) {
1740
+ this.releaseNotesWindow.setTitle(title);
1741
+ if (this.releaseNotesView.url !== url) {
1742
+ this.releaseNotesView.loadURL(url);
1743
+ }
1744
+ this.releaseNotesWindow.focus();
1745
+ return {
1746
+ url,
1747
+ windowId: this.releaseNotesWindow.id,
1748
+ webviewId: this.releaseNotesView.id,
1749
+ };
1750
+ }
1751
+
1752
+ const buildConfig = await BuildConfig.get();
1753
+ const renderer = this.resolvePreferredBrowserRenderer(buildConfig);
1754
+ const win = new Electrobun.BrowserWindow({
1755
+ title,
1756
+ frame: {
1757
+ x: 170,
1758
+ y: 110,
1759
+ width: 1180,
1760
+ height: 860,
1761
+ },
1762
+ renderer,
1763
+ transparent: false,
1764
+ titleBarStyle: "default",
1765
+ });
1766
+
1767
+ // BrowserWindow always creates a default webview. Remove it so the
1768
+ // manual BrowserView becomes the only live browsing surface.
1769
+ win.webview.remove();
1770
+
1771
+ const view = new BrowserView({
1772
+ url,
1773
+ renderer,
1774
+ windowId: win.id,
1775
+ partition: RELEASE_NOTES_PARTITION,
1776
+ sandbox: true,
1777
+ navigationRules: JSON.stringify(
1778
+ this.buildReleaseNotesNavigationRules(url),
1779
+ ),
1780
+ frame: {
1781
+ x: 0,
1782
+ y: 0,
1783
+ width: win.frame.width,
1784
+ height: win.frame.height,
1785
+ },
1786
+ });
1787
+
1788
+ win.on("close", () => {
1789
+ this.releaseNotesView?.remove();
1790
+ this.releaseNotesWindow = null;
1791
+ this.releaseNotesView = null;
1792
+ });
1793
+
1794
+ this.releaseNotesWindow = win;
1795
+ this.releaseNotesView = view;
1796
+ win.focus();
1797
+
1798
+ return {
1799
+ url,
1800
+ windowId: win.id,
1801
+ webviewId: view.id,
1802
+ };
1803
+ }
1804
+
1805
+ // MARK: - Clipboard
1806
+
1807
+ async writeToClipboard(options: ClipboardWriteOptions): Promise<void> {
1808
+ if (options.text) {
1809
+ Utils.clipboardWriteText(options.text);
1810
+ } else if (options.image) {
1811
+ // clipboardWriteImage expects a Uint8Array — decode base64 before passing.
1812
+ const bytes = Buffer.from(options.image, "base64");
1813
+ Utils.clipboardWriteImage(new Uint8Array(bytes));
1814
+ }
1815
+ // html/rtf not supported by Electrobun clipboard — drop silently
1816
+ }
1817
+
1818
+ async readFromClipboard(): Promise<ClipboardReadResult> {
1819
+ const text = Utils.clipboardReadText();
1820
+ let hasImage = false;
1821
+ try {
1822
+ const imgData = Utils.clipboardReadImage();
1823
+ hasImage = !!imgData && imgData.length > 0;
1824
+ } catch {
1825
+ // clipboardReadImage may throw if no image data
1826
+ }
1827
+
1828
+ return {
1829
+ text: text || undefined,
1830
+ // html/rtf not supported by Electrobun clipboard
1831
+ hasImage,
1832
+ };
1833
+ }
1834
+
1835
+ async clearClipboard(): Promise<void> {
1836
+ Utils.clipboardClear();
1837
+ }
1838
+
1839
+ async clipboardAvailableFormats(): Promise<{ formats: string[] }> {
1840
+ const formats = Utils.clipboardAvailableFormats?.() ?? [];
1841
+ return { formats: Array.isArray(formats) ? formats : [] };
1842
+ }
1843
+
1844
+ // MARK: - Shell
1845
+
1846
+ /**
1847
+ * Open an external URL in the default browser.
1848
+ * SECURITY: restricted to http/https to prevent opening arbitrary protocols.
1849
+ */
1850
+ async openExternal(options: OpenExternalOptions): Promise<void> {
1851
+ const url = typeof options.url === "string" ? options.url.trim() : "";
1852
+ try {
1853
+ const parsed = new URL(url);
1854
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
1855
+ throw new Error(
1856
+ `Blocked openExternal for non-http(s) URL: ${parsed.protocol}`,
1857
+ );
1858
+ }
1859
+ } catch (err) {
1860
+ if (err instanceof TypeError) {
1861
+ throw new Error(`Invalid URL passed to openExternal: ${url}`);
1862
+ }
1863
+ throw err;
1864
+ }
1865
+
1866
+ if (this.openExternalHandler) {
1867
+ try {
1868
+ const handled = await this.openExternalHandler(url);
1869
+ if (handled) {
1870
+ return;
1871
+ }
1872
+ } catch (err) {
1873
+ logger.warn(
1874
+ `[Desktop] openExternal handler failed: ${err instanceof Error ? err.message : String(err)}`,
1875
+ );
1876
+ }
1877
+ }
1878
+
1879
+ Utils.openExternal(url);
1880
+ }
1881
+
1882
+ /**
1883
+ * Reveal a file in the OS file manager.
1884
+ * SECURITY: requires an absolute path.
1885
+ */
1886
+ async showItemInFolder(options: ShowItemInFolderOptions): Promise<void> {
1887
+ const p = typeof options.path === "string" ? options.path.trim() : "";
1888
+ if (!p || !path.isAbsolute(p)) {
1889
+ throw new Error("showItemInFolder requires an absolute path");
1890
+ }
1891
+ Utils.showItemInFolder(p);
1892
+ }
1893
+
1894
+ async openPath(options: { path: string }): Promise<void> {
1895
+ const p = typeof options.path === "string" ? options.path.trim() : "";
1896
+ if (!p) {
1897
+ throw new Error("openPath requires a non-empty path");
1898
+ }
1899
+ Utils.openPath(p);
1900
+ }
1901
+
1902
+ async beep(): Promise<void> {
1903
+ try {
1904
+ if (process.platform === "darwin") {
1905
+ Bun.spawn(["afplay", "/System/Library/Sounds/Funk.aiff"], {
1906
+ stdout: "ignore",
1907
+ stderr: "ignore",
1908
+ });
1909
+ } else if (process.platform === "linux") {
1910
+ // Try paplay (PulseAudio), fall back to terminal bell
1911
+ try {
1912
+ const proc = Bun.spawn(
1913
+ ["paplay", "/usr/share/sounds/freedesktop/stereo/bell.oga"],
1914
+ { stdout: "ignore", stderr: "ignore" },
1915
+ );
1916
+ await proc.exited;
1917
+ } catch {
1918
+ process.stdout.write("\x07");
1919
+ }
1920
+ } else if (process.platform === "win32") {
1921
+ const proc = Bun.spawn(
1922
+ ["powershell", "-NoProfile", "-Command", "[Console]::Beep(800, 200)"],
1923
+ { stdout: "ignore", stderr: "ignore" },
1924
+ );
1925
+ await proc.exited;
1926
+ }
1927
+ } catch {
1928
+ // beep is best-effort — never throw
1929
+ }
1930
+ }
1931
+
1932
+ // MARK: - Screen / Display
1933
+
1934
+ async getPrimaryDisplay(): Promise<DisplayInfo> {
1935
+ const display = Screen.getPrimaryDisplay();
1936
+ return {
1937
+ id: display.id ?? 0,
1938
+ bounds: display.bounds,
1939
+ workArea: display.workArea,
1940
+ scaleFactor: display.scaleFactor ?? 1,
1941
+ isPrimary: display.isPrimary ?? true,
1942
+ };
1943
+ }
1944
+
1945
+ async getAllDisplays(): Promise<{ displays: DisplayInfo[] }> {
1946
+ const displays = Screen.getAllDisplays();
1947
+ return {
1948
+ displays: displays.map((d) => ({
1949
+ id: d.id ?? 0,
1950
+ bounds: d.bounds,
1951
+ workArea: d.workArea,
1952
+ scaleFactor: d.scaleFactor ?? 1,
1953
+ isPrimary: d.isPrimary ?? false,
1954
+ })),
1955
+ };
1956
+ }
1957
+
1958
+ async getCursorPosition(): Promise<CursorPosition> {
1959
+ return Screen.getCursorScreenPoint();
1960
+ }
1961
+
1962
+ // MARK: - Message Box
1963
+
1964
+ async showMessageBox(options: MessageBoxOptions): Promise<MessageBoxResult> {
1965
+ const autoConfirm =
1966
+ process.env.ELIZA_DESKTOP_TEST_AUTO_CONFIRM_DIALOGS === "1" ||
1967
+ process.env.ELIZA_DESKTOP_TEST_AUTO_CONFIRM_RESET === "1";
1968
+ if (autoConfirm) {
1969
+ return { response: options.defaultId ?? 0 };
1970
+ }
1971
+ const result = await Utils.showMessageBox({
1972
+ type: options.type ?? "info",
1973
+ title: options.title,
1974
+ message: options.message,
1975
+ detail: options.detail,
1976
+ buttons: options.buttons ?? ["OK"],
1977
+ defaultId: options.defaultId ?? 0,
1978
+ cancelId: options.cancelId,
1979
+ });
1980
+ return { response: result.response ?? result };
1981
+ }
1982
+
1983
+ // MARK: - File Dialogs
1984
+
1985
+ /**
1986
+ * Show a native file/directory open picker.
1987
+ * Maps to Electrobun's Utils.openFileDialog.
1988
+ */
1989
+ async showOpenDialog(options: FileDialogOptions): Promise<FileDialogResult> {
1990
+ const filePaths = await Utils.openFileDialog({
1991
+ startingFolder: options.defaultPath,
1992
+ allowedFileTypes: options.allowedFileTypes,
1993
+ canChooseFiles: options.canChooseFiles ?? true,
1994
+ canChooseDirectory: options.canChooseDirectory ?? false,
1995
+ allowsMultipleSelection: options.allowsMultipleSelection ?? false,
1996
+ });
1997
+ const canceled = filePaths.length === 0 || filePaths[0] === "";
1998
+ return { canceled, filePaths: canceled ? [] : filePaths };
1999
+ }
2000
+
2001
+ /**
2002
+ * Show a native directory picker for save operations.
2003
+ * Electrobun has no separate save dialog — we pick a directory and the
2004
+ * caller appends the filename. Returns the chosen directory path.
2005
+ */
2006
+ async showSaveDialog(options: FileDialogOptions): Promise<FileDialogResult> {
2007
+ const filePaths = await Utils.openFileDialog({
2008
+ startingFolder: options.defaultPath,
2009
+ allowedFileTypes: options.allowedFileTypes,
2010
+ canChooseFiles: false,
2011
+ canChooseDirectory: true,
2012
+ allowsMultipleSelection: false,
2013
+ });
2014
+ const canceled = filePaths.length === 0 || filePaths[0] === "";
2015
+ return { canceled, filePaths: canceled ? [] : filePaths };
2016
+ }
2017
+
2018
+ /**
2019
+ * Pick a workspace folder for store-distributed builds. Maps to a directory-only
2020
+ * NSOpenPanel on macOS (via Electrobun's openFileDialog).
2021
+ *
2022
+ * The `bookmark` field is the OS-specific persistence handle: on macOS, a
2023
+ * base64 NSURLBookmarkCreationOptions.WithSecurityScope blob the caller
2024
+ * stores and re-resolves on next launch. Non-macOS platforms return null
2025
+ * because portals / AppContainer do not use NSURL bookmarks.
2026
+ */
2027
+ async pickWorkspaceFolder(options: {
2028
+ defaultPath?: string;
2029
+ promptTitle?: string;
2030
+ }): Promise<{ canceled: boolean; path: string; bookmark: string | null }> {
2031
+ const filePaths = await Utils.openFileDialog({
2032
+ startingFolder: options.defaultPath,
2033
+ canChooseFiles: false,
2034
+ canChooseDirectory: true,
2035
+ allowsMultipleSelection: false,
2036
+ });
2037
+ const canceled = filePaths.length === 0 || filePaths[0] === "";
2038
+ if (canceled) {
2039
+ return { canceled: true, path: "", bookmark: null };
2040
+ }
2041
+ const selectedPath = filePaths[0] ?? "";
2042
+ if (!selectedPath) {
2043
+ return { canceled: true, path: "", bookmark: null };
2044
+ }
2045
+ const bookmark =
2046
+ process.platform === "darwin"
2047
+ ? createSecurityScopedBookmark(selectedPath)
2048
+ : null;
2049
+ return { canceled: false, path: selectedPath, bookmark };
2050
+ }
2051
+
2052
+ resolveWorkspaceFolderBookmark(options: { bookmark: string }): {
2053
+ ok: boolean;
2054
+ path: string;
2055
+ stale?: boolean;
2056
+ error?: string;
2057
+ } {
2058
+ if (process.platform !== "darwin") {
2059
+ return { ok: true, path: "" };
2060
+ }
2061
+ const path = startAccessingSecurityScopedBookmark(options.bookmark);
2062
+ if (!path) {
2063
+ return {
2064
+ ok: false,
2065
+ path: "",
2066
+ error: "Unable to resolve security-scoped bookmark.",
2067
+ };
2068
+ }
2069
+ return { ok: true, path };
2070
+ }
2071
+
2072
+ releaseWorkspaceFolderBookmarks(): { ok: true } {
2073
+ stopAccessingSecurityScopedBookmarks();
2074
+ return { ok: true };
2075
+ }
2076
+
2077
+ // MARK: - Helpers
2078
+
2079
+ /**
2080
+ * Resolve an icon path, trying absolute, then relative to known asset dirs.
2081
+ */
2082
+ private resolveIconPath(iconPath: string): string {
2083
+ if (path.isAbsolute(iconPath)) {
2084
+ return iconPath;
2085
+ }
2086
+
2087
+ // Try relative to the electrobun assets directory
2088
+ const assetsPath = path.join(import.meta.dir, "../../assets", iconPath);
2089
+ if (fs.existsSync(assetsPath)) {
2090
+ return assetsPath;
2091
+ }
2092
+
2093
+ // Try relative to cwd
2094
+ const cwdPath = path.join(process.cwd(), iconPath);
2095
+ if (fs.existsSync(cwdPath)) {
2096
+ return cwdPath;
2097
+ }
2098
+
2099
+ // Return as-is and let Electrobun handle it
2100
+ return iconPath;
2101
+ }
2102
+
2103
+ private getSession(partition: string) {
2104
+ const normalized = partition.trim() || "persist:default";
2105
+ if (normalized === "persist:default") {
2106
+ return Session.defaultSession;
2107
+ }
2108
+ return Session.fromPartition(normalized);
2109
+ }
2110
+
2111
+ private readSessionSnapshot(partition: string): DesktopSessionSnapshot {
2112
+ const session = this.getSession(partition);
2113
+ const cookies = session.cookies.get().map((cookie) => ({
2114
+ name: cookie.name,
2115
+ domain: cookie.domain,
2116
+ path: cookie.path,
2117
+ secure: cookie.secure,
2118
+ httpOnly: cookie.httpOnly,
2119
+ session: (cookie as typeof cookie & { session?: boolean }).session,
2120
+ expirationDate: cookie.expirationDate,
2121
+ }));
2122
+
2123
+ return {
2124
+ partition: session.partition,
2125
+ persistent: session.partition.startsWith("persist:"),
2126
+ cookieCount: cookies.length,
2127
+ cookies,
2128
+ };
2129
+ }
2130
+
2131
+ private normalizeReleaseNotesUrl(url: string): string {
2132
+ const trimmed = url.trim() || DEFAULT_RELEASE_NOTES_URL;
2133
+ const parsed = new URL(trimmed);
2134
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
2135
+ throw new Error("Release notes URL must use http or https");
2136
+ }
2137
+ return parsed.toString();
2138
+ }
2139
+
2140
+ private buildReleaseNotesNavigationRules(url: string): string[] {
2141
+ const parsed = new URL(url);
2142
+ const origin = parsed.origin.replace(/\/+$/, "");
2143
+ return [parsed.toString(), `${origin}/*`];
2144
+ }
2145
+
2146
+ private async buildUpdaterSnapshot(
2147
+ error?: unknown,
2148
+ availability = this.getUpdaterAvailability(),
2149
+ ): Promise<DesktopUpdaterSnapshot> {
2150
+ let currentVersion = "unknown";
2151
+ let currentHash: string | undefined;
2152
+ let channel: string | undefined;
2153
+ let baseUrl: string | undefined;
2154
+ let snapshotError =
2155
+ error instanceof Error ? error.message : error ? String(error) : null;
2156
+
2157
+ try {
2158
+ const localInfo = await Updater.getLocallocalInfo();
2159
+ currentVersion = localInfo.version;
2160
+ currentHash = localInfo.hash;
2161
+ channel = localInfo.channel;
2162
+ baseUrl = localInfo.baseUrl;
2163
+ } catch (localError) {
2164
+ if (!snapshotError) {
2165
+ snapshotError =
2166
+ localError instanceof Error
2167
+ ? localError.message
2168
+ : String(localError ?? "Unknown updater error");
2169
+ }
2170
+ }
2171
+
2172
+ const updateInfo =
2173
+ (Updater.updateInfo?.() as Partial<{
2174
+ version: string;
2175
+ hash: string;
2176
+ updateAvailable: boolean;
2177
+ updateReady: boolean;
2178
+ error: string;
2179
+ }>) ?? {};
2180
+ const lastStatusEntry = Updater.getStatusHistory?.().at(-1) ?? null;
2181
+
2182
+ return {
2183
+ currentVersion,
2184
+ currentHash,
2185
+ channel,
2186
+ baseUrl,
2187
+ appBundlePath: availability.appBundlePath,
2188
+ canAutoUpdate: availability.canAutoUpdate,
2189
+ autoUpdateDisabledReason: availability.autoUpdateDisabledReason,
2190
+ updateAvailable: Boolean(updateInfo.updateAvailable),
2191
+ updateReady: Boolean(updateInfo.updateReady),
2192
+ latestVersion: updateInfo.version ?? null,
2193
+ latestHash: updateInfo.hash ?? null,
2194
+ error: updateInfo.error || snapshotError,
2195
+ lastStatus: lastStatusEntry
2196
+ ? {
2197
+ status: lastStatusEntry.status,
2198
+ message: lastStatusEntry.message,
2199
+ timestamp: lastStatusEntry.timestamp,
2200
+ }
2201
+ : null,
2202
+ };
2203
+ }
2204
+
2205
+ private getUpdaterAvailability(): {
2206
+ appBundlePath: string | null;
2207
+ canAutoUpdate: boolean;
2208
+ autoUpdateDisabledReason: string | null;
2209
+ } {
2210
+ if (process.platform !== "darwin") {
2211
+ return {
2212
+ appBundlePath: null,
2213
+ canAutoUpdate: true,
2214
+ autoUpdateDisabledReason: null,
2215
+ };
2216
+ }
2217
+
2218
+ const appBundlePath = this.resolveMacAppBundlePath(process.execPath);
2219
+ if (!appBundlePath) {
2220
+ return {
2221
+ appBundlePath: null,
2222
+ canAutoUpdate: false,
2223
+ autoUpdateDisabledReason: `${getBrandConfig().appName} must run from an installed .app bundle to enable in-place updates.`,
2224
+ };
2225
+ }
2226
+
2227
+ const supportedRoots = [
2228
+ "/Applications",
2229
+ path.join(Utils.paths.home, "Applications"),
2230
+ ].map((root) => path.resolve(root));
2231
+ const normalizedBundlePath = path.resolve(appBundlePath);
2232
+ const inApplications = supportedRoots.some((root) => {
2233
+ const normalizedRoot = root.endsWith(path.sep)
2234
+ ? root
2235
+ : `${root}${path.sep}`;
2236
+ return (
2237
+ normalizedBundlePath === root ||
2238
+ normalizedBundlePath.startsWith(normalizedRoot)
2239
+ );
2240
+ });
2241
+
2242
+ if (inApplications) {
2243
+ return {
2244
+ appBundlePath: normalizedBundlePath,
2245
+ canAutoUpdate: true,
2246
+ autoUpdateDisabledReason: null,
2247
+ };
2248
+ }
2249
+
2250
+ return {
2251
+ appBundlePath: normalizedBundlePath,
2252
+ canAutoUpdate: false,
2253
+ autoUpdateDisabledReason: `Move ${path.basename(
2254
+ normalizedBundlePath,
2255
+ )} to /Applications to enable in-place desktop updates.`,
2256
+ };
2257
+ }
2258
+
2259
+ private resolveMacAppBundlePath(execPath: string): string | null {
2260
+ let current = path.resolve(execPath);
2261
+ while (true) {
2262
+ if (current.endsWith(".app")) {
2263
+ return current;
2264
+ }
2265
+ const parent = path.dirname(current);
2266
+ if (parent === current) {
2267
+ return null;
2268
+ }
2269
+ current = parent;
2270
+ }
2271
+ }
2272
+
2273
+ private resolvePreferredBrowserRenderer(
2274
+ buildInfo: Awaited<ReturnType<typeof BuildConfig.get>>,
2275
+ ): "native" | "cef" {
2276
+ if (
2277
+ process.platform === "linux" &&
2278
+ buildInfo.availableRenderers.includes("cef")
2279
+ ) {
2280
+ return "cef";
2281
+ }
2282
+
2283
+ return buildInfo.defaultRenderer;
2284
+ }
2285
+
2286
+ /**
2287
+ * Clean up all resources.
2288
+ */
2289
+ dispose(): void {
2290
+ if (this._focusPoller) {
2291
+ clearInterval(this._focusPoller);
2292
+ this._focusPoller = null;
2293
+ }
2294
+ this.teardownWindowEvents(this.mainWindow);
2295
+ this.mainWindow = null;
2296
+ this.releaseNotesView?.remove();
2297
+ this.releaseNotesView = null;
2298
+ this.releaseNotesWindow = null;
2299
+ this.unregisterAllShortcuts();
2300
+ void this.destroyTray();
2301
+ this.trayMenuItems.clear();
2302
+ this.sendToWebview = null;
2303
+ }
2304
+ }
2305
+
2306
+ // ============================================================================
2307
+ // Singleton
2308
+ // ============================================================================
2309
+
2310
+ let desktopManager: DesktopManager | null = null;
2311
+
2312
+ export function getDesktopManager(): DesktopManager {
2313
+ if (!desktopManager) {
2314
+ desktopManager = new DesktopManager();
2315
+ }
2316
+ return desktopManager;
2317
+ }