@elizaos/agent 2.0.0-alpha.97 → 2.0.0-beta.1

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 (1644) hide show
  1. package/README.md +33 -0
  2. package/dist/package.json +139 -0
  3. package/dist/packages/agent/src/actions/connector-resolver.d.ts +74 -0
  4. package/dist/packages/agent/src/actions/connector-resolver.d.ts.map +1 -0
  5. package/dist/packages/agent/src/actions/connector-resolver.js +253 -0
  6. package/dist/packages/agent/src/actions/contact.d.ts +35 -0
  7. package/dist/packages/agent/src/actions/contact.d.ts.map +1 -0
  8. package/dist/packages/agent/src/actions/contact.js +1688 -0
  9. package/dist/packages/agent/src/actions/context-signal-lexicon.d.ts +17 -0
  10. package/dist/packages/agent/src/actions/context-signal-lexicon.d.ts.map +1 -0
  11. package/dist/packages/agent/src/actions/context-signal-lexicon.js +206 -0
  12. package/dist/packages/agent/src/actions/context-signal.d.ts +48 -0
  13. package/dist/packages/agent/src/actions/context-signal.d.ts.map +1 -0
  14. package/dist/packages/agent/src/actions/context-signal.js +153 -0
  15. package/dist/packages/agent/src/actions/database.d.ts +20 -0
  16. package/dist/packages/agent/src/actions/database.d.ts.map +1 -0
  17. package/dist/packages/agent/src/actions/database.js +671 -0
  18. package/dist/packages/agent/src/actions/extract-page.d.ts +3 -0
  19. package/dist/packages/agent/src/actions/extract-page.d.ts.map +1 -0
  20. package/dist/packages/agent/src/actions/extract-page.js +153 -0
  21. package/dist/packages/agent/src/actions/extract-params.d.ts +87 -0
  22. package/dist/packages/agent/src/actions/extract-params.d.ts.map +1 -0
  23. package/dist/packages/agent/src/actions/extract-params.js +187 -0
  24. package/dist/packages/agent/src/actions/grounded-action-reply.d.ts +22 -0
  25. package/dist/packages/agent/src/actions/grounded-action-reply.d.ts.map +1 -0
  26. package/dist/packages/agent/src/actions/grounded-action-reply.js +287 -0
  27. package/dist/packages/agent/src/actions/index.d.ts +22 -0
  28. package/dist/packages/agent/src/actions/index.d.ts.map +1 -0
  29. package/dist/packages/agent/src/actions/index.js +21 -0
  30. package/dist/packages/agent/src/actions/logs.d.ts +11 -0
  31. package/dist/packages/agent/src/actions/logs.d.ts.map +1 -0
  32. package/dist/packages/agent/src/actions/logs.js +300 -0
  33. package/dist/packages/agent/src/actions/media.d.ts +9 -0
  34. package/dist/packages/agent/src/actions/media.d.ts.map +1 -0
  35. package/dist/packages/agent/src/actions/media.js +135 -0
  36. package/dist/packages/agent/src/actions/memories.d.ts +9 -0
  37. package/dist/packages/agent/src/actions/memories.d.ts.map +1 -0
  38. package/dist/packages/agent/src/actions/memories.js +369 -0
  39. package/dist/packages/agent/src/actions/page-action-groups.d.ts +17 -0
  40. package/dist/packages/agent/src/actions/page-action-groups.d.ts.map +1 -0
  41. package/dist/packages/agent/src/actions/page-action-groups.js +413 -0
  42. package/dist/packages/agent/src/actions/plugin.d.ts +32 -0
  43. package/dist/packages/agent/src/actions/plugin.d.ts.map +1 -0
  44. package/dist/packages/agent/src/actions/plugin.js +780 -0
  45. package/dist/packages/agent/src/actions/recent-conversation-texts.d.ts +9 -0
  46. package/dist/packages/agent/src/actions/recent-conversation-texts.d.ts.map +1 -0
  47. package/dist/packages/agent/src/actions/recent-conversation-texts.js +76 -0
  48. package/dist/packages/agent/src/actions/runtime.d.ts +19 -0
  49. package/dist/packages/agent/src/actions/runtime.d.ts.map +1 -0
  50. package/dist/packages/agent/src/actions/runtime.js +517 -0
  51. package/dist/packages/agent/src/actions/settings-actions.d.ts +19 -0
  52. package/dist/packages/agent/src/actions/settings-actions.d.ts.map +1 -0
  53. package/dist/packages/agent/src/actions/settings-actions.js +478 -0
  54. package/dist/packages/agent/src/actions/skill-command.d.ts +20 -0
  55. package/dist/packages/agent/src/actions/skill-command.d.ts.map +1 -0
  56. package/dist/packages/agent/src/actions/skill-command.js +170 -0
  57. package/dist/packages/agent/src/actions/stream-control.d.ts +20 -0
  58. package/dist/packages/agent/src/actions/stream-control.d.ts.map +1 -0
  59. package/dist/packages/agent/src/actions/stream-control.js +160 -0
  60. package/dist/packages/agent/src/actions/terminal.d.ts +15 -0
  61. package/dist/packages/agent/src/actions/terminal.d.ts.map +1 -0
  62. package/dist/packages/agent/src/actions/terminal.js +294 -0
  63. package/dist/packages/agent/src/actions/trajectories.d.ts +8 -0
  64. package/dist/packages/agent/src/actions/trajectories.d.ts.map +1 -0
  65. package/dist/packages/agent/src/actions/trajectories.js +135 -0
  66. package/dist/packages/agent/src/actions/trigger.d.ts +5 -0
  67. package/dist/packages/agent/src/actions/trigger.d.ts.map +1 -0
  68. package/dist/packages/agent/src/actions/trigger.js +514 -0
  69. package/dist/packages/agent/src/api/accounts-routes.d.ts +38 -0
  70. package/dist/packages/agent/src/api/accounts-routes.d.ts.map +1 -0
  71. package/dist/packages/agent/src/api/accounts-routes.js +927 -0
  72. package/dist/packages/agent/src/api/agent-admin-routes.d.ts +39 -0
  73. package/dist/packages/agent/src/api/agent-admin-routes.d.ts.map +1 -0
  74. package/dist/packages/agent/src/api/agent-admin-routes.js +190 -0
  75. package/dist/packages/agent/src/api/agent-lifecycle-routes.d.ts +16 -0
  76. package/dist/packages/agent/src/api/agent-lifecycle-routes.d.ts.map +1 -0
  77. package/dist/packages/agent/src/api/agent-lifecycle-routes.js +101 -0
  78. package/dist/packages/agent/src/api/agent-model.d.ts +5 -0
  79. package/dist/packages/agent/src/api/agent-model.d.ts.map +1 -0
  80. package/dist/packages/agent/src/api/agent-model.js +170 -0
  81. package/dist/packages/agent/src/api/agent-status-routes.d.ts +75 -0
  82. package/dist/packages/agent/src/api/agent-status-routes.d.ts.map +1 -0
  83. package/dist/packages/agent/src/api/agent-status-routes.js +264 -0
  84. package/dist/packages/agent/src/api/agent-transfer-routes.d.ts +16 -0
  85. package/dist/packages/agent/src/api/agent-transfer-routes.js +124 -0
  86. package/dist/packages/agent/src/api/app-package-routes.d.ts +7 -0
  87. package/dist/packages/agent/src/api/app-package-routes.d.ts.map +1 -0
  88. package/dist/packages/agent/src/api/app-package-routes.js +59 -0
  89. package/dist/packages/agent/src/api/apps-routes.d.ts +32 -0
  90. package/dist/packages/agent/src/api/apps-routes.d.ts.map +1 -0
  91. package/dist/packages/agent/src/api/apps-routes.js +998 -0
  92. package/dist/packages/agent/src/api/auth-routes.d.ts +11 -0
  93. package/dist/packages/agent/src/api/auth-routes.d.ts.map +1 -0
  94. package/dist/packages/agent/src/api/auth-routes.js +119 -0
  95. package/dist/packages/agent/src/api/avatar-routes.d.ts +11 -0
  96. package/dist/packages/agent/src/api/avatar-routes.d.ts.map +1 -0
  97. package/dist/packages/agent/src/api/avatar-routes.js +205 -0
  98. package/dist/packages/agent/src/api/binance-skill-helpers.d.ts +21 -0
  99. package/dist/packages/agent/src/api/binance-skill-helpers.d.ts.map +1 -0
  100. package/dist/packages/agent/src/api/binance-skill-helpers.js +745 -0
  101. package/dist/packages/agent/src/api/bug-report-routes.d.ts +10 -0
  102. package/dist/packages/agent/src/api/bug-report-routes.d.ts.map +1 -0
  103. package/dist/packages/agent/src/api/bug-report-routes.js +271 -0
  104. package/dist/packages/agent/src/api/build-variant-routes.d.ts +27 -0
  105. package/dist/packages/agent/src/api/build-variant-routes.d.ts.map +1 -0
  106. package/dist/packages/agent/src/api/build-variant-routes.js +27 -0
  107. package/dist/packages/agent/src/api/character-routes.d.ts +52 -0
  108. package/dist/packages/agent/src/api/character-routes.d.ts.map +1 -0
  109. package/dist/packages/agent/src/api/character-routes.js +377 -0
  110. package/dist/packages/agent/src/api/chat-augmentation.d.ts +70 -0
  111. package/dist/packages/agent/src/api/chat-augmentation.d.ts.map +1 -0
  112. package/dist/packages/agent/src/api/chat-augmentation.js +464 -0
  113. package/dist/packages/agent/src/api/chat-routes.d.ts +124 -0
  114. package/dist/packages/agent/src/api/chat-routes.d.ts.map +1 -0
  115. package/dist/packages/agent/src/api/chat-routes.js +1841 -0
  116. package/dist/packages/agent/src/api/chat-text-helpers.d.ts +11 -0
  117. package/dist/packages/agent/src/api/chat-text-helpers.d.ts.map +1 -0
  118. package/dist/packages/agent/src/api/chat-text-helpers.js +184 -0
  119. package/dist/packages/agent/src/api/client-chat-admin.d.ts +19 -0
  120. package/dist/packages/agent/src/api/client-chat-admin.d.ts.map +1 -0
  121. package/dist/packages/agent/src/api/client-chat-admin.js +27 -0
  122. package/dist/packages/agent/src/api/cloud-route-registry.d.ts +22 -0
  123. package/dist/packages/agent/src/api/cloud-route-registry.d.ts.map +1 -0
  124. package/dist/packages/agent/src/api/cloud-route-registry.js +20 -0
  125. package/dist/packages/agent/src/api/compat-utils.d.ts.map +1 -0
  126. package/dist/packages/agent/src/api/compat-utils.js +122 -0
  127. package/dist/packages/agent/src/api/config-env.d.ts +43 -0
  128. package/dist/packages/agent/src/api/config-env.d.ts.map +1 -0
  129. package/dist/packages/agent/src/api/config-env.js +284 -0
  130. package/dist/packages/agent/src/api/config-routes.d.ts +40 -0
  131. package/dist/packages/agent/src/api/config-routes.d.ts.map +1 -0
  132. package/dist/packages/agent/src/api/config-routes.js +429 -0
  133. package/dist/packages/agent/src/api/connector-account-routes.d.ts +25 -0
  134. package/dist/packages/agent/src/api/connector-account-routes.d.ts.map +1 -0
  135. package/dist/packages/agent/src/api/connector-account-routes.js +740 -0
  136. package/dist/packages/agent/src/api/connector-health.d.ts +42 -0
  137. package/dist/packages/agent/src/api/connector-health.d.ts.map +1 -0
  138. package/dist/packages/agent/src/api/connector-health.js +132 -0
  139. package/dist/packages/agent/src/api/connector-oauth-callback-auth.d.ts +2 -0
  140. package/dist/packages/agent/src/api/connector-oauth-callback-auth.d.ts.map +1 -0
  141. package/dist/packages/agent/src/api/connector-oauth-callback-auth.js +4 -0
  142. package/dist/packages/agent/src/api/connector-routes.d.ts +36 -0
  143. package/dist/packages/agent/src/api/connector-routes.d.ts.map +1 -0
  144. package/dist/packages/agent/src/api/connector-routes.js +184 -0
  145. package/dist/packages/agent/src/api/conversation-metadata.d.ts +10 -0
  146. package/dist/packages/agent/src/api/conversation-metadata.d.ts.map +1 -0
  147. package/dist/packages/agent/src/api/conversation-metadata.js +107 -0
  148. package/dist/packages/agent/src/api/conversation-routes.d.ts +43 -0
  149. package/dist/packages/agent/src/api/conversation-routes.d.ts.map +1 -0
  150. package/dist/packages/agent/src/api/conversation-routes.js +1208 -0
  151. package/dist/packages/agent/src/api/coordinator-wiring.d.ts +46 -0
  152. package/dist/packages/agent/src/api/coordinator-wiring.d.ts.map +1 -0
  153. package/dist/packages/agent/src/api/coordinator-wiring.js +108 -0
  154. package/dist/packages/agent/src/api/credit-detection.d.ts.map +1 -0
  155. package/dist/packages/agent/src/api/credit-detection.js +47 -0
  156. package/dist/packages/agent/src/api/curated-skills-routes.d.ts +22 -0
  157. package/dist/packages/agent/src/api/curated-skills-routes.d.ts.map +1 -0
  158. package/dist/packages/agent/src/api/curated-skills-routes.js +295 -0
  159. package/dist/packages/agent/src/api/database.d.ts +35 -0
  160. package/dist/packages/agent/src/api/database.d.ts.map +1 -0
  161. package/dist/packages/agent/src/api/database.js +1140 -0
  162. package/dist/packages/agent/src/api/diagnostics-routes.d.ts +59 -0
  163. package/dist/packages/agent/src/api/diagnostics-routes.d.ts.map +1 -0
  164. package/dist/packages/agent/src/api/diagnostics-routes.js +365 -0
  165. package/dist/packages/agent/src/api/documents-routes.d.ts +9 -0
  166. package/dist/packages/agent/src/api/documents-routes.d.ts.map +1 -0
  167. package/dist/packages/agent/src/api/documents-routes.js +26 -0
  168. package/dist/packages/agent/src/api/documents-service-loader.d.ts +76 -0
  169. package/dist/packages/agent/src/api/documents-service-loader.d.ts.map +1 -0
  170. package/dist/packages/agent/src/api/documents-service-loader.js +36 -0
  171. package/dist/packages/agent/src/api/health-routes.d.ts +46 -0
  172. package/dist/packages/agent/src/api/health-routes.d.ts.map +1 -0
  173. package/dist/packages/agent/src/api/health-routes.js +450 -0
  174. package/dist/packages/agent/src/api/inbox-routes.d.ts +47 -0
  175. package/dist/packages/agent/src/api/inbox-routes.d.ts.map +1 -0
  176. package/dist/packages/agent/src/api/inbox-routes.js +1579 -0
  177. package/dist/packages/agent/src/api/index.d.ts +46 -0
  178. package/dist/packages/agent/src/api/index.d.ts.map +1 -0
  179. package/dist/packages/agent/src/api/index.js +49 -0
  180. package/dist/packages/agent/src/api/memory-routes.d.ts +9 -0
  181. package/dist/packages/agent/src/api/memory-routes.d.ts.map +1 -0
  182. package/dist/packages/agent/src/api/memory-routes.js +474 -0
  183. package/dist/packages/agent/src/api/misc-routes.d.ts +64 -0
  184. package/dist/packages/agent/src/api/misc-routes.d.ts.map +1 -0
  185. package/dist/packages/agent/src/api/misc-routes.js +565 -0
  186. package/dist/packages/agent/src/api/mobile-optional-routes.d.ts +3 -0
  187. package/dist/packages/agent/src/api/mobile-optional-routes.d.ts.map +1 -0
  188. package/dist/packages/agent/src/api/mobile-optional-routes.js +91 -0
  189. package/dist/packages/agent/src/api/model-provider-helpers.d.ts +68 -0
  190. package/dist/packages/agent/src/api/model-provider-helpers.d.ts.map +1 -0
  191. package/dist/packages/agent/src/api/model-provider-helpers.js +623 -0
  192. package/dist/packages/agent/src/api/models-routes.d.ts +14 -0
  193. package/dist/packages/agent/src/api/models-routes.d.ts.map +1 -0
  194. package/dist/packages/agent/src/api/music-player-route-fallback.d.ts +16 -0
  195. package/dist/packages/agent/src/api/music-player-route-fallback.d.ts.map +1 -0
  196. package/dist/packages/agent/src/api/music-player-route-fallback.js +65 -0
  197. package/dist/packages/agent/src/api/nfa-routes.d.ts +6 -0
  198. package/dist/packages/agent/src/api/nfa-routes.d.ts.map +1 -0
  199. package/dist/packages/agent/src/api/nfa-routes.js +125 -0
  200. package/dist/packages/agent/src/api/onboarding-routes.d.ts +50 -0
  201. package/dist/packages/agent/src/api/onboarding-routes.d.ts.map +1 -0
  202. package/dist/packages/agent/src/api/onboarding-routes.js +588 -0
  203. package/dist/packages/agent/src/api/owner-contact-helpers.d.ts +39 -0
  204. package/dist/packages/agent/src/api/owner-contact-helpers.d.ts.map +1 -0
  205. package/dist/packages/agent/src/api/owner-contact-helpers.js +47 -0
  206. package/dist/packages/agent/src/api/parse-action-block.d.ts +53 -0
  207. package/dist/packages/agent/src/api/parse-action-block.d.ts.map +1 -0
  208. package/dist/packages/agent/src/api/parse-action-block.js +181 -0
  209. package/dist/packages/agent/src/api/permission-request-prompt.d.ts +19 -0
  210. package/dist/packages/agent/src/api/permission-request-prompt.d.ts.map +1 -0
  211. package/dist/packages/agent/src/api/permission-request-prompt.js +53 -0
  212. package/dist/packages/agent/src/api/permissions-routes-extra.d.ts +30 -0
  213. package/dist/packages/agent/src/api/permissions-routes-extra.d.ts.map +1 -0
  214. package/dist/packages/agent/src/api/permissions-routes-extra.js +78 -0
  215. package/dist/packages/agent/src/api/permissions-routes.d.ts +27 -0
  216. package/dist/packages/agent/src/api/permissions-routes.d.ts.map +1 -0
  217. package/dist/packages/agent/src/api/permissions-routes.js +259 -0
  218. package/dist/packages/agent/src/api/plugin-discovery-helpers.d.ts +147 -0
  219. package/dist/packages/agent/src/api/plugin-discovery-helpers.d.ts.map +1 -0
  220. package/dist/packages/agent/src/api/plugin-discovery-helpers.js +1118 -0
  221. package/dist/packages/agent/src/api/plugin-routes.d.ts +144 -0
  222. package/dist/packages/agent/src/api/plugin-routes.d.ts.map +1 -0
  223. package/dist/packages/agent/src/api/plugin-routes.js +1285 -0
  224. package/dist/packages/agent/src/api/plugin-runtime-apply.d.ts +31 -0
  225. package/dist/packages/agent/src/api/plugin-runtime-apply.d.ts.map +1 -0
  226. package/dist/packages/agent/src/api/plugin-runtime-apply.js +217 -0
  227. package/dist/packages/agent/src/api/plugin-validation.d.ts.map +1 -0
  228. package/dist/packages/agent/src/api/plugin-validation.js +261 -0
  229. package/dist/packages/agent/src/api/provider-switch-config.d.ts +62 -0
  230. package/dist/packages/agent/src/api/provider-switch-config.d.ts.map +1 -0
  231. package/dist/packages/agent/src/api/provider-switch-config.js +719 -0
  232. package/dist/packages/agent/src/api/provider-switch-routes.d.ts +29 -0
  233. package/dist/packages/agent/src/api/provider-switch-routes.d.ts.map +1 -0
  234. package/dist/packages/agent/src/api/provider-switch-routes.js +142 -0
  235. package/dist/packages/agent/src/api/rate-limiter.d.ts +29 -0
  236. package/dist/packages/agent/src/api/rate-limiter.d.ts.map +1 -0
  237. package/dist/packages/agent/src/api/rate-limiter.js +57 -0
  238. package/dist/packages/agent/src/api/registry-routes.d.ts +29 -0
  239. package/dist/packages/agent/src/api/registry-routes.d.ts.map +1 -0
  240. package/dist/packages/agent/src/api/registry-routes.js +98 -0
  241. package/dist/packages/agent/src/api/registry-service.d.ts +77 -0
  242. package/dist/packages/agent/src/api/registry-service.d.ts.map +1 -0
  243. package/dist/packages/agent/src/api/relationships-routes.d.ts +7 -0
  244. package/dist/packages/agent/src/api/relationships-routes.d.ts.map +1 -0
  245. package/dist/packages/agent/src/api/relationships-routes.js +287 -0
  246. package/dist/packages/agent/src/api/runtime-plugin-routes.d.ts +27 -0
  247. package/dist/packages/agent/src/api/runtime-plugin-routes.d.ts.map +1 -0
  248. package/dist/packages/agent/src/api/runtime-plugin-routes.js +203 -0
  249. package/dist/packages/agent/src/api/server-auth.d.ts +46 -0
  250. package/dist/packages/agent/src/api/server-auth.d.ts.map +1 -0
  251. package/dist/packages/agent/src/api/server-auth.js +507 -0
  252. package/dist/packages/agent/src/api/server-autonomy-helpers.d.ts +5 -0
  253. package/dist/packages/agent/src/api/server-autonomy-helpers.d.ts.map +1 -0
  254. package/dist/packages/agent/src/api/server-autonomy-helpers.js +28 -0
  255. package/dist/packages/agent/src/api/server-helpers-auth.d.ts +41 -0
  256. package/dist/packages/agent/src/api/server-helpers-auth.d.ts.map +1 -0
  257. package/dist/packages/agent/src/api/server-helpers-auth.js +627 -0
  258. package/dist/packages/agent/src/api/server-helpers-config.d.ts +37 -0
  259. package/dist/packages/agent/src/api/server-helpers-config.d.ts.map +1 -0
  260. package/dist/packages/agent/src/api/server-helpers-config.js +293 -0
  261. package/dist/packages/agent/src/api/server-helpers-fetch.d.ts +15 -0
  262. package/dist/packages/agent/src/api/server-helpers-fetch.d.ts.map +1 -0
  263. package/dist/packages/agent/src/api/server-helpers-fetch.js +149 -0
  264. package/dist/packages/agent/src/api/server-helpers-mcp.d.ts +12 -0
  265. package/dist/packages/agent/src/api/server-helpers-mcp.d.ts.map +1 -0
  266. package/dist/packages/agent/src/api/server-helpers-mcp.js +315 -0
  267. package/dist/packages/agent/src/api/server-helpers-plugin.d.ts +13 -0
  268. package/dist/packages/agent/src/api/server-helpers-plugin.d.ts.map +1 -0
  269. package/dist/packages/agent/src/api/server-helpers-plugin.js +160 -0
  270. package/dist/packages/agent/src/api/server-helpers-swarm.d.ts +101 -0
  271. package/dist/packages/agent/src/api/server-helpers-swarm.d.ts.map +1 -0
  272. package/dist/packages/agent/src/api/server-helpers-swarm.js +646 -0
  273. package/dist/packages/agent/src/api/server-helpers-wallet.d.ts +18 -0
  274. package/dist/packages/agent/src/api/server-helpers-wallet.d.ts.map +1 -0
  275. package/dist/packages/agent/src/api/server-helpers-wallet.js +177 -0
  276. package/dist/packages/agent/src/api/server-helpers.d.ts +96 -0
  277. package/dist/packages/agent/src/api/server-helpers.d.ts.map +1 -0
  278. package/dist/packages/agent/src/api/server-helpers.js +595 -0
  279. package/dist/packages/agent/src/api/server-route-dispatch.d.ts +30 -0
  280. package/dist/packages/agent/src/api/server-route-dispatch.d.ts.map +1 -0
  281. package/dist/packages/agent/src/api/server-route-dispatch.js +103 -0
  282. package/dist/packages/agent/src/api/server-startup.d.ts +16 -0
  283. package/dist/packages/agent/src/api/server-startup.d.ts.map +1 -0
  284. package/dist/packages/agent/src/api/server-startup.js +14 -0
  285. package/dist/packages/agent/src/api/server-types.d.ts +232 -0
  286. package/dist/packages/agent/src/api/server-types.d.ts.map +1 -0
  287. package/dist/packages/agent/src/api/server-types.js +6 -0
  288. package/dist/packages/agent/src/api/server.d.ts +61 -0
  289. package/dist/packages/agent/src/api/server.d.ts.map +1 -0
  290. package/dist/packages/agent/src/api/server.js +3215 -0
  291. package/dist/packages/agent/src/api/skill-discovery-helpers.d.ts +80 -0
  292. package/dist/packages/agent/src/api/skill-discovery-helpers.d.ts.map +1 -0
  293. package/dist/packages/agent/src/api/skill-discovery-helpers.js +385 -0
  294. package/dist/packages/agent/src/api/skills-routes.d.ts +32 -0
  295. package/dist/packages/agent/src/api/skills-routes.d.ts.map +1 -0
  296. package/dist/packages/agent/src/api/skills-routes.js +978 -0
  297. package/dist/packages/agent/src/api/static-file-server.d.ts +19 -0
  298. package/dist/packages/agent/src/api/static-file-server.d.ts.map +1 -0
  299. package/dist/packages/agent/src/api/static-file-server.js +234 -0
  300. package/dist/packages/agent/src/api/subscription-routes.d.ts +20 -0
  301. package/dist/packages/agent/src/api/subscription-routes.d.ts.map +1 -0
  302. package/dist/packages/agent/src/api/subscription-routes.js +261 -0
  303. package/dist/packages/agent/src/api/task-agent-message-routing.d.ts +10 -0
  304. package/dist/packages/agent/src/api/task-agent-message-routing.d.ts.map +1 -0
  305. package/dist/packages/agent/src/api/task-agent-message-routing.js +62 -0
  306. package/dist/packages/agent/src/api/terminal-execution-routing.d.ts +14 -0
  307. package/dist/packages/agent/src/api/terminal-execution-routing.d.ts.map +1 -0
  308. package/dist/packages/agent/src/api/terminal-execution-routing.js +23 -0
  309. package/dist/packages/agent/src/api/terminal-run-limits.d.ts.map +1 -0
  310. package/dist/packages/agent/src/api/terminal-run-limits.js +20 -0
  311. package/dist/packages/agent/src/api/trade-safety.d.ts +35 -0
  312. package/dist/packages/agent/src/api/trade-safety.d.ts.map +1 -0
  313. package/dist/packages/agent/src/api/trade-safety.js +62 -0
  314. package/dist/packages/agent/src/api/training-service-like.d.ts +39 -0
  315. package/dist/packages/agent/src/api/training-service-like.d.ts.map +1 -0
  316. package/dist/packages/agent/src/api/travel-provider-relay-routes.d.ts +9 -0
  317. package/dist/packages/agent/src/api/travel-provider-relay-routes.d.ts.map +1 -0
  318. package/dist/packages/agent/src/api/travel-provider-relay-routes.js +143 -0
  319. package/dist/packages/agent/src/api/tx-service.d.ts +53 -0
  320. package/dist/packages/agent/src/api/tx-service.d.ts.map +1 -0
  321. package/dist/packages/agent/src/api/tx-service.js +217 -0
  322. package/dist/packages/agent/src/api/update-routes.d.ts +19 -0
  323. package/dist/packages/agent/src/api/update-routes.d.ts.map +1 -0
  324. package/dist/packages/agent/src/api/update-routes.js +54 -0
  325. package/dist/packages/agent/src/api/wallet-capability.d.ts +33 -0
  326. package/dist/packages/agent/src/api/wallet-capability.d.ts.map +1 -0
  327. package/dist/packages/agent/src/api/wallet-capability.js +193 -0
  328. package/dist/packages/agent/src/api/wallet-dex-prices.d.ts +25 -0
  329. package/dist/packages/agent/src/api/wallet-dex-prices.d.ts.map +1 -0
  330. package/dist/packages/agent/src/api/wallet-dex-prices.js +125 -0
  331. package/dist/packages/agent/src/api/wallet-env-sync.d.ts +2 -0
  332. package/dist/packages/agent/src/api/wallet-env-sync.d.ts.map +1 -0
  333. package/dist/packages/agent/src/api/wallet-env-sync.js +108 -0
  334. package/dist/packages/agent/src/api/wallet-evm-balance.d.ts +72 -0
  335. package/dist/packages/agent/src/api/wallet-evm-balance.d.ts.map +1 -0
  336. package/dist/packages/agent/src/api/wallet-evm-balance.js +663 -0
  337. package/dist/packages/agent/src/api/wallet-routes.d.ts +41 -0
  338. package/dist/packages/agent/src/api/wallet-routes.d.ts.map +1 -0
  339. package/dist/packages/agent/src/api/wallet-routes.js +848 -0
  340. package/dist/packages/agent/src/api/wallet-rpc.d.ts +64 -0
  341. package/dist/packages/agent/src/api/wallet-rpc.d.ts.map +1 -0
  342. package/dist/packages/agent/src/api/wallet-rpc.js +437 -0
  343. package/dist/packages/agent/src/api/wallet-trading-profile.d.ts +31 -0
  344. package/dist/packages/agent/src/api/wallet-trading-profile.d.ts.map +1 -0
  345. package/dist/packages/agent/src/api/wallet-trading-profile.js +544 -0
  346. package/dist/packages/agent/src/api/wallet.d.ts +64 -0
  347. package/dist/packages/agent/src/api/wallet.d.ts.map +1 -0
  348. package/dist/packages/agent/src/api/wallet.js +780 -0
  349. package/dist/packages/agent/src/api/workbench-helpers.d.ts +39 -0
  350. package/dist/packages/agent/src/api/workbench-helpers.d.ts.map +1 -0
  351. package/dist/packages/agent/src/api/workbench-helpers.js +137 -0
  352. package/dist/packages/agent/src/api/workbench-routes.d.ts +43 -0
  353. package/dist/packages/agent/src/api/workbench-routes.d.ts.map +1 -0
  354. package/dist/packages/agent/src/api/workbench-routes.js +265 -0
  355. package/dist/packages/agent/src/api/x-relay-routes.d.ts +27 -0
  356. package/dist/packages/agent/src/api/x-relay-routes.d.ts.map +1 -0
  357. package/dist/packages/agent/src/api/x-relay-routes.js +134 -0
  358. package/dist/packages/agent/src/auth/account-storage.d.ts +48 -0
  359. package/dist/packages/agent/src/auth/account-storage.d.ts.map +1 -0
  360. package/dist/packages/agent/src/auth/account-storage.js +229 -0
  361. package/dist/packages/agent/src/auth/anthropic.d.ts +24 -0
  362. package/dist/packages/agent/src/auth/anthropic.d.ts.map +1 -0
  363. package/dist/packages/agent/src/auth/anthropic.js +38 -0
  364. package/dist/packages/agent/src/auth/claude-code-stealth-preload.d.ts +2 -0
  365. package/dist/packages/agent/src/auth/claude-code-stealth-preload.d.ts.map +1 -0
  366. package/dist/packages/agent/src/auth/claude-code-stealth-preload.js +2 -0
  367. package/dist/packages/agent/src/auth/claude-code-stealth.d.ts.map +1 -0
  368. package/dist/packages/agent/src/auth/claude-code-stealth.js +116 -0
  369. package/dist/packages/agent/src/auth/credentials.d.ts +100 -0
  370. package/dist/packages/agent/src/auth/credentials.d.ts.map +1 -0
  371. package/dist/packages/agent/src/auth/credentials.js +553 -0
  372. package/dist/packages/agent/src/auth/index.d.ts +8 -0
  373. package/dist/packages/agent/src/auth/index.d.ts.map +1 -0
  374. package/dist/packages/agent/src/auth/index.js +7 -0
  375. package/dist/packages/agent/src/auth/oauth-flow.d.ts +106 -0
  376. package/dist/packages/agent/src/auth/oauth-flow.d.ts.map +1 -0
  377. package/dist/packages/agent/src/auth/oauth-flow.js +349 -0
  378. package/dist/packages/agent/src/auth/openai-codex.d.ts +27 -0
  379. package/dist/packages/agent/src/auth/openai-codex.d.ts.map +1 -0
  380. package/dist/packages/agent/src/auth/openai-codex.js +76 -0
  381. package/dist/packages/agent/src/auth/refresh-mutex.d.ts +19 -0
  382. package/dist/packages/agent/src/auth/refresh-mutex.d.ts.map +1 -0
  383. package/dist/packages/agent/src/auth/refresh-mutex.js +33 -0
  384. package/dist/packages/agent/src/auth/types.d.ts +58 -0
  385. package/dist/packages/agent/src/auth/types.d.ts.map +1 -0
  386. package/dist/packages/agent/src/auth/types.js +149 -0
  387. package/dist/packages/agent/src/auth/vendor/pi-oauth/anthropic-login.d.ts +48 -0
  388. package/dist/packages/agent/src/auth/vendor/pi-oauth/anthropic-login.d.ts.map +1 -0
  389. package/dist/packages/agent/src/auth/vendor/pi-oauth/anthropic-login.js +113 -0
  390. package/dist/packages/agent/src/auth/vendor/pi-oauth/openai-codex-login.d.ts +26 -0
  391. package/dist/packages/agent/src/auth/vendor/pi-oauth/openai-codex-login.d.ts.map +1 -0
  392. package/dist/packages/agent/src/auth/vendor/pi-oauth/openai-codex-login.js +343 -0
  393. package/dist/packages/agent/src/auth/vendor/pi-oauth/pkce.d.ts +9 -0
  394. package/dist/packages/agent/src/auth/vendor/pi-oauth/pkce.d.ts.map +1 -0
  395. package/dist/packages/agent/src/auth/vendor/pi-oauth/pkce.js +21 -0
  396. package/dist/packages/agent/src/autonomy/index.d.ts +48 -0
  397. package/dist/packages/agent/src/autonomy/index.d.ts.map +1 -0
  398. package/dist/packages/agent/src/autonomy/index.js +344 -0
  399. package/dist/packages/agent/src/awareness/index.d.ts +2 -0
  400. package/dist/packages/agent/src/awareness/index.d.ts.map +1 -0
  401. package/dist/packages/agent/src/awareness/index.js +1 -0
  402. package/dist/packages/agent/src/awareness/registry.d.ts +2 -0
  403. package/dist/packages/agent/src/awareness/registry.d.ts.map +1 -0
  404. package/dist/packages/agent/src/awareness/registry.js +1 -0
  405. package/dist/packages/agent/src/bin.js +51 -0
  406. package/dist/packages/agent/src/cli/benchmark.d.ts +10 -0
  407. package/dist/packages/agent/src/cli/benchmark.d.ts.map +1 -0
  408. package/dist/packages/agent/src/cli/benchmark.js +293 -0
  409. package/dist/packages/agent/src/cli/index.d.ts.map +1 -0
  410. package/dist/packages/agent/src/cli/index.js +94 -0
  411. package/dist/packages/agent/src/config/config.d.ts +6 -0
  412. package/dist/packages/agent/src/config/config.d.ts.map +1 -0
  413. package/dist/packages/agent/src/config/config.js +285 -0
  414. package/dist/packages/agent/src/config/env-vars.d.ts +9 -0
  415. package/dist/packages/agent/src/config/env-vars.d.ts.map +1 -0
  416. package/dist/packages/agent/src/config/env-vars.js +281 -0
  417. package/dist/packages/agent/src/config/feature-flags.d.ts +17 -0
  418. package/dist/packages/agent/src/config/feature-flags.d.ts.map +1 -0
  419. package/dist/packages/agent/src/config/feature-flags.js +37 -0
  420. package/dist/packages/agent/src/config/includes.d.ts.map +1 -0
  421. package/dist/packages/agent/src/config/includes.js +149 -0
  422. package/dist/packages/agent/src/config/index.d.ts +11 -0
  423. package/dist/packages/agent/src/config/index.d.ts.map +1 -0
  424. package/dist/packages/agent/src/config/index.js +9 -0
  425. package/dist/packages/agent/src/config/model-metadata.d.ts +20 -0
  426. package/dist/packages/agent/src/config/model-metadata.d.ts.map +1 -0
  427. package/dist/packages/agent/src/config/model-metadata.js +133 -0
  428. package/dist/packages/agent/src/config/owner-contacts.d.ts +42 -0
  429. package/dist/packages/agent/src/config/owner-contacts.d.ts.map +1 -0
  430. package/dist/packages/agent/src/config/owner-contacts.js +238 -0
  431. package/dist/packages/agent/src/config/paths.d.ts +17 -0
  432. package/dist/packages/agent/src/config/paths.d.ts.map +1 -0
  433. package/dist/packages/agent/src/config/paths.js +65 -0
  434. package/dist/packages/agent/src/config/plugin-auto-enable.d.ts +13 -0
  435. package/dist/packages/agent/src/config/plugin-auto-enable.d.ts.map +1 -0
  436. package/dist/packages/agent/src/config/plugin-auto-enable.js +12 -0
  437. package/dist/packages/agent/src/config/plugin-widgets.d.ts +29 -0
  438. package/dist/packages/agent/src/config/plugin-widgets.d.ts.map +1 -0
  439. package/dist/packages/agent/src/config/plugin-widgets.js +104 -0
  440. package/dist/packages/agent/src/config/schema.d.ts +87 -0
  441. package/dist/packages/agent/src/config/schema.d.ts.map +1 -0
  442. package/dist/packages/agent/src/config/schema.js +928 -0
  443. package/dist/packages/agent/src/config/types.agent-defaults.d.ts +2 -0
  444. package/dist/packages/agent/src/config/types.agent-defaults.d.ts.map +1 -0
  445. package/dist/packages/agent/src/config/types.agent-defaults.js +1 -0
  446. package/dist/packages/agent/src/config/types.agents.d.ts +2 -0
  447. package/dist/packages/agent/src/config/types.agents.d.ts.map +1 -0
  448. package/dist/packages/agent/src/config/types.agents.js +1 -0
  449. package/dist/packages/agent/src/config/types.d.ts +2 -0
  450. package/dist/packages/agent/src/config/types.d.ts.map +1 -0
  451. package/dist/packages/agent/src/config/types.eliza.d.ts +2 -0
  452. package/dist/packages/agent/src/config/types.eliza.d.ts.map +1 -0
  453. package/dist/packages/agent/src/config/types.eliza.js +1 -0
  454. package/dist/packages/agent/src/config/types.gateway.d.ts +2 -0
  455. package/dist/packages/agent/src/config/types.gateway.d.ts.map +1 -0
  456. package/dist/packages/agent/src/config/types.gateway.js +1 -0
  457. package/dist/packages/agent/src/config/types.hooks.d.ts +2 -0
  458. package/dist/packages/agent/src/config/types.hooks.d.ts.map +1 -0
  459. package/dist/packages/agent/src/config/types.hooks.js +1 -0
  460. package/dist/packages/agent/src/config/types.js +1 -0
  461. package/dist/packages/agent/src/config/types.messages.d.ts +2 -0
  462. package/dist/packages/agent/src/config/types.messages.d.ts.map +1 -0
  463. package/dist/packages/agent/src/config/types.messages.js +1 -0
  464. package/dist/packages/agent/src/config/types.tools.d.ts +2 -0
  465. package/dist/packages/agent/src/config/types.tools.d.ts.map +1 -0
  466. package/dist/packages/agent/src/config/types.tools.js +1 -0
  467. package/dist/packages/agent/src/config/zod-schema.agent-runtime.d.ts +1164 -0
  468. package/dist/packages/agent/src/config/zod-schema.agent-runtime.d.ts.map +1 -0
  469. package/dist/packages/agent/src/config/zod-schema.agent-runtime.js +808 -0
  470. package/dist/packages/agent/src/config/zod-schema.core.d.ts +1279 -0
  471. package/dist/packages/agent/src/config/zod-schema.core.d.ts.map +1 -0
  472. package/dist/packages/agent/src/config/zod-schema.core.js +761 -0
  473. package/dist/packages/agent/src/config/zod-schema.d.ts +3404 -0
  474. package/dist/packages/agent/src/config/zod-schema.d.ts.map +1 -0
  475. package/dist/packages/agent/src/config/zod-schema.js +846 -0
  476. package/dist/packages/agent/src/config/zod-schema.providers-core.d.ts +2752 -0
  477. package/dist/packages/agent/src/config/zod-schema.providers-core.d.ts.map +1 -0
  478. package/dist/packages/agent/src/config/zod-schema.providers-core.js +969 -0
  479. package/dist/packages/agent/src/config/zod-schema.session.d.ts +183 -0
  480. package/dist/packages/agent/src/config/zod-schema.session.js +86 -0
  481. package/dist/packages/agent/src/contracts/awareness.d.ts +38 -0
  482. package/dist/packages/agent/src/contracts/index.d.ts +2 -0
  483. package/dist/packages/agent/src/contracts/index.d.ts.map +1 -0
  484. package/dist/packages/agent/src/contracts/index.js +1 -0
  485. package/dist/packages/agent/src/contracts/onboarding-provider-defaults.d.ts +177 -0
  486. package/dist/packages/agent/src/contracts/onboarding-provider-defaults.d.ts.map +1 -0
  487. package/dist/packages/agent/src/contracts/onboarding-provider-defaults.js +202 -0
  488. package/dist/packages/agent/src/diagnostics/index.d.ts +2 -0
  489. package/dist/packages/agent/src/diagnostics/index.d.ts.map +1 -0
  490. package/dist/packages/agent/src/diagnostics/index.js +1 -0
  491. package/dist/packages/agent/src/diagnostics/integration-observability.d.ts +40 -0
  492. package/dist/packages/agent/src/diagnostics/integration-observability.d.ts.map +1 -0
  493. package/dist/packages/agent/src/diagnostics/integration-observability.js +78 -0
  494. package/dist/packages/agent/src/hooks/discovery.d.ts +13 -0
  495. package/dist/packages/agent/src/hooks/discovery.d.ts.map +1 -0
  496. package/dist/packages/agent/src/hooks/discovery.js +191 -0
  497. package/dist/packages/agent/src/hooks/eligibility.d.ts +12 -0
  498. package/dist/packages/agent/src/hooks/eligibility.d.ts.map +1 -0
  499. package/dist/packages/agent/src/hooks/eligibility.js +105 -0
  500. package/dist/packages/agent/src/hooks/index.d.ts +3 -0
  501. package/dist/packages/agent/src/hooks/index.d.ts.map +1 -0
  502. package/dist/packages/agent/src/hooks/index.js +2 -0
  503. package/dist/packages/agent/src/hooks/loader.d.ts +34 -0
  504. package/dist/packages/agent/src/hooks/loader.d.ts.map +1 -0
  505. package/dist/packages/agent/src/hooks/loader.js +214 -0
  506. package/dist/packages/agent/src/hooks/registry.d.ts +11 -0
  507. package/dist/packages/agent/src/hooks/registry.d.ts.map +1 -0
  508. package/dist/packages/agent/src/index.d.ts +73 -0
  509. package/dist/packages/agent/src/index.d.ts.map +1 -0
  510. package/dist/packages/agent/src/index.js +104 -0
  511. package/dist/packages/agent/src/providers/admin-panel.d.ts +4 -0
  512. package/dist/packages/agent/src/providers/admin-panel.d.ts.map +1 -0
  513. package/dist/packages/agent/src/providers/admin-panel.js +89 -0
  514. package/dist/packages/agent/src/providers/admin-trust.d.ts.map +1 -0
  515. package/dist/packages/agent/src/providers/admin-trust.js +40 -0
  516. package/dist/packages/agent/src/providers/automation-terminal-bridge.d.ts +3 -0
  517. package/dist/packages/agent/src/providers/automation-terminal-bridge.d.ts.map +1 -0
  518. package/dist/packages/agent/src/providers/automation-terminal-bridge.js +77 -0
  519. package/dist/packages/agent/src/providers/conversation-proximity.d.ts +3 -0
  520. package/dist/packages/agent/src/providers/conversation-proximity.d.ts.map +1 -0
  521. package/dist/packages/agent/src/providers/conversation-proximity.js +62 -0
  522. package/dist/packages/agent/src/providers/escalation-trigger.d.ts +15 -0
  523. package/dist/packages/agent/src/providers/escalation-trigger.d.ts.map +1 -0
  524. package/dist/packages/agent/src/providers/escalation-trigger.js +171 -0
  525. package/dist/packages/agent/src/providers/index.d.ts +19 -0
  526. package/dist/packages/agent/src/providers/index.d.ts.map +1 -0
  527. package/dist/packages/agent/src/providers/index.js +18 -0
  528. package/dist/packages/agent/src/providers/local-models.d.ts +118 -0
  529. package/dist/packages/agent/src/providers/local-models.d.ts.map +1 -0
  530. package/dist/packages/agent/src/providers/local-models.js +418 -0
  531. package/dist/packages/agent/src/providers/media-provider.d.ts +233 -0
  532. package/dist/packages/agent/src/providers/media-provider.d.ts.map +1 -0
  533. package/dist/packages/agent/src/providers/media-provider.js +1474 -0
  534. package/dist/packages/agent/src/providers/page-scoped-context.d.ts +3 -0
  535. package/dist/packages/agent/src/providers/page-scoped-context.d.ts.map +1 -0
  536. package/dist/packages/agent/src/providers/page-scoped-context.js +551 -0
  537. package/dist/packages/agent/src/providers/pending-permissions-provider.d.ts +19 -0
  538. package/dist/packages/agent/src/providers/pending-permissions-provider.d.ts.map +1 -0
  539. package/dist/packages/agent/src/providers/pending-permissions-provider.js +104 -0
  540. package/dist/packages/agent/src/providers/recent-conversations.d.ts +3 -0
  541. package/dist/packages/agent/src/providers/recent-conversations.d.ts.map +1 -0
  542. package/dist/packages/agent/src/providers/recent-conversations.js +100 -0
  543. package/dist/packages/agent/src/providers/relevant-conversations.d.ts +3 -0
  544. package/dist/packages/agent/src/providers/relevant-conversations.d.ts.map +1 -0
  545. package/dist/packages/agent/src/providers/relevant-conversations.js +99 -0
  546. package/dist/packages/agent/src/providers/role-backfill.d.ts +18 -0
  547. package/dist/packages/agent/src/providers/role-backfill.d.ts.map +1 -0
  548. package/dist/packages/agent/src/providers/role-backfill.js +86 -0
  549. package/dist/packages/agent/src/providers/rolodex.d.ts +3 -0
  550. package/dist/packages/agent/src/providers/rolodex.d.ts.map +1 -0
  551. package/dist/packages/agent/src/providers/rolodex.js +83 -0
  552. package/dist/packages/agent/src/providers/self-status.d.ts +4 -0
  553. package/dist/packages/agent/src/providers/self-status.d.ts.map +1 -0
  554. package/dist/packages/agent/src/providers/self-status.js +22 -0
  555. package/dist/packages/agent/src/providers/session-bridge.d.ts.map +1 -0
  556. package/dist/packages/agent/src/providers/session-bridge.js +90 -0
  557. package/dist/packages/agent/src/providers/session-utils.d.ts +20 -0
  558. package/dist/packages/agent/src/providers/session-utils.d.ts.map +1 -0
  559. package/dist/packages/agent/src/providers/session-utils.js +32 -0
  560. package/dist/packages/agent/src/providers/simple-mode.d.ts.map +1 -0
  561. package/dist/packages/agent/src/providers/simple-mode.js +49 -0
  562. package/dist/packages/agent/src/providers/skill-provider.d.ts +16 -0
  563. package/dist/packages/agent/src/providers/skill-provider.d.ts.map +1 -0
  564. package/dist/packages/agent/src/providers/skill-provider.js +353 -0
  565. package/dist/packages/agent/src/providers/tasks.d.ts +9 -0
  566. package/dist/packages/agent/src/providers/tasks.d.ts.map +1 -0
  567. package/dist/packages/agent/src/providers/tasks.js +118 -0
  568. package/dist/packages/agent/src/providers/ui-catalog.d.ts.map +1 -0
  569. package/dist/packages/agent/src/providers/ui-catalog.js +100 -0
  570. package/dist/packages/agent/src/providers/user-name.d.ts +11 -0
  571. package/dist/packages/agent/src/providers/user-name.d.ts.map +1 -0
  572. package/dist/packages/agent/src/providers/user-name.js +46 -0
  573. package/dist/packages/agent/src/providers/workspace-provider.d.ts +14 -0
  574. package/dist/packages/agent/src/providers/workspace-provider.d.ts.map +1 -0
  575. package/dist/packages/agent/src/providers/workspace-provider.js +183 -0
  576. package/dist/packages/agent/src/providers/workspace.d.ts +53 -0
  577. package/dist/packages/agent/src/providers/workspace.d.ts.map +1 -0
  578. package/dist/packages/agent/src/providers/workspace.js +418 -0
  579. package/dist/packages/agent/src/runtime/advanced-capabilities-config.d.ts +8 -0
  580. package/dist/packages/agent/src/runtime/advanced-capabilities-config.d.ts.map +1 -0
  581. package/dist/packages/agent/src/runtime/advanced-capabilities-config.js +41 -0
  582. package/dist/packages/agent/src/runtime/agent-wallets.d.ts +138 -0
  583. package/dist/packages/agent/src/runtime/agent-wallets.d.ts.map +1 -0
  584. package/dist/packages/agent/src/runtime/agent-wallets.js +308 -0
  585. package/dist/packages/agent/src/runtime/analysis-mode-flag.d.ts +93 -0
  586. package/dist/packages/agent/src/runtime/analysis-mode-flag.d.ts.map +1 -0
  587. package/dist/packages/agent/src/runtime/analysis-mode-flag.js +131 -0
  588. package/dist/packages/agent/src/runtime/android-app-plugins.d.ts +13 -0
  589. package/dist/packages/agent/src/runtime/android-app-plugins.d.ts.map +1 -0
  590. package/dist/packages/agent/src/runtime/android-app-plugins.js +48 -0
  591. package/dist/packages/agent/src/runtime/aosp-dflash-adapter.d.ts +99 -0
  592. package/dist/packages/agent/src/runtime/aosp-dflash-adapter.d.ts.map +1 -0
  593. package/dist/packages/agent/src/runtime/aosp-dflash-adapter.js +332 -0
  594. package/dist/packages/agent/src/runtime/build-character-config.d.ts +2 -0
  595. package/dist/packages/agent/src/runtime/build-character-config.d.ts.map +1 -0
  596. package/dist/packages/agent/src/runtime/build-character-config.js +176 -0
  597. package/dist/packages/agent/src/runtime/conversation-compactor-runtime.d.ts +102 -0
  598. package/dist/packages/agent/src/runtime/conversation-compactor-runtime.d.ts.map +1 -0
  599. package/dist/packages/agent/src/runtime/conversation-compactor-runtime.js +320 -0
  600. package/dist/packages/agent/src/runtime/conversation-compactor.d.ts +38 -0
  601. package/dist/packages/agent/src/runtime/conversation-compactor.d.ts.map +1 -0
  602. package/dist/packages/agent/src/runtime/conversation-compactor.js +781 -0
  603. package/dist/packages/agent/src/runtime/conversation-compactor.types.d.ts +102 -0
  604. package/dist/packages/agent/src/runtime/conversation-compactor.types.d.ts.map +1 -0
  605. package/dist/packages/agent/src/runtime/conversation-compactor.types.js +30 -0
  606. package/dist/packages/agent/src/runtime/core-plugins.d.ts +54 -0
  607. package/dist/packages/agent/src/runtime/core-plugins.d.ts.map +1 -0
  608. package/dist/packages/agent/src/runtime/core-plugins.js +107 -0
  609. package/dist/packages/agent/src/runtime/custom-actions.d.ts +43 -0
  610. package/dist/packages/agent/src/runtime/custom-actions.d.ts.map +1 -0
  611. package/dist/packages/agent/src/runtime/custom-actions.js +533 -0
  612. package/dist/packages/agent/src/runtime/default-documents.d.ts +20 -0
  613. package/dist/packages/agent/src/runtime/default-documents.d.ts.map +1 -0
  614. package/dist/packages/agent/src/runtime/default-documents.js +270 -0
  615. package/dist/packages/agent/src/runtime/eliza-plugin.d.ts +16 -0
  616. package/dist/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -0
  617. package/dist/packages/agent/src/runtime/eliza-plugin.js +180 -0
  618. package/dist/packages/agent/src/runtime/eliza.d.ts +109 -0
  619. package/dist/packages/agent/src/runtime/eliza.d.ts.map +1 -0
  620. package/dist/packages/agent/src/runtime/eliza.js +3372 -0
  621. package/dist/packages/agent/src/runtime/embedding-presets.d.ts.map +1 -0
  622. package/dist/packages/agent/src/runtime/embedding-presets.js +60 -0
  623. package/dist/packages/agent/src/runtime/first-time-setup.d.ts +47 -0
  624. package/dist/packages/agent/src/runtime/first-time-setup.d.ts.map +1 -0
  625. package/dist/packages/agent/src/runtime/first-time-setup.js +704 -0
  626. package/dist/packages/agent/src/runtime/index.d.ts +20 -0
  627. package/dist/packages/agent/src/runtime/index.d.ts.map +1 -0
  628. package/dist/packages/agent/src/runtime/index.js +19 -0
  629. package/dist/packages/agent/src/runtime/load-plugin-from-vfs.d.ts +54 -0
  630. package/dist/packages/agent/src/runtime/load-plugin-from-vfs.d.ts.map +1 -0
  631. package/dist/packages/agent/src/runtime/load-plugin-from-vfs.js +86 -0
  632. package/dist/packages/agent/src/runtime/local-execution-mode.d.ts +11 -0
  633. package/dist/packages/agent/src/runtime/local-execution-mode.d.ts.map +1 -0
  634. package/dist/packages/agent/src/runtime/local-execution-mode.js +10 -0
  635. package/dist/packages/agent/src/runtime/model-resolution.d.ts +2 -0
  636. package/dist/packages/agent/src/runtime/model-resolution.d.ts.map +1 -0
  637. package/dist/packages/agent/src/runtime/model-resolution.js +55 -0
  638. package/dist/packages/agent/src/runtime/native-runtime-features.d.ts +4 -0
  639. package/dist/packages/agent/src/runtime/native-runtime-features.d.ts.map +1 -0
  640. package/dist/packages/agent/src/runtime/native-runtime-features.js +10 -0
  641. package/dist/packages/agent/src/runtime/onboarding-names.d.ts +11 -0
  642. package/dist/packages/agent/src/runtime/onboarding-names.d.ts.map +1 -0
  643. package/dist/packages/agent/src/runtime/onboarding-names.js +81 -0
  644. package/dist/packages/agent/src/runtime/operations/classifier.d.ts +36 -0
  645. package/dist/packages/agent/src/runtime/operations/classifier.d.ts.map +1 -0
  646. package/dist/packages/agent/src/runtime/operations/classifier.js +72 -0
  647. package/dist/packages/agent/src/runtime/operations/cold-strategy.d.ts +19 -0
  648. package/dist/packages/agent/src/runtime/operations/cold-strategy.d.ts.map +1 -0
  649. package/dist/packages/agent/src/runtime/operations/cold-strategy.js +50 -0
  650. package/dist/packages/agent/src/runtime/operations/health-checks.d.ts +25 -0
  651. package/dist/packages/agent/src/runtime/operations/health-checks.d.ts.map +1 -0
  652. package/dist/packages/agent/src/runtime/operations/health-checks.js +186 -0
  653. package/dist/packages/agent/src/runtime/operations/health.d.ts +32 -0
  654. package/dist/packages/agent/src/runtime/operations/health.d.ts.map +1 -0
  655. package/dist/packages/agent/src/runtime/operations/health.js +139 -0
  656. package/dist/packages/agent/src/runtime/operations/index.d.ts +17 -0
  657. package/dist/packages/agent/src/runtime/operations/index.d.ts.map +1 -0
  658. package/dist/packages/agent/src/runtime/operations/index.js +15 -0
  659. package/dist/packages/agent/src/runtime/operations/manager.d.ts +70 -0
  660. package/dist/packages/agent/src/runtime/operations/manager.d.ts.map +1 -0
  661. package/dist/packages/agent/src/runtime/operations/manager.js +202 -0
  662. package/dist/packages/agent/src/runtime/operations/reload-hot.d.ts +43 -0
  663. package/dist/packages/agent/src/runtime/operations/reload-hot.d.ts.map +1 -0
  664. package/dist/packages/agent/src/runtime/operations/reload-hot.js +181 -0
  665. package/dist/packages/agent/src/runtime/operations/repository.d.ts +66 -0
  666. package/dist/packages/agent/src/runtime/operations/repository.d.ts.map +1 -0
  667. package/dist/packages/agent/src/runtime/operations/repository.js +319 -0
  668. package/dist/packages/agent/src/runtime/operations/types.d.ts +203 -0
  669. package/dist/packages/agent/src/runtime/operations/types.d.ts.map +1 -0
  670. package/dist/packages/agent/src/runtime/operations/types.js +18 -0
  671. package/dist/packages/agent/src/runtime/operations/vault-bridge.d.ts +81 -0
  672. package/dist/packages/agent/src/runtime/operations/vault-bridge.d.ts.map +1 -0
  673. package/dist/packages/agent/src/runtime/operations/vault-bridge.js +133 -0
  674. package/dist/packages/agent/src/runtime/owner-entity.d.ts +4 -0
  675. package/dist/packages/agent/src/runtime/owner-entity.d.ts.map +1 -0
  676. package/dist/packages/agent/src/runtime/owner-entity.js +30 -0
  677. package/dist/packages/agent/src/runtime/pglite-error-compat.d.ts +28 -0
  678. package/dist/packages/agent/src/runtime/pglite-error-compat.d.ts.map +1 -0
  679. package/dist/packages/agent/src/runtime/pglite-error-compat.js +54 -0
  680. package/dist/packages/agent/src/runtime/plugin-collector.d.ts +22 -0
  681. package/dist/packages/agent/src/runtime/plugin-collector.d.ts.map +1 -0
  682. package/dist/packages/agent/src/runtime/plugin-collector.js +481 -0
  683. package/dist/packages/agent/src/runtime/plugin-lifecycle.d.ts +45 -0
  684. package/dist/packages/agent/src/runtime/plugin-lifecycle.d.ts.map +1 -0
  685. package/dist/packages/agent/src/runtime/plugin-lifecycle.js +602 -0
  686. package/dist/packages/agent/src/runtime/plugin-resolver.d.ts +46 -0
  687. package/dist/packages/agent/src/runtime/plugin-resolver.d.ts.map +1 -0
  688. package/dist/packages/agent/src/runtime/plugin-resolver.js +1375 -0
  689. package/dist/packages/agent/src/runtime/plugin-role-gating.d.ts +24 -0
  690. package/dist/packages/agent/src/runtime/plugin-role-gating.d.ts.map +1 -0
  691. package/dist/packages/agent/src/runtime/plugin-role-gating.js +106 -0
  692. package/dist/packages/agent/src/runtime/plugin-types.d.ts +64 -0
  693. package/dist/packages/agent/src/runtime/plugin-types.d.ts.map +1 -0
  694. package/dist/packages/agent/src/runtime/plugin-types.js +306 -0
  695. package/dist/packages/agent/src/runtime/prompt-compaction.d.ts +98 -0
  696. package/dist/packages/agent/src/runtime/prompt-compaction.d.ts.map +1 -0
  697. package/dist/packages/agent/src/runtime/prompt-compaction.js +362 -0
  698. package/dist/packages/agent/src/runtime/prompt-optimization.d.ts +45 -0
  699. package/dist/packages/agent/src/runtime/prompt-optimization.d.ts.map +1 -0
  700. package/dist/packages/agent/src/runtime/prompt-optimization.js +819 -0
  701. package/dist/packages/agent/src/runtime/release-plugin-policy.d.ts.map +1 -0
  702. package/dist/packages/agent/src/runtime/release-plugin-policy.js +85 -0
  703. package/dist/packages/agent/src/runtime/restart.d.ts +9 -0
  704. package/dist/packages/agent/src/runtime/restart.d.ts.map +1 -0
  705. package/dist/packages/agent/src/runtime/restart.js +8 -0
  706. package/dist/packages/agent/src/runtime/roles/src/index.d.ts +24 -0
  707. package/dist/packages/agent/src/runtime/roles/src/index.d.ts.map +1 -0
  708. package/dist/packages/agent/src/runtime/roles/src/index.js +255 -0
  709. package/dist/packages/agent/src/runtime/roles/src/provider.d.ts +7 -0
  710. package/dist/packages/agent/src/runtime/roles/src/provider.d.ts.map +1 -0
  711. package/dist/packages/agent/src/runtime/roles/src/provider.js +138 -0
  712. package/dist/packages/agent/src/runtime/roles/src/types.d.ts +3 -0
  713. package/dist/packages/agent/src/runtime/roles/src/types.d.ts.map +1 -0
  714. package/dist/packages/agent/src/runtime/roles/src/types.js +1 -0
  715. package/dist/packages/agent/src/runtime/roles/src/utils.d.ts +2 -0
  716. package/dist/packages/agent/src/runtime/roles/src/utils.d.ts.map +1 -0
  717. package/dist/packages/agent/src/runtime/roles/src/utils.js +1 -0
  718. package/dist/packages/agent/src/runtime/roles.d.ts +3 -0
  719. package/dist/packages/agent/src/runtime/roles.d.ts.map +1 -0
  720. package/dist/packages/agent/src/runtime/roles.js +5 -0
  721. package/dist/packages/agent/src/runtime/subagent-output.d.ts +51 -0
  722. package/dist/packages/agent/src/runtime/subagent-output.d.ts.map +1 -0
  723. package/dist/packages/agent/src/runtime/subagent-output.js +173 -0
  724. package/dist/packages/agent/src/runtime/task-heartbeat.d.ts +22 -0
  725. package/dist/packages/agent/src/runtime/task-heartbeat.d.ts.map +1 -0
  726. package/dist/packages/agent/src/runtime/task-heartbeat.js +84 -0
  727. package/dist/packages/agent/src/runtime/tool-call-cache/cache.d.ts +62 -0
  728. package/dist/packages/agent/src/runtime/tool-call-cache/cache.d.ts.map +1 -0
  729. package/dist/packages/agent/src/runtime/tool-call-cache/cache.js +123 -0
  730. package/dist/packages/agent/src/runtime/tool-call-cache/disk-store.d.ts +23 -0
  731. package/dist/packages/agent/src/runtime/tool-call-cache/disk-store.d.ts.map +1 -0
  732. package/dist/packages/agent/src/runtime/tool-call-cache/disk-store.js +55 -0
  733. package/dist/packages/agent/src/runtime/tool-call-cache/index.d.ts +7 -0
  734. package/dist/packages/agent/src/runtime/tool-call-cache/index.d.ts.map +1 -0
  735. package/dist/packages/agent/src/runtime/tool-call-cache/index.js +4 -0
  736. package/dist/packages/agent/src/runtime/tool-call-cache/key.d.ts +11 -0
  737. package/dist/packages/agent/src/runtime/tool-call-cache/key.d.ts.map +1 -0
  738. package/dist/packages/agent/src/runtime/tool-call-cache/key.js +31 -0
  739. package/dist/packages/agent/src/runtime/tool-call-cache/lru.d.ts +17 -0
  740. package/dist/packages/agent/src/runtime/tool-call-cache/lru.d.ts.map +1 -0
  741. package/dist/packages/agent/src/runtime/tool-call-cache/lru.js +46 -0
  742. package/dist/packages/agent/src/runtime/tool-call-cache/redact.d.ts +17 -0
  743. package/dist/packages/agent/src/runtime/tool-call-cache/redact.d.ts.map +1 -0
  744. package/dist/packages/agent/src/runtime/tool-call-cache/redact.js +77 -0
  745. package/dist/packages/agent/src/runtime/tool-call-cache/registry.d.ts +18 -0
  746. package/dist/packages/agent/src/runtime/tool-call-cache/registry.d.ts.map +1 -0
  747. package/dist/packages/agent/src/runtime/tool-call-cache/registry.js +66 -0
  748. package/dist/packages/agent/src/runtime/tool-call-cache/types.d.ts +50 -0
  749. package/dist/packages/agent/src/runtime/tool-call-cache/types.d.ts.map +1 -0
  750. package/dist/packages/agent/src/runtime/tool-call-cache/types.js +10 -0
  751. package/dist/packages/agent/src/runtime/tool-call-cache-wrapper.d.ts +39 -0
  752. package/dist/packages/agent/src/runtime/tool-call-cache-wrapper.d.ts.map +1 -0
  753. package/dist/packages/agent/src/runtime/tool-call-cache-wrapper.js +72 -0
  754. package/dist/packages/agent/src/runtime/trajectory-export.d.ts +18 -0
  755. package/dist/packages/agent/src/runtime/trajectory-export.d.ts.map +1 -0
  756. package/dist/packages/agent/src/runtime/trajectory-export.js +109 -0
  757. package/dist/packages/agent/src/runtime/trajectory-internals.d.ts +242 -0
  758. package/dist/packages/agent/src/runtime/trajectory-internals.d.ts.map +1 -0
  759. package/dist/packages/agent/src/runtime/trajectory-internals.js +1281 -0
  760. package/dist/packages/agent/src/runtime/trajectory-persistence.d.ts +15 -0
  761. package/dist/packages/agent/src/runtime/trajectory-persistence.d.ts.map +1 -0
  762. package/dist/packages/agent/src/runtime/trajectory-persistence.js +29 -0
  763. package/dist/packages/agent/src/runtime/trajectory-query.d.ts +8 -0
  764. package/dist/packages/agent/src/runtime/trajectory-query.d.ts.map +1 -0
  765. package/dist/packages/agent/src/runtime/trajectory-query.js +27 -0
  766. package/dist/packages/agent/src/runtime/trajectory-storage.d.ts +91 -0
  767. package/dist/packages/agent/src/runtime/trajectory-storage.d.ts.map +1 -0
  768. package/dist/packages/agent/src/runtime/trajectory-storage.js +1093 -0
  769. package/dist/packages/agent/src/runtime/vault-profile-resolver.d.ts +37 -0
  770. package/dist/packages/agent/src/runtime/vault-profile-resolver.d.ts.map +1 -0
  771. package/dist/packages/agent/src/runtime/vault-profile-resolver.js +79 -0
  772. package/dist/packages/agent/src/runtime/version.js +5 -0
  773. package/dist/packages/agent/src/runtime/web-search-tools.d.ts +22 -0
  774. package/dist/packages/agent/src/runtime/web-search-tools.d.ts.map +1 -0
  775. package/dist/packages/agent/src/runtime/web-search-tools.js +151 -0
  776. package/dist/packages/agent/src/security/access.d.ts +17 -0
  777. package/dist/packages/agent/src/security/access.d.ts.map +1 -0
  778. package/dist/packages/agent/src/security/access.js +54 -0
  779. package/dist/packages/agent/src/security/audit-log.d.ts +47 -0
  780. package/dist/packages/agent/src/security/audit-log.d.ts.map +1 -0
  781. package/dist/packages/agent/src/security/index.d.ts +4 -0
  782. package/dist/packages/agent/src/security/index.d.ts.map +1 -0
  783. package/dist/packages/agent/src/security/index.js +3 -0
  784. package/dist/packages/agent/src/services/agent-export.d.ts.map +1 -0
  785. package/dist/packages/agent/src/services/agent-export.js +764 -0
  786. package/dist/packages/agent/src/services/app-manager-agents-list-guard.d.ts +4 -0
  787. package/dist/packages/agent/src/services/app-manager-agents-list-guard.d.ts.map +1 -0
  788. package/dist/packages/agent/src/services/app-manager-agents-list-guard.js +15 -0
  789. package/dist/packages/agent/src/services/app-manager.d.ts +108 -0
  790. package/dist/packages/agent/src/services/app-manager.d.ts.map +1 -0
  791. package/dist/packages/agent/src/services/app-manager.js +1678 -0
  792. package/dist/packages/agent/src/services/app-package-modules.d.ts +22 -0
  793. package/dist/packages/agent/src/services/app-package-modules.d.ts.map +1 -0
  794. package/dist/packages/agent/src/services/app-package-modules.js +397 -0
  795. package/dist/packages/agent/src/services/app-run-store.d.ts +6 -0
  796. package/dist/packages/agent/src/services/app-run-store.d.ts.map +1 -0
  797. package/dist/packages/agent/src/services/app-run-store.js +547 -0
  798. package/dist/packages/agent/src/services/app-session-gate.d.ts +15 -0
  799. package/dist/packages/agent/src/services/app-session-gate.d.ts.map +1 -0
  800. package/dist/packages/agent/src/services/app-session-gate.js +71 -0
  801. package/dist/packages/agent/src/services/capability-broker.d.ts +89 -0
  802. package/dist/packages/agent/src/services/capability-broker.d.ts.map +1 -0
  803. package/dist/packages/agent/src/services/capability-broker.js +339 -0
  804. package/dist/packages/agent/src/services/character-history.d.ts +69 -0
  805. package/dist/packages/agent/src/services/character-history.d.ts.map +1 -0
  806. package/dist/packages/agent/src/services/character-history.js +280 -0
  807. package/dist/packages/agent/src/services/character-persistence.d.ts +25 -0
  808. package/dist/packages/agent/src/services/character-persistence.d.ts.map +1 -0
  809. package/dist/packages/agent/src/services/character-persistence.js +167 -0
  810. package/dist/packages/agent/src/services/client-chat-sender.d.ts +19 -0
  811. package/dist/packages/agent/src/services/client-chat-sender.d.ts.map +1 -0
  812. package/dist/packages/agent/src/services/client-chat-sender.js +88 -0
  813. package/dist/packages/agent/src/services/config-plugin-manager.d.ts +6 -0
  814. package/dist/packages/agent/src/services/config-plugin-manager.d.ts.map +1 -0
  815. package/dist/packages/agent/src/services/config-plugin-manager.js +53 -0
  816. package/dist/packages/agent/src/services/connector-setup-service.d.ts +48 -0
  817. package/dist/packages/agent/src/services/connector-setup-service.d.ts.map +1 -0
  818. package/dist/packages/agent/src/services/connector-setup-service.js +60 -0
  819. package/dist/packages/agent/src/services/escalation.d.ts +35 -0
  820. package/dist/packages/agent/src/services/escalation.d.ts.map +1 -0
  821. package/dist/packages/agent/src/services/escalation.js +376 -0
  822. package/dist/packages/agent/src/services/evm-signing-capability.d.ts +33 -0
  823. package/dist/packages/agent/src/services/evm-signing-capability.d.ts.map +1 -0
  824. package/dist/packages/agent/src/services/evm-signing-capability.js +52 -0
  825. package/dist/packages/agent/src/services/external-bridge-state.d.ts +10 -0
  826. package/dist/packages/agent/src/services/external-bridge-state.d.ts.map +1 -0
  827. package/dist/packages/agent/src/services/external-bridge-state.js +14 -0
  828. package/dist/packages/agent/src/services/hosted-tools.d.ts +70 -0
  829. package/dist/packages/agent/src/services/hosted-tools.d.ts.map +1 -0
  830. package/dist/packages/agent/src/services/hosted-tools.js +87 -0
  831. package/dist/packages/agent/src/services/index.d.ts +27 -0
  832. package/dist/packages/agent/src/services/index.d.ts.map +1 -0
  833. package/dist/packages/agent/src/services/index.js +32 -0
  834. package/dist/packages/agent/src/services/js-runtime-bridge.d.ts +105 -0
  835. package/dist/packages/agent/src/services/js-runtime-bridge.d.ts.map +1 -0
  836. package/dist/packages/agent/src/services/js-runtime-bridge.js +217 -0
  837. package/dist/packages/agent/src/services/mcp-marketplace.js +200 -0
  838. package/dist/packages/agent/src/services/media-generation.d.ts +10 -0
  839. package/dist/packages/agent/src/services/media-generation.d.ts.map +1 -0
  840. package/dist/packages/agent/src/services/media-generation.js +102 -0
  841. package/dist/packages/agent/src/services/overlay-app-presence.d.ts +9 -0
  842. package/dist/packages/agent/src/services/overlay-app-presence.d.ts.map +1 -0
  843. package/dist/packages/agent/src/services/overlay-app-presence.js +18 -0
  844. package/dist/packages/agent/src/services/owner-name.d.ts +4 -0
  845. package/dist/packages/agent/src/services/owner-name.d.ts.map +1 -0
  846. package/dist/packages/agent/src/services/owner-name.js +46 -0
  847. package/dist/packages/agent/src/services/permissions/contracts.d.ts +9 -0
  848. package/dist/packages/agent/src/services/permissions/contracts.d.ts.map +1 -0
  849. package/dist/packages/agent/src/services/permissions/contracts.js +8 -0
  850. package/dist/packages/agent/src/services/permissions/probers/_bridge.d.ts +77 -0
  851. package/dist/packages/agent/src/services/permissions/probers/_bridge.d.ts.map +1 -0
  852. package/dist/packages/agent/src/services/permissions/probers/_bridge.js +224 -0
  853. package/dist/packages/agent/src/services/permissions/probers/accessibility.d.ts +16 -0
  854. package/dist/packages/agent/src/services/permissions/probers/accessibility.d.ts.map +1 -0
  855. package/dist/packages/agent/src/services/permissions/probers/accessibility.js +45 -0
  856. package/dist/packages/agent/src/services/permissions/probers/automation.d.ts +17 -0
  857. package/dist/packages/agent/src/services/permissions/probers/automation.d.ts.map +1 -0
  858. package/dist/packages/agent/src/services/permissions/probers/automation.js +46 -0
  859. package/dist/packages/agent/src/services/permissions/probers/calendar.d.ts +14 -0
  860. package/dist/packages/agent/src/services/permissions/probers/calendar.d.ts.map +1 -0
  861. package/dist/packages/agent/src/services/permissions/probers/calendar.js +33 -0
  862. package/dist/packages/agent/src/services/permissions/probers/camera.d.ts +13 -0
  863. package/dist/packages/agent/src/services/permissions/probers/camera.d.ts.map +1 -0
  864. package/dist/packages/agent/src/services/permissions/probers/camera.js +37 -0
  865. package/dist/packages/agent/src/services/permissions/probers/contacts.d.ts +13 -0
  866. package/dist/packages/agent/src/services/permissions/probers/contacts.d.ts.map +1 -0
  867. package/dist/packages/agent/src/services/permissions/probers/contacts.js +32 -0
  868. package/dist/packages/agent/src/services/permissions/probers/full-disk.d.ts +22 -0
  869. package/dist/packages/agent/src/services/permissions/probers/full-disk.d.ts.map +1 -0
  870. package/dist/packages/agent/src/services/permissions/probers/full-disk.js +78 -0
  871. package/dist/packages/agent/src/services/permissions/probers/health.d.ts +23 -0
  872. package/dist/packages/agent/src/services/permissions/probers/health.d.ts.map +1 -0
  873. package/dist/packages/agent/src/services/permissions/probers/health.js +82 -0
  874. package/dist/packages/agent/src/services/permissions/probers/index.d.ts +27 -0
  875. package/dist/packages/agent/src/services/permissions/probers/index.d.ts.map +1 -0
  876. package/dist/packages/agent/src/services/permissions/probers/index.js +42 -0
  877. package/dist/packages/agent/src/services/permissions/probers/location.d.ts +18 -0
  878. package/dist/packages/agent/src/services/permissions/probers/location.d.ts.map +1 -0
  879. package/dist/packages/agent/src/services/permissions/probers/location.js +44 -0
  880. package/dist/packages/agent/src/services/permissions/probers/microphone.d.ts +15 -0
  881. package/dist/packages/agent/src/services/permissions/probers/microphone.d.ts.map +1 -0
  882. package/dist/packages/agent/src/services/permissions/probers/microphone.js +43 -0
  883. package/dist/packages/agent/src/services/permissions/probers/notes.d.ts +19 -0
  884. package/dist/packages/agent/src/services/permissions/probers/notes.d.ts.map +1 -0
  885. package/dist/packages/agent/src/services/permissions/probers/notes.js +55 -0
  886. package/dist/packages/agent/src/services/permissions/probers/notifications.d.ts +21 -0
  887. package/dist/packages/agent/src/services/permissions/probers/notifications.d.ts.map +1 -0
  888. package/dist/packages/agent/src/services/permissions/probers/notifications.js +44 -0
  889. package/dist/packages/agent/src/services/permissions/probers/reminders.d.ts +22 -0
  890. package/dist/packages/agent/src/services/permissions/probers/reminders.d.ts.map +1 -0
  891. package/dist/packages/agent/src/services/permissions/probers/reminders.js +44 -0
  892. package/dist/packages/agent/src/services/permissions/probers/screen-recording.d.ts +15 -0
  893. package/dist/packages/agent/src/services/permissions/probers/screen-recording.d.ts.map +1 -0
  894. package/dist/packages/agent/src/services/permissions/probers/screen-recording.js +39 -0
  895. package/dist/packages/agent/src/services/permissions/probers/screentime.d.ts +21 -0
  896. package/dist/packages/agent/src/services/permissions/probers/screentime.d.ts.map +1 -0
  897. package/dist/packages/agent/src/services/permissions/probers/screentime.js +67 -0
  898. package/dist/packages/agent/src/services/permissions/probers/shell.d.ts +19 -0
  899. package/dist/packages/agent/src/services/permissions/probers/shell.d.ts.map +1 -0
  900. package/dist/packages/agent/src/services/permissions/probers/shell.js +31 -0
  901. package/dist/packages/agent/src/services/permissions/probers/website-blocking.d.ts +16 -0
  902. package/dist/packages/agent/src/services/permissions/probers/website-blocking.d.ts.map +1 -0
  903. package/dist/packages/agent/src/services/permissions/probers/website-blocking.js +27 -0
  904. package/dist/packages/agent/src/services/permissions/register-probers.d.ts +29 -0
  905. package/dist/packages/agent/src/services/permissions/register-probers.d.ts.map +1 -0
  906. package/dist/packages/agent/src/services/permissions/register-probers.js +31 -0
  907. package/dist/packages/agent/src/services/permissions-registry.d.ts +62 -0
  908. package/dist/packages/agent/src/services/permissions-registry.d.ts.map +1 -0
  909. package/dist/packages/agent/src/services/permissions-registry.js +213 -0
  910. package/dist/packages/agent/src/services/plugin-compiler.d.ts +51 -0
  911. package/dist/packages/agent/src/services/plugin-compiler.d.ts.map +1 -0
  912. package/dist/packages/agent/src/services/plugin-compiler.js +90 -0
  913. package/dist/packages/agent/src/services/plugin-installer.d.ts +93 -0
  914. package/dist/packages/agent/src/services/plugin-installer.d.ts.map +1 -0
  915. package/dist/packages/agent/src/services/plugin-installer.js +623 -0
  916. package/dist/packages/agent/src/services/plugin-manager-types.d.ts +114 -0
  917. package/dist/packages/agent/src/services/plugin-manager-types.d.ts.map +1 -0
  918. package/dist/packages/agent/src/services/registry-client-app-meta.d.ts +6 -0
  919. package/dist/packages/agent/src/services/registry-client-app-meta.d.ts.map +1 -0
  920. package/dist/packages/agent/src/services/registry-client-app-meta.js +168 -0
  921. package/dist/packages/agent/src/services/registry-client-endpoints.d.ts +7 -0
  922. package/dist/packages/agent/src/services/registry-client-endpoints.d.ts.map +1 -0
  923. package/dist/packages/agent/src/services/registry-client-endpoints.js +190 -0
  924. package/dist/packages/agent/src/services/registry-client-local.d.ts +4 -0
  925. package/dist/packages/agent/src/services/registry-client-local.d.ts.map +1 -0
  926. package/dist/packages/agent/src/services/registry-client-local.js +555 -0
  927. package/dist/packages/agent/src/services/registry-client-network.d.ts +14 -0
  928. package/dist/packages/agent/src/services/registry-client-network.d.ts.map +1 -0
  929. package/dist/packages/agent/src/services/registry-client-network.js +147 -0
  930. package/dist/packages/agent/src/services/registry-client-queries.d.ts +26 -0
  931. package/dist/packages/agent/src/services/registry-client-queries.d.ts.map +1 -0
  932. package/dist/packages/agent/src/services/registry-client-queries.js +197 -0
  933. package/dist/packages/agent/src/services/registry-client-types.d.ts +114 -0
  934. package/dist/packages/agent/src/services/registry-client-types.d.ts.map +1 -0
  935. package/dist/packages/agent/src/services/registry-client.d.ts +39 -0
  936. package/dist/packages/agent/src/services/registry-client.d.ts.map +1 -0
  937. package/dist/packages/agent/src/services/registry-client.js +349 -0
  938. package/dist/packages/agent/src/services/relationships-graph.d.ts +13 -0
  939. package/dist/packages/agent/src/services/relationships-graph.d.ts.map +1 -0
  940. package/dist/packages/agent/src/services/relationships-graph.js +38 -0
  941. package/dist/packages/agent/src/services/remote-signing-service.d.ts +58 -0
  942. package/dist/packages/agent/src/services/remote-signing-service.d.ts.map +1 -0
  943. package/dist/packages/agent/src/services/remote-signing-service.js +185 -0
  944. package/dist/packages/agent/src/services/research-task-executor.d.ts +14 -0
  945. package/dist/packages/agent/src/services/research-task-executor.d.ts.map +1 -0
  946. package/dist/packages/agent/src/services/research-task-executor.js +138 -0
  947. package/dist/packages/agent/src/services/sandbox-manager.d.ts +127 -0
  948. package/dist/packages/agent/src/services/sandbox-manager.d.ts.map +1 -0
  949. package/dist/packages/agent/src/services/sandbox-manager.js +418 -0
  950. package/dist/packages/agent/src/services/self-updater.d.ts +21 -0
  951. package/dist/packages/agent/src/services/self-updater.d.ts.map +1 -0
  952. package/dist/packages/agent/src/services/self-updater.js +162 -0
  953. package/dist/packages/agent/src/services/send-handler-availability.d.ts +5 -0
  954. package/dist/packages/agent/src/services/send-handler-availability.d.ts.map +1 -0
  955. package/dist/packages/agent/src/services/send-handler-availability.js +20 -0
  956. package/dist/packages/agent/src/services/shell-execution-router.d.ts +67 -0
  957. package/dist/packages/agent/src/services/shell-execution-router.d.ts.map +1 -0
  958. package/dist/packages/agent/src/services/shell-execution-router.js +201 -0
  959. package/dist/packages/agent/src/services/skill-marketplace.d.ts.map +1 -0
  960. package/dist/packages/agent/src/services/skill-marketplace.js +691 -0
  961. package/dist/packages/agent/src/services/task-executor.d.ts +47 -0
  962. package/dist/packages/agent/src/services/task-executor.d.ts.map +1 -0
  963. package/dist/packages/agent/src/services/task-executor.js +31 -0
  964. package/dist/packages/agent/src/services/update-checker.d.ts +29 -0
  965. package/dist/packages/agent/src/services/update-checker.d.ts.map +1 -0
  966. package/dist/packages/agent/src/services/update-checker.js +134 -0
  967. package/dist/packages/agent/src/services/version-compat.d.ts +99 -0
  968. package/dist/packages/agent/src/services/version-compat.d.ts.map +1 -0
  969. package/dist/packages/agent/src/services/version-compat.js +211 -0
  970. package/dist/packages/agent/src/services/virtual-filesystem.d.ts +88 -0
  971. package/dist/packages/agent/src/services/virtual-filesystem.d.ts.map +1 -0
  972. package/dist/packages/agent/src/services/virtual-filesystem.js +410 -0
  973. package/dist/packages/agent/src/shared/conversation-format.d.ts +11 -0
  974. package/dist/packages/agent/src/shared/conversation-format.d.ts.map +1 -0
  975. package/dist/packages/agent/src/shared/conversation-format.js +69 -0
  976. package/dist/packages/agent/src/shared/index.d.ts +4 -0
  977. package/dist/packages/agent/src/shared/index.d.ts.map +1 -0
  978. package/dist/packages/agent/src/shared/index.js +3 -0
  979. package/dist/packages/agent/src/shared/ui-catalog-prompt.d.ts +94 -0
  980. package/dist/packages/agent/src/shared/ui-catalog-prompt.d.ts.map +1 -0
  981. package/dist/packages/agent/src/shared/ui-catalog-prompt.js +1045 -0
  982. package/dist/packages/agent/src/shared/workspace-resolution.d.ts +5 -0
  983. package/dist/packages/agent/src/shared/workspace-resolution.d.ts.map +1 -0
  984. package/dist/packages/agent/src/shared/workspace-resolution.js +70 -0
  985. package/dist/packages/agent/src/templates/skill-scaffold.d.ts +9 -0
  986. package/dist/packages/agent/src/templates/skill-scaffold.d.ts.map +1 -0
  987. package/dist/packages/agent/src/templates/skill-scaffold.js +26 -0
  988. package/dist/packages/agent/src/test-support/index.d.ts +4 -0
  989. package/dist/packages/agent/src/test-support/index.d.ts.map +1 -0
  990. package/dist/packages/agent/src/test-support/index.js +3 -0
  991. package/dist/packages/agent/src/test-support/route-test-helpers.d.ts +37 -0
  992. package/dist/packages/agent/src/test-support/route-test-helpers.d.ts.map +1 -0
  993. package/dist/packages/agent/src/test-support/route-test-helpers.js +54 -0
  994. package/dist/packages/agent/src/test-support/test-helpers.d.ts +77 -0
  995. package/dist/packages/agent/src/test-support/test-helpers.d.ts.map +1 -0
  996. package/dist/packages/agent/src/test-support/test-helpers.js +221 -0
  997. package/dist/packages/agent/src/test-utils/sqlite-compat.d.ts +23 -0
  998. package/dist/packages/agent/src/test-utils/sqlite-compat.d.ts.map +1 -0
  999. package/dist/packages/agent/src/test-utils/sqlite-compat.js +214 -0
  1000. package/dist/packages/agent/src/testing/index.d.ts +4 -0
  1001. package/dist/packages/agent/src/testing/index.d.ts.map +1 -0
  1002. package/dist/packages/agent/src/testing/index.js +3 -0
  1003. package/dist/packages/agent/src/triggers/index.d.ts +5 -0
  1004. package/dist/packages/agent/src/triggers/index.d.ts.map +1 -0
  1005. package/dist/packages/agent/src/triggers/index.js +4 -0
  1006. package/dist/packages/agent/src/triggers/runtime.d.ts +30 -0
  1007. package/dist/packages/agent/src/triggers/runtime.d.ts.map +1 -0
  1008. package/dist/packages/agent/src/triggers/runtime.js +447 -0
  1009. package/dist/packages/agent/src/triggers/scheduling.d.ts +78 -0
  1010. package/dist/packages/agent/src/triggers/scheduling.d.ts.map +1 -0
  1011. package/dist/packages/agent/src/triggers/scheduling.js +436 -0
  1012. package/dist/packages/agent/src/triggers/text-to-workflow.d.ts +58 -0
  1013. package/dist/packages/agent/src/triggers/text-to-workflow.d.ts.map +1 -0
  1014. package/dist/packages/agent/src/triggers/text-to-workflow.js +44 -0
  1015. package/dist/packages/agent/src/triggers/types.d.ts +96 -0
  1016. package/dist/packages/agent/src/triggers/types.d.ts.map +1 -0
  1017. package/dist/packages/agent/src/triggers/types.js +1 -0
  1018. package/dist/packages/agent/src/types/agent-skills.d.ts +19 -0
  1019. package/dist/packages/agent/src/types/agent-skills.d.ts.map +1 -0
  1020. package/dist/packages/agent/src/types/agent-skills.js +7 -0
  1021. package/dist/packages/agent/src/types/config-like.d.ts +17 -0
  1022. package/dist/packages/agent/src/types/config-like.d.ts.map +1 -0
  1023. package/dist/packages/agent/src/types/config-like.js +7 -0
  1024. package/dist/packages/agent/src/types/index.d.ts +4 -0
  1025. package/dist/packages/agent/src/types/index.d.ts.map +1 -0
  1026. package/dist/packages/agent/src/types/index.js +3 -0
  1027. package/dist/packages/agent/src/types/trajectory.d.ts +20 -0
  1028. package/dist/packages/agent/src/types/trajectory.d.ts.map +1 -0
  1029. package/dist/packages/agent/src/types/trajectory.js +2 -0
  1030. package/dist/packages/agent/src/utils/atomic-json.d.ts +37 -0
  1031. package/dist/packages/agent/src/utils/atomic-json.d.ts.map +1 -0
  1032. package/dist/packages/agent/src/utils/atomic-json.js +98 -0
  1033. package/dist/packages/agent/src/utils/index.d.ts +2 -0
  1034. package/dist/packages/agent/src/utils/index.d.ts.map +1 -0
  1035. package/dist/packages/agent/src/utils/index.js +1 -0
  1036. package/dist/packages/agent/src/utils/number-parsing.d.ts.map +1 -0
  1037. package/dist/packages/agent/src/utils/number-parsing.js +51 -0
  1038. package/dist/packages/agent/src/version-resolver.d.ts +2 -0
  1039. package/dist/packages/agent/src/version-resolver.d.ts.map +1 -0
  1040. package/dist/packages/agent/src/version-resolver.js +50 -0
  1041. package/package.json +121 -936
  1042. package/src/bin.ts +72 -0
  1043. package/src/index.ts +243 -0
  1044. package/LICENSE +0 -21
  1045. package/packages/agent/src/actions/emote.d.ts +0 -14
  1046. package/packages/agent/src/actions/emote.d.ts.map +0 -1
  1047. package/packages/agent/src/actions/emote.js +0 -91
  1048. package/packages/agent/src/actions/restart.d.ts +0 -19
  1049. package/packages/agent/src/actions/restart.d.ts.map +0 -1
  1050. package/packages/agent/src/actions/restart.js +0 -86
  1051. package/packages/agent/src/actions/send-message.d.ts +0 -3
  1052. package/packages/agent/src/actions/send-message.d.ts.map +0 -1
  1053. package/packages/agent/src/actions/send-message.js +0 -144
  1054. package/packages/agent/src/actions/stream-control.d.ts +0 -15
  1055. package/packages/agent/src/actions/stream-control.d.ts.map +0 -1
  1056. package/packages/agent/src/actions/stream-control.js +0 -357
  1057. package/packages/agent/src/actions/switch-stream-source.d.ts +0 -16
  1058. package/packages/agent/src/actions/switch-stream-source.d.ts.map +0 -1
  1059. package/packages/agent/src/actions/switch-stream-source.js +0 -94
  1060. package/packages/agent/src/actions/terminal.d.ts +0 -14
  1061. package/packages/agent/src/actions/terminal.d.ts.map +0 -1
  1062. package/packages/agent/src/actions/terminal.js +0 -154
  1063. package/packages/agent/src/api/agent-admin-routes.d.ts +0 -38
  1064. package/packages/agent/src/api/agent-admin-routes.d.ts.map +0 -1
  1065. package/packages/agent/src/api/agent-admin-routes.js +0 -93
  1066. package/packages/agent/src/api/agent-lifecycle-routes.d.ts +0 -16
  1067. package/packages/agent/src/api/agent-lifecycle-routes.d.ts.map +0 -1
  1068. package/packages/agent/src/api/agent-lifecycle-routes.js +0 -80
  1069. package/packages/agent/src/api/agent-model.d.ts +0 -12
  1070. package/packages/agent/src/api/agent-model.d.ts.map +0 -1
  1071. package/packages/agent/src/api/agent-model.js +0 -123
  1072. package/packages/agent/src/api/agent-transfer-routes.d.ts +0 -16
  1073. package/packages/agent/src/api/agent-transfer-routes.js +0 -124
  1074. package/packages/agent/src/api/apps-routes.d.ts +0 -19
  1075. package/packages/agent/src/api/apps-routes.d.ts.map +0 -1
  1076. package/packages/agent/src/api/apps-routes.js +0 -128
  1077. package/packages/agent/src/api/auth-routes.d.ts +0 -11
  1078. package/packages/agent/src/api/auth-routes.d.ts.map +0 -1
  1079. package/packages/agent/src/api/auth-routes.js +0 -54
  1080. package/packages/agent/src/api/bsc-trade.d.ts +0 -34
  1081. package/packages/agent/src/api/bsc-trade.d.ts.map +0 -1
  1082. package/packages/agent/src/api/bsc-trade.js +0 -567
  1083. package/packages/agent/src/api/bug-report-routes.d.ts +0 -7
  1084. package/packages/agent/src/api/bug-report-routes.d.ts.map +0 -1
  1085. package/packages/agent/src/api/bug-report-routes.js +0 -124
  1086. package/packages/agent/src/api/character-routes.d.ts +0 -50
  1087. package/packages/agent/src/api/character-routes.d.ts.map +0 -1
  1088. package/packages/agent/src/api/character-routes.js +0 -326
  1089. package/packages/agent/src/api/cloud-billing-routes.d.ts +0 -14
  1090. package/packages/agent/src/api/cloud-billing-routes.d.ts.map +0 -1
  1091. package/packages/agent/src/api/cloud-billing-routes.js +0 -400
  1092. package/packages/agent/src/api/cloud-compat-routes.d.ts +0 -15
  1093. package/packages/agent/src/api/cloud-compat-routes.d.ts.map +0 -1
  1094. package/packages/agent/src/api/cloud-compat-routes.js +0 -131
  1095. package/packages/agent/src/api/cloud-routes.d.ts +0 -62
  1096. package/packages/agent/src/api/cloud-routes.d.ts.map +0 -1
  1097. package/packages/agent/src/api/cloud-routes.js +0 -339
  1098. package/packages/agent/src/api/cloud-status-routes.d.ts +0 -15
  1099. package/packages/agent/src/api/cloud-status-routes.d.ts.map +0 -1
  1100. package/packages/agent/src/api/cloud-status-routes.js +0 -165
  1101. package/packages/agent/src/api/compat-utils.d.ts.map +0 -1
  1102. package/packages/agent/src/api/compat-utils.js +0 -126
  1103. package/packages/agent/src/api/connector-health.d.ts +0 -34
  1104. package/packages/agent/src/api/connector-health.d.ts.map +0 -1
  1105. package/packages/agent/src/api/connector-health.js +0 -109
  1106. package/packages/agent/src/api/coordinator-wiring.d.ts +0 -46
  1107. package/packages/agent/src/api/coordinator-wiring.d.ts.map +0 -1
  1108. package/packages/agent/src/api/coordinator-wiring.js +0 -101
  1109. package/packages/agent/src/api/credit-detection.d.ts.map +0 -1
  1110. package/packages/agent/src/api/credit-detection.js +0 -41
  1111. package/packages/agent/src/api/database.d.ts +0 -33
  1112. package/packages/agent/src/api/database.d.ts.map +0 -1
  1113. package/packages/agent/src/api/database.js +0 -1019
  1114. package/packages/agent/src/api/diagnostics-routes.d.ts +0 -46
  1115. package/packages/agent/src/api/diagnostics-routes.d.ts.map +0 -1
  1116. package/packages/agent/src/api/diagnostics-routes.js +0 -241
  1117. package/packages/agent/src/api/drop-service.d.ts +0 -26
  1118. package/packages/agent/src/api/drop-service.d.ts.map +0 -1
  1119. package/packages/agent/src/api/drop-service.js +0 -134
  1120. package/packages/agent/src/api/http-helpers.d.ts +0 -50
  1121. package/packages/agent/src/api/http-helpers.d.ts.map +0 -1
  1122. package/packages/agent/src/api/http-helpers.js +0 -145
  1123. package/packages/agent/src/api/index.d.ts +0 -61
  1124. package/packages/agent/src/api/index.d.ts.map +0 -1
  1125. package/packages/agent/src/api/index.js +0 -59
  1126. package/packages/agent/src/api/knowledge-routes.d.ts +0 -23
  1127. package/packages/agent/src/api/knowledge-routes.d.ts.map +0 -1
  1128. package/packages/agent/src/api/knowledge-routes.js +0 -931
  1129. package/packages/agent/src/api/knowledge-service-loader.d.ts +0 -51
  1130. package/packages/agent/src/api/knowledge-service-loader.d.ts.map +0 -1
  1131. package/packages/agent/src/api/knowledge-service-loader.js +0 -34
  1132. package/packages/agent/src/api/memory-routes.d.ts +0 -9
  1133. package/packages/agent/src/api/memory-routes.d.ts.map +0 -1
  1134. package/packages/agent/src/api/memory-routes.js +0 -241
  1135. package/packages/agent/src/api/merkle-tree.d.ts +0 -90
  1136. package/packages/agent/src/api/merkle-tree.d.ts.map +0 -1
  1137. package/packages/agent/src/api/merkle-tree.js +0 -174
  1138. package/packages/agent/src/api/models-routes.d.ts +0 -14
  1139. package/packages/agent/src/api/models-routes.d.ts.map +0 -1
  1140. package/packages/agent/src/api/nfa-routes.d.ts +0 -5
  1141. package/packages/agent/src/api/nfa-routes.d.ts.map +0 -1
  1142. package/packages/agent/src/api/nfa-routes.js +0 -125
  1143. package/packages/agent/src/api/og-tracker.d.ts +0 -28
  1144. package/packages/agent/src/api/og-tracker.d.ts.map +0 -1
  1145. package/packages/agent/src/api/og-tracker.js +0 -60
  1146. package/packages/agent/src/api/parse-action-block.d.ts +0 -36
  1147. package/packages/agent/src/api/parse-action-block.d.ts.map +0 -1
  1148. package/packages/agent/src/api/parse-action-block.js +0 -110
  1149. package/packages/agent/src/api/permissions-routes.d.ts +0 -32
  1150. package/packages/agent/src/api/permissions-routes.d.ts.map +0 -1
  1151. package/packages/agent/src/api/permissions-routes.js +0 -149
  1152. package/packages/agent/src/api/plugin-validation.d.ts.map +0 -1
  1153. package/packages/agent/src/api/plugin-validation.js +0 -259
  1154. package/packages/agent/src/api/provider-switch-config.d.ts +0 -37
  1155. package/packages/agent/src/api/provider-switch-config.d.ts.map +0 -1
  1156. package/packages/agent/src/api/provider-switch-config.js +0 -317
  1157. package/packages/agent/src/api/registry-routes.d.ts +0 -26
  1158. package/packages/agent/src/api/registry-routes.d.ts.map +0 -1
  1159. package/packages/agent/src/api/registry-routes.js +0 -90
  1160. package/packages/agent/src/api/registry-service.d.ts +0 -77
  1161. package/packages/agent/src/api/registry-service.d.ts.map +0 -1
  1162. package/packages/agent/src/api/route-helpers.d.ts +0 -16
  1163. package/packages/agent/src/api/route-helpers.d.ts.map +0 -1
  1164. package/packages/agent/src/api/route-helpers.js +0 -1
  1165. package/packages/agent/src/api/sandbox-routes.d.ts +0 -12
  1166. package/packages/agent/src/api/sandbox-routes.d.ts.map +0 -1
  1167. package/packages/agent/src/api/sandbox-routes.js +0 -1334
  1168. package/packages/agent/src/api/server.d.ts +0 -418
  1169. package/packages/agent/src/api/server.d.ts.map +0 -1
  1170. package/packages/agent/src/api/server.js +0 -13677
  1171. package/packages/agent/src/api/signal-routes.d.ts +0 -39
  1172. package/packages/agent/src/api/signal-routes.d.ts.map +0 -1
  1173. package/packages/agent/src/api/signal-routes.js +0 -168
  1174. package/packages/agent/src/api/stream-persistence.d.ts +0 -64
  1175. package/packages/agent/src/api/stream-persistence.d.ts.map +0 -1
  1176. package/packages/agent/src/api/stream-persistence.js +0 -231
  1177. package/packages/agent/src/api/stream-route-state.d.ts +0 -50
  1178. package/packages/agent/src/api/stream-route-state.d.ts.map +0 -1
  1179. package/packages/agent/src/api/stream-route-state.js +0 -1
  1180. package/packages/agent/src/api/stream-routes.d.ts +0 -45
  1181. package/packages/agent/src/api/stream-routes.d.ts.map +0 -1
  1182. package/packages/agent/src/api/stream-routes.js +0 -809
  1183. package/packages/agent/src/api/stream-voice-routes.d.ts +0 -36
  1184. package/packages/agent/src/api/stream-voice-routes.d.ts.map +0 -1
  1185. package/packages/agent/src/api/stream-voice-routes.js +0 -133
  1186. package/packages/agent/src/api/streaming-text.d.ts +0 -9
  1187. package/packages/agent/src/api/streaming-text.d.ts.map +0 -1
  1188. package/packages/agent/src/api/streaming-text.js +0 -85
  1189. package/packages/agent/src/api/streaming-types.d.ts +0 -30
  1190. package/packages/agent/src/api/streaming-types.d.ts.map +0 -1
  1191. package/packages/agent/src/api/streaming-types.js +0 -1
  1192. package/packages/agent/src/api/subscription-routes.d.ts +0 -20
  1193. package/packages/agent/src/api/subscription-routes.d.ts.map +0 -1
  1194. package/packages/agent/src/api/subscription-routes.js +0 -191
  1195. package/packages/agent/src/api/terminal-run-limits.d.ts.map +0 -1
  1196. package/packages/agent/src/api/terminal-run-limits.js +0 -22
  1197. package/packages/agent/src/api/training-routes.d.ts +0 -44
  1198. package/packages/agent/src/api/training-routes.d.ts.map +0 -1
  1199. package/packages/agent/src/api/training-routes.js +0 -195
  1200. package/packages/agent/src/api/training-service-like.d.ts +0 -38
  1201. package/packages/agent/src/api/training-service-like.d.ts.map +0 -1
  1202. package/packages/agent/src/api/trajectory-routes.d.ts +0 -17
  1203. package/packages/agent/src/api/trajectory-routes.d.ts.map +0 -1
  1204. package/packages/agent/src/api/trajectory-routes.js +0 -405
  1205. package/packages/agent/src/api/trigger-routes.d.ts +0 -72
  1206. package/packages/agent/src/api/trigger-routes.d.ts.map +0 -1
  1207. package/packages/agent/src/api/trigger-routes.js +0 -268
  1208. package/packages/agent/src/api/twitter-verify.d.ts +0 -25
  1209. package/packages/agent/src/api/twitter-verify.d.ts.map +0 -1
  1210. package/packages/agent/src/api/twitter-verify.js +0 -168
  1211. package/packages/agent/src/api/tx-service.d.ts +0 -47
  1212. package/packages/agent/src/api/tx-service.d.ts.map +0 -1
  1213. package/packages/agent/src/api/tx-service.js +0 -156
  1214. package/packages/agent/src/api/wallet-dex-prices.d.ts +0 -43
  1215. package/packages/agent/src/api/wallet-dex-prices.d.ts.map +0 -1
  1216. package/packages/agent/src/api/wallet-dex-prices.js +0 -149
  1217. package/packages/agent/src/api/wallet-evm-balance.d.ts +0 -65
  1218. package/packages/agent/src/api/wallet-evm-balance.d.ts.map +0 -1
  1219. package/packages/agent/src/api/wallet-evm-balance.js +0 -663
  1220. package/packages/agent/src/api/wallet-routes.d.ts +0 -33
  1221. package/packages/agent/src/api/wallet-routes.d.ts.map +0 -1
  1222. package/packages/agent/src/api/wallet-routes.js +0 -292
  1223. package/packages/agent/src/api/wallet-rpc.d.ts +0 -61
  1224. package/packages/agent/src/api/wallet-rpc.d.ts.map +0 -1
  1225. package/packages/agent/src/api/wallet-rpc.js +0 -367
  1226. package/packages/agent/src/api/wallet-trading-profile.d.ts +0 -51
  1227. package/packages/agent/src/api/wallet-trading-profile.d.ts.map +0 -1
  1228. package/packages/agent/src/api/wallet-trading-profile.js +0 -547
  1229. package/packages/agent/src/api/wallet.d.ts +0 -31
  1230. package/packages/agent/src/api/wallet.d.ts.map +0 -1
  1231. package/packages/agent/src/api/wallet.js +0 -513
  1232. package/packages/agent/src/api/whatsapp-routes.d.ts +0 -39
  1233. package/packages/agent/src/api/whatsapp-routes.d.ts.map +0 -1
  1234. package/packages/agent/src/api/whatsapp-routes.js +0 -182
  1235. package/packages/agent/src/auth/anthropic.d.ts +0 -25
  1236. package/packages/agent/src/auth/anthropic.d.ts.map +0 -1
  1237. package/packages/agent/src/auth/anthropic.js +0 -40
  1238. package/packages/agent/src/auth/apply-stealth.d.ts +0 -8
  1239. package/packages/agent/src/auth/apply-stealth.d.ts.map +0 -1
  1240. package/packages/agent/src/auth/apply-stealth.js +0 -35
  1241. package/packages/agent/src/auth/claude-code-stealth.d.ts.map +0 -1
  1242. package/packages/agent/src/auth/claude-code-stealth.js +0 -104
  1243. package/packages/agent/src/auth/credentials.d.ts +0 -55
  1244. package/packages/agent/src/auth/credentials.d.ts.map +0 -1
  1245. package/packages/agent/src/auth/credentials.js +0 -182
  1246. package/packages/agent/src/auth/index.d.ts +0 -7
  1247. package/packages/agent/src/auth/index.d.ts.map +0 -1
  1248. package/packages/agent/src/auth/index.js +0 -3
  1249. package/packages/agent/src/auth/openai-codex.d.ts +0 -27
  1250. package/packages/agent/src/auth/openai-codex.d.ts.map +0 -1
  1251. package/packages/agent/src/auth/openai-codex.js +0 -72
  1252. package/packages/agent/src/auth/types.d.ts +0 -18
  1253. package/packages/agent/src/auth/types.d.ts.map +0 -1
  1254. package/packages/agent/src/auth/types.js +0 -8
  1255. package/packages/agent/src/awareness/registry.d.ts +0 -27
  1256. package/packages/agent/src/awareness/registry.d.ts.map +0 -1
  1257. package/packages/agent/src/awareness/registry.js +0 -161
  1258. package/packages/agent/src/benchmark-server.d.ts +0 -2
  1259. package/packages/agent/src/benchmark-server.d.ts.map +0 -1
  1260. package/packages/agent/src/benchmark-server.js +0 -773
  1261. package/packages/agent/src/bin.js +0 -6
  1262. package/packages/agent/src/cli/index.d.ts.map +0 -1
  1263. package/packages/agent/src/cli/index.js +0 -40
  1264. package/packages/agent/src/cloud/auth.d.ts +0 -19
  1265. package/packages/agent/src/cloud/auth.d.ts.map +0 -1
  1266. package/packages/agent/src/cloud/auth.js +0 -107
  1267. package/packages/agent/src/cloud/backup.d.ts +0 -18
  1268. package/packages/agent/src/cloud/backup.d.ts.map +0 -1
  1269. package/packages/agent/src/cloud/backup.js +0 -42
  1270. package/packages/agent/src/cloud/base-url.d.ts +0 -3
  1271. package/packages/agent/src/cloud/base-url.d.ts.map +0 -1
  1272. package/packages/agent/src/cloud/base-url.js +0 -40
  1273. package/packages/agent/src/cloud/bridge-client.d.ts +0 -56
  1274. package/packages/agent/src/cloud/bridge-client.d.ts.map +0 -1
  1275. package/packages/agent/src/cloud/bridge-client.js +0 -190
  1276. package/packages/agent/src/cloud/cloud-manager.d.ts +0 -32
  1277. package/packages/agent/src/cloud/cloud-manager.d.ts.map +0 -1
  1278. package/packages/agent/src/cloud/cloud-manager.js +0 -119
  1279. package/packages/agent/src/cloud/cloud-proxy.d.ts +0 -20
  1280. package/packages/agent/src/cloud/cloud-proxy.d.ts.map +0 -1
  1281. package/packages/agent/src/cloud/cloud-proxy.js +0 -34
  1282. package/packages/agent/src/cloud/index.d.ts +0 -7
  1283. package/packages/agent/src/cloud/index.d.ts.map +0 -1
  1284. package/packages/agent/src/cloud/index.js +0 -6
  1285. package/packages/agent/src/cloud/reconnect.d.ts +0 -26
  1286. package/packages/agent/src/cloud/reconnect.d.ts.map +0 -1
  1287. package/packages/agent/src/cloud/reconnect.js +0 -86
  1288. package/packages/agent/src/cloud/validate-url.d.ts +0 -2
  1289. package/packages/agent/src/cloud/validate-url.d.ts.map +0 -1
  1290. package/packages/agent/src/cloud/validate-url.js +0 -162
  1291. package/packages/agent/src/config/config.d.ts +0 -6
  1292. package/packages/agent/src/config/config.d.ts.map +0 -1
  1293. package/packages/agent/src/config/config.js +0 -118
  1294. package/packages/agent/src/config/env-vars.d.ts +0 -3
  1295. package/packages/agent/src/config/env-vars.d.ts.map +0 -1
  1296. package/packages/agent/src/config/env-vars.js +0 -76
  1297. package/packages/agent/src/config/includes.d.ts.map +0 -1
  1298. package/packages/agent/src/config/includes.js +0 -148
  1299. package/packages/agent/src/config/index.d.ts +0 -16
  1300. package/packages/agent/src/config/index.d.ts.map +0 -1
  1301. package/packages/agent/src/config/index.js +0 -15
  1302. package/packages/agent/src/config/object-utils.d.ts +0 -2
  1303. package/packages/agent/src/config/object-utils.d.ts.map +0 -1
  1304. package/packages/agent/src/config/object-utils.js +0 -6
  1305. package/packages/agent/src/config/paths.d.ts +0 -13
  1306. package/packages/agent/src/config/paths.d.ts.map +0 -1
  1307. package/packages/agent/src/config/paths.js +0 -67
  1308. package/packages/agent/src/config/plugin-auto-enable.d.ts +0 -16
  1309. package/packages/agent/src/config/plugin-auto-enable.d.ts.map +0 -1
  1310. package/packages/agent/src/config/plugin-auto-enable.js +0 -384
  1311. package/packages/agent/src/config/schema.d.ts +0 -87
  1312. package/packages/agent/src/config/schema.d.ts.map +0 -1
  1313. package/packages/agent/src/config/schema.js +0 -928
  1314. package/packages/agent/src/config/types.agent-defaults.d.ts +0 -331
  1315. package/packages/agent/src/config/types.agent-defaults.d.ts.map +0 -1
  1316. package/packages/agent/src/config/types.agent-defaults.js +0 -1
  1317. package/packages/agent/src/config/types.agents.d.ts +0 -110
  1318. package/packages/agent/src/config/types.agents.d.ts.map +0 -1
  1319. package/packages/agent/src/config/types.agents.js +0 -1
  1320. package/packages/agent/src/config/types.d.ts +0 -8
  1321. package/packages/agent/src/config/types.d.ts.map +0 -1
  1322. package/packages/agent/src/config/types.eliza.d.ts +0 -636
  1323. package/packages/agent/src/config/types.eliza.d.ts.map +0 -1
  1324. package/packages/agent/src/config/types.eliza.js +0 -1
  1325. package/packages/agent/src/config/types.gateway.d.ts +0 -216
  1326. package/packages/agent/src/config/types.gateway.d.ts.map +0 -1
  1327. package/packages/agent/src/config/types.gateway.js +0 -1
  1328. package/packages/agent/src/config/types.hooks.d.ts +0 -107
  1329. package/packages/agent/src/config/types.hooks.d.ts.map +0 -1
  1330. package/packages/agent/src/config/types.hooks.js +0 -1
  1331. package/packages/agent/src/config/types.js +0 -7
  1332. package/packages/agent/src/config/types.messages.d.ts +0 -176
  1333. package/packages/agent/src/config/types.messages.d.ts.map +0 -1
  1334. package/packages/agent/src/config/types.messages.js +0 -1
  1335. package/packages/agent/src/config/types.tools.d.ts +0 -400
  1336. package/packages/agent/src/config/types.tools.d.ts.map +0 -1
  1337. package/packages/agent/src/config/types.tools.js +0 -1
  1338. package/packages/agent/src/config/zod-schema.agent-runtime.d.ts +0 -1062
  1339. package/packages/agent/src/config/zod-schema.agent-runtime.d.ts.map +0 -1
  1340. package/packages/agent/src/config/zod-schema.agent-runtime.js +0 -721
  1341. package/packages/agent/src/config/zod-schema.core.d.ts +0 -1021
  1342. package/packages/agent/src/config/zod-schema.core.d.ts.map +0 -1
  1343. package/packages/agent/src/config/zod-schema.core.js +0 -694
  1344. package/packages/agent/src/config/zod-schema.d.ts +0 -4817
  1345. package/packages/agent/src/config/zod-schema.d.ts.map +0 -1
  1346. package/packages/agent/src/config/zod-schema.js +0 -778
  1347. package/packages/agent/src/config/zod-schema.providers-core.d.ts +0 -2976
  1348. package/packages/agent/src/config/zod-schema.providers-core.d.ts.map +0 -1
  1349. package/packages/agent/src/config/zod-schema.providers-core.js +0 -1006
  1350. package/packages/agent/src/config/zod-schema.session.d.ts +0 -183
  1351. package/packages/agent/src/config/zod-schema.session.js +0 -86
  1352. package/packages/agent/src/contracts/apps.d.ts +0 -42
  1353. package/packages/agent/src/contracts/apps.d.ts.map +0 -1
  1354. package/packages/agent/src/contracts/apps.js +0 -4
  1355. package/packages/agent/src/contracts/awareness.d.ts +0 -38
  1356. package/packages/agent/src/contracts/config.d.ts +0 -146
  1357. package/packages/agent/src/contracts/config.d.ts.map +0 -1
  1358. package/packages/agent/src/contracts/config.js +0 -4
  1359. package/packages/agent/src/contracts/drop.d.ts +0 -20
  1360. package/packages/agent/src/contracts/drop.d.ts.map +0 -1
  1361. package/packages/agent/src/contracts/drop.js +0 -4
  1362. package/packages/agent/src/contracts/index.d.ts +0 -9
  1363. package/packages/agent/src/contracts/index.d.ts.map +0 -1
  1364. package/packages/agent/src/contracts/index.js +0 -8
  1365. package/packages/agent/src/contracts/onboarding.d.ts +0 -384
  1366. package/packages/agent/src/contracts/onboarding.d.ts.map +0 -1
  1367. package/packages/agent/src/contracts/onboarding.js +0 -290
  1368. package/packages/agent/src/contracts/permissions.d.ts +0 -35
  1369. package/packages/agent/src/contracts/permissions.d.ts.map +0 -1
  1370. package/packages/agent/src/contracts/permissions.js +0 -4
  1371. package/packages/agent/src/contracts/verification.d.ts +0 -9
  1372. package/packages/agent/src/contracts/verification.d.ts.map +0 -1
  1373. package/packages/agent/src/contracts/verification.js +0 -4
  1374. package/packages/agent/src/contracts/wallet.d.ts +0 -409
  1375. package/packages/agent/src/contracts/wallet.d.ts.map +0 -1
  1376. package/packages/agent/src/contracts/wallet.js +0 -60
  1377. package/packages/agent/src/diagnostics/integration-observability.d.ts +0 -40
  1378. package/packages/agent/src/diagnostics/integration-observability.d.ts.map +0 -1
  1379. package/packages/agent/src/diagnostics/integration-observability.js +0 -68
  1380. package/packages/agent/src/emotes/catalog.d.ts +0 -31
  1381. package/packages/agent/src/emotes/catalog.d.ts.map +0 -1
  1382. package/packages/agent/src/emotes/catalog.js +0 -402
  1383. package/packages/agent/src/hooks/discovery.d.ts +0 -13
  1384. package/packages/agent/src/hooks/discovery.d.ts.map +0 -1
  1385. package/packages/agent/src/hooks/discovery.js +0 -184
  1386. package/packages/agent/src/hooks/eligibility.d.ts +0 -12
  1387. package/packages/agent/src/hooks/eligibility.d.ts.map +0 -1
  1388. package/packages/agent/src/hooks/eligibility.js +0 -100
  1389. package/packages/agent/src/hooks/index.d.ts +0 -3
  1390. package/packages/agent/src/hooks/index.d.ts.map +0 -1
  1391. package/packages/agent/src/hooks/index.js +0 -2
  1392. package/packages/agent/src/hooks/loader.d.ts +0 -34
  1393. package/packages/agent/src/hooks/loader.d.ts.map +0 -1
  1394. package/packages/agent/src/hooks/loader.js +0 -176
  1395. package/packages/agent/src/hooks/registry.d.ts +0 -11
  1396. package/packages/agent/src/hooks/registry.d.ts.map +0 -1
  1397. package/packages/agent/src/index.d.ts +0 -20
  1398. package/packages/agent/src/index.d.ts.map +0 -1
  1399. package/packages/agent/src/index.js +0 -19
  1400. package/packages/agent/src/onboarding-presets.d.ts +0 -59
  1401. package/packages/agent/src/onboarding-presets.d.ts.map +0 -1
  1402. package/packages/agent/src/onboarding-presets.js +0 -1470
  1403. package/packages/agent/src/plugins/custom-rtmp/index.d.ts +0 -12
  1404. package/packages/agent/src/plugins/custom-rtmp/index.d.ts.map +0 -1
  1405. package/packages/agent/src/plugins/custom-rtmp/index.js +0 -26
  1406. package/packages/agent/src/providers/admin-trust.d.ts.map +0 -1
  1407. package/packages/agent/src/providers/admin-trust.js +0 -53
  1408. package/packages/agent/src/providers/session-bridge.d.ts.map +0 -1
  1409. package/packages/agent/src/providers/session-bridge.js +0 -85
  1410. package/packages/agent/src/providers/session-utils.d.ts +0 -20
  1411. package/packages/agent/src/providers/session-utils.d.ts.map +0 -1
  1412. package/packages/agent/src/providers/session-utils.js +0 -33
  1413. package/packages/agent/src/providers/simple-mode.d.ts.map +0 -1
  1414. package/packages/agent/src/providers/simple-mode.js +0 -85
  1415. package/packages/agent/src/providers/ui-catalog.d.ts.map +0 -1
  1416. package/packages/agent/src/providers/ui-catalog.js +0 -123
  1417. package/packages/agent/src/providers/workspace-provider.d.ts +0 -22
  1418. package/packages/agent/src/providers/workspace-provider.d.ts.map +0 -1
  1419. package/packages/agent/src/providers/workspace-provider.js +0 -167
  1420. package/packages/agent/src/providers/workspace.d.ts +0 -54
  1421. package/packages/agent/src/providers/workspace.d.ts.map +0 -1
  1422. package/packages/agent/src/providers/workspace.js +0 -405
  1423. package/packages/agent/src/runtime/cloud-onboarding.d.ts +0 -55
  1424. package/packages/agent/src/runtime/cloud-onboarding.d.ts.map +0 -1
  1425. package/packages/agent/src/runtime/cloud-onboarding.js +0 -279
  1426. package/packages/agent/src/runtime/core-plugins.d.ts +0 -14
  1427. package/packages/agent/src/runtime/core-plugins.d.ts.map +0 -1
  1428. package/packages/agent/src/runtime/core-plugins.js +0 -51
  1429. package/packages/agent/src/runtime/custom-actions.d.ts +0 -40
  1430. package/packages/agent/src/runtime/custom-actions.d.ts.map +0 -1
  1431. package/packages/agent/src/runtime/custom-actions.js +0 -454
  1432. package/packages/agent/src/runtime/eliza-plugin.d.ts +0 -16
  1433. package/packages/agent/src/runtime/eliza-plugin.d.ts.map +0 -1
  1434. package/packages/agent/src/runtime/eliza-plugin.js +0 -105
  1435. package/packages/agent/src/runtime/eliza.d.ts +0 -205
  1436. package/packages/agent/src/runtime/eliza.d.ts.map +0 -1
  1437. package/packages/agent/src/runtime/eliza.js +0 -3945
  1438. package/packages/agent/src/runtime/embedding-presets.d.ts.map +0 -1
  1439. package/packages/agent/src/runtime/embedding-presets.js +0 -53
  1440. package/packages/agent/src/runtime/index.d.ts +0 -9
  1441. package/packages/agent/src/runtime/index.d.ts.map +0 -1
  1442. package/packages/agent/src/runtime/index.js +0 -8
  1443. package/packages/agent/src/runtime/onboarding-names.d.ts +0 -11
  1444. package/packages/agent/src/runtime/onboarding-names.d.ts.map +0 -1
  1445. package/packages/agent/src/runtime/onboarding-names.js +0 -74
  1446. package/packages/agent/src/runtime/release-plugin-policy.d.ts.map +0 -1
  1447. package/packages/agent/src/runtime/release-plugin-policy.js +0 -87
  1448. package/packages/agent/src/runtime/restart.d.ts +0 -45
  1449. package/packages/agent/src/runtime/restart.d.ts.map +0 -1
  1450. package/packages/agent/src/runtime/restart.js +0 -45
  1451. package/packages/agent/src/runtime/trajectory-persistence.d.ts +0 -214
  1452. package/packages/agent/src/runtime/trajectory-persistence.d.ts.map +0 -1
  1453. package/packages/agent/src/runtime/trajectory-persistence.js +0 -1956
  1454. package/packages/agent/src/runtime/version.js +0 -5
  1455. package/packages/agent/src/security/audit-log.d.ts +0 -49
  1456. package/packages/agent/src/security/audit-log.d.ts.map +0 -1
  1457. package/packages/agent/src/server/index.d.ts +0 -3
  1458. package/packages/agent/src/server/index.d.ts.map +0 -1
  1459. package/packages/agent/src/server/index.js +0 -1
  1460. package/packages/agent/src/services/agent-export.d.ts.map +0 -1
  1461. package/packages/agent/src/services/agent-export.js +0 -729
  1462. package/packages/agent/src/services/app-manager.d.ts +0 -34
  1463. package/packages/agent/src/services/app-manager.d.ts.map +0 -1
  1464. package/packages/agent/src/services/app-manager.js +0 -425
  1465. package/packages/agent/src/services/browser-capture.d.ts +0 -39
  1466. package/packages/agent/src/services/browser-capture.d.ts.map +0 -1
  1467. package/packages/agent/src/services/browser-capture.js +0 -162
  1468. package/packages/agent/src/services/coding-agent-context.d.ts +0 -310
  1469. package/packages/agent/src/services/coding-agent-context.d.ts.map +0 -1
  1470. package/packages/agent/src/services/coding-agent-context.js +0 -281
  1471. package/packages/agent/src/services/fallback-training-service.d.ts +0 -78
  1472. package/packages/agent/src/services/fallback-training-service.d.ts.map +0 -1
  1473. package/packages/agent/src/services/fallback-training-service.js +0 -126
  1474. package/packages/agent/src/services/index.d.ts +0 -18
  1475. package/packages/agent/src/services/index.d.ts.map +0 -1
  1476. package/packages/agent/src/services/index.js +0 -17
  1477. package/packages/agent/src/services/mcp-marketplace.js +0 -200
  1478. package/packages/agent/src/services/plugin-manager-types.d.ts +0 -139
  1479. package/packages/agent/src/services/plugin-manager-types.d.ts.map +0 -1
  1480. package/packages/agent/src/services/privy-wallets.d.ts +0 -18
  1481. package/packages/agent/src/services/privy-wallets.d.ts.map +0 -1
  1482. package/packages/agent/src/services/privy-wallets.js +0 -225
  1483. package/packages/agent/src/services/registry-client-app-meta.d.ts +0 -6
  1484. package/packages/agent/src/services/registry-client-app-meta.d.ts.map +0 -1
  1485. package/packages/agent/src/services/registry-client-app-meta.js +0 -147
  1486. package/packages/agent/src/services/registry-client-endpoints.d.ts +0 -7
  1487. package/packages/agent/src/services/registry-client-endpoints.d.ts.map +0 -1
  1488. package/packages/agent/src/services/registry-client-endpoints.js +0 -183
  1489. package/packages/agent/src/services/registry-client-local.d.ts +0 -4
  1490. package/packages/agent/src/services/registry-client-local.d.ts.map +0 -1
  1491. package/packages/agent/src/services/registry-client-local.js +0 -377
  1492. package/packages/agent/src/services/registry-client-network.d.ts +0 -9
  1493. package/packages/agent/src/services/registry-client-network.d.ts.map +0 -1
  1494. package/packages/agent/src/services/registry-client-network.js +0 -109
  1495. package/packages/agent/src/services/registry-client-queries.d.ts +0 -15
  1496. package/packages/agent/src/services/registry-client-queries.d.ts.map +0 -1
  1497. package/packages/agent/src/services/registry-client-queries.js +0 -150
  1498. package/packages/agent/src/services/registry-client-types.d.ts +0 -115
  1499. package/packages/agent/src/services/registry-client-types.d.ts.map +0 -1
  1500. package/packages/agent/src/services/registry-client.d.ts +0 -39
  1501. package/packages/agent/src/services/registry-client.d.ts.map +0 -1
  1502. package/packages/agent/src/services/registry-client.js +0 -249
  1503. package/packages/agent/src/services/remote-signing-service.d.ts +0 -58
  1504. package/packages/agent/src/services/remote-signing-service.d.ts.map +0 -1
  1505. package/packages/agent/src/services/remote-signing-service.js +0 -185
  1506. package/packages/agent/src/services/sandbox-manager.d.ts +0 -104
  1507. package/packages/agent/src/services/sandbox-manager.d.ts.map +0 -1
  1508. package/packages/agent/src/services/sandbox-manager.js +0 -353
  1509. package/packages/agent/src/services/self-updater.d.ts +0 -21
  1510. package/packages/agent/src/services/self-updater.d.ts.map +0 -1
  1511. package/packages/agent/src/services/self-updater.js +0 -162
  1512. package/packages/agent/src/services/signal-pairing.d.ts +0 -37
  1513. package/packages/agent/src/services/signal-pairing.d.ts.map +0 -1
  1514. package/packages/agent/src/services/signal-pairing.js +0 -124
  1515. package/packages/agent/src/services/skill-marketplace.d.ts.map +0 -1
  1516. package/packages/agent/src/services/skill-marketplace.js +0 -680
  1517. package/packages/agent/src/services/stream-manager.d.ts +0 -121
  1518. package/packages/agent/src/services/stream-manager.d.ts.map +0 -1
  1519. package/packages/agent/src/services/stream-manager.js +0 -604
  1520. package/packages/agent/src/services/tts-stream-bridge.d.ts +0 -83
  1521. package/packages/agent/src/services/tts-stream-bridge.d.ts.map +0 -1
  1522. package/packages/agent/src/services/tts-stream-bridge.js +0 -349
  1523. package/packages/agent/src/services/update-checker.d.ts +0 -29
  1524. package/packages/agent/src/services/update-checker.d.ts.map +0 -1
  1525. package/packages/agent/src/services/update-checker.js +0 -134
  1526. package/packages/agent/src/services/version-compat.d.ts +0 -99
  1527. package/packages/agent/src/services/version-compat.d.ts.map +0 -1
  1528. package/packages/agent/src/services/version-compat.js +0 -195
  1529. package/packages/agent/src/services/whatsapp-pairing.d.ts +0 -41
  1530. package/packages/agent/src/services/whatsapp-pairing.d.ts.map +0 -1
  1531. package/packages/agent/src/services/whatsapp-pairing.js +0 -209
  1532. package/packages/agent/src/shared/ui-catalog-prompt.d.ts +0 -52
  1533. package/packages/agent/src/shared/ui-catalog-prompt.d.ts.map +0 -1
  1534. package/packages/agent/src/shared/ui-catalog-prompt.js +0 -1028
  1535. package/packages/agent/src/test-support/route-test-helpers.d.ts +0 -37
  1536. package/packages/agent/src/test-support/route-test-helpers.d.ts.map +0 -1
  1537. package/packages/agent/src/test-support/route-test-helpers.js +0 -54
  1538. package/packages/agent/src/test-support/test-helpers.d.ts +0 -77
  1539. package/packages/agent/src/test-support/test-helpers.d.ts.map +0 -1
  1540. package/packages/agent/src/test-support/test-helpers.js +0 -210
  1541. package/packages/agent/src/testing/index.d.ts +0 -4
  1542. package/packages/agent/src/testing/index.d.ts.map +0 -1
  1543. package/packages/agent/src/testing/index.js +0 -3
  1544. package/packages/agent/src/triggers/action.d.ts +0 -3
  1545. package/packages/agent/src/triggers/action.d.ts.map +0 -1
  1546. package/packages/agent/src/triggers/action.js +0 -267
  1547. package/packages/agent/src/triggers/runtime.d.ts +0 -24
  1548. package/packages/agent/src/triggers/runtime.d.ts.map +0 -1
  1549. package/packages/agent/src/triggers/runtime.js +0 -322
  1550. package/packages/agent/src/triggers/scheduling.d.ts +0 -70
  1551. package/packages/agent/src/triggers/scheduling.d.ts.map +0 -1
  1552. package/packages/agent/src/triggers/scheduling.js +0 -355
  1553. package/packages/agent/src/triggers/types.d.ts +0 -115
  1554. package/packages/agent/src/triggers/types.d.ts.map +0 -1
  1555. package/packages/agent/src/triggers/types.js +0 -1
  1556. package/packages/agent/src/utils/number-parsing.d.ts.map +0 -1
  1557. package/packages/agent/src/utils/number-parsing.js +0 -52
  1558. package/packages/agent/src/utils/spoken-text.d.ts +0 -2
  1559. package/packages/agent/src/utils/spoken-text.d.ts.map +0 -1
  1560. package/packages/agent/src/utils/spoken-text.js +0 -56
  1561. package/packages/agent/src/version-resolver.d.ts +0 -3
  1562. package/packages/agent/src/version-resolver.d.ts.map +0 -1
  1563. package/packages/agent/src/version-resolver.js +0 -51
  1564. /package/{packages → dist/packages}/agent/src/api/agent-transfer-routes.d.ts.map +0 -0
  1565. /package/{packages → dist/packages}/agent/src/api/compat-utils.d.ts +0 -0
  1566. /package/{packages → dist/packages}/agent/src/api/credit-detection.d.ts +0 -0
  1567. /package/{packages → dist/packages}/agent/src/api/early-logs.d.ts +0 -0
  1568. /package/{packages → dist/packages}/agent/src/api/early-logs.d.ts.map +0 -0
  1569. /package/{packages → dist/packages}/agent/src/api/early-logs.js +0 -0
  1570. /package/{packages → dist/packages}/agent/src/api/memory-bounds.d.ts +0 -0
  1571. /package/{packages → dist/packages}/agent/src/api/memory-bounds.d.ts.map +0 -0
  1572. /package/{packages → dist/packages}/agent/src/api/memory-bounds.js +0 -0
  1573. /package/{packages → dist/packages}/agent/src/api/models-routes.js +0 -0
  1574. /package/{packages → dist/packages}/agent/src/api/plugin-validation.d.ts +0 -0
  1575. /package/{packages → dist/packages}/agent/src/api/registry-service.js +0 -0
  1576. /package/{packages → dist/packages}/agent/src/api/terminal-run-limits.d.ts +0 -0
  1577. /package/{packages → dist/packages}/agent/src/api/training-backend-check.d.ts +0 -0
  1578. /package/{packages → dist/packages}/agent/src/api/training-backend-check.d.ts.map +0 -0
  1579. /package/{packages → dist/packages}/agent/src/api/training-backend-check.js +0 -0
  1580. /package/{packages → dist/packages}/agent/src/api/training-service-like.js +0 -0
  1581. /package/{packages → dist/packages}/agent/src/api/zip-utils.d.ts +0 -0
  1582. /package/{packages → dist/packages}/agent/src/api/zip-utils.d.ts.map +0 -0
  1583. /package/{packages → dist/packages}/agent/src/api/zip-utils.js +0 -0
  1584. /package/{packages → dist/packages}/agent/src/auth/claude-code-stealth.d.ts +0 -0
  1585. /package/{packages → dist/packages}/agent/src/bin.d.ts +0 -0
  1586. /package/{packages → dist/packages}/agent/src/bin.d.ts.map +0 -0
  1587. /package/{packages → dist/packages}/agent/src/cli/index.d.ts +0 -0
  1588. /package/{packages → dist/packages}/agent/src/cli/parse-duration.d.ts +0 -0
  1589. /package/{packages → dist/packages}/agent/src/cli/parse-duration.d.ts.map +0 -0
  1590. /package/{packages → dist/packages}/agent/src/cli/parse-duration.js +0 -0
  1591. /package/{packages → dist/packages}/agent/src/config/character-schema.d.ts +0 -0
  1592. /package/{packages → dist/packages}/agent/src/config/character-schema.d.ts.map +0 -0
  1593. /package/{packages → dist/packages}/agent/src/config/character-schema.js +0 -0
  1594. /package/{packages → dist/packages}/agent/src/config/includes.d.ts +0 -0
  1595. /package/{packages → dist/packages}/agent/src/config/telegram-custom-commands.d.ts +0 -0
  1596. /package/{packages → dist/packages}/agent/src/config/telegram-custom-commands.d.ts.map +0 -0
  1597. /package/{packages → dist/packages}/agent/src/config/telegram-custom-commands.js +0 -0
  1598. /package/{packages → dist/packages}/agent/src/config/zod-schema.hooks.d.ts +0 -0
  1599. /package/{packages → dist/packages}/agent/src/config/zod-schema.hooks.d.ts.map +0 -0
  1600. /package/{packages → dist/packages}/agent/src/config/zod-schema.hooks.js +0 -0
  1601. /package/{packages → dist/packages}/agent/src/config/zod-schema.session.d.ts.map +0 -0
  1602. /package/{packages → dist/packages}/agent/src/contracts/awareness.d.ts.map +0 -0
  1603. /package/{packages → dist/packages}/agent/src/contracts/awareness.js +0 -0
  1604. /package/{packages → dist/packages}/agent/src/hooks/registry.js +0 -0
  1605. /package/{packages → dist/packages}/agent/src/hooks/types.d.ts +0 -0
  1606. /package/{packages → dist/packages}/agent/src/hooks/types.d.ts.map +0 -0
  1607. /package/{packages → dist/packages}/agent/src/hooks/types.js +0 -0
  1608. /package/{packages → dist/packages}/agent/src/providers/admin-trust.d.ts +0 -0
  1609. /package/{packages → dist/packages}/agent/src/providers/session-bridge.d.ts +0 -0
  1610. /package/{packages → dist/packages}/agent/src/providers/simple-mode.d.ts +0 -0
  1611. /package/{packages → dist/packages}/agent/src/providers/ui-catalog.d.ts +0 -0
  1612. /package/{packages → dist/packages}/agent/src/runtime/agent-event-service.d.ts +0 -0
  1613. /package/{packages → dist/packages}/agent/src/runtime/agent-event-service.d.ts.map +0 -0
  1614. /package/{packages → dist/packages}/agent/src/runtime/agent-event-service.js +0 -0
  1615. /package/{packages → dist/packages}/agent/src/runtime/embedding-presets.d.ts +0 -0
  1616. /package/{packages → dist/packages}/agent/src/runtime/release-plugin-policy.d.ts +0 -0
  1617. /package/{packages → dist/packages}/agent/src/runtime/version.d.ts +0 -0
  1618. /package/{packages → dist/packages}/agent/src/runtime/version.d.ts.map +0 -0
  1619. /package/{packages → dist/packages}/agent/src/security/audit-log.js +0 -0
  1620. /package/{packages → dist/packages}/agent/src/security/network-policy.d.ts +0 -0
  1621. /package/{packages → dist/packages}/agent/src/security/network-policy.d.ts.map +0 -0
  1622. /package/{packages → dist/packages}/agent/src/security/network-policy.js +0 -0
  1623. /package/{packages → dist/packages}/agent/src/services/agent-export.d.ts +0 -0
  1624. /package/{packages → dist/packages}/agent/src/services/mcp-marketplace.d.ts +0 -0
  1625. /package/{packages → dist/packages}/agent/src/services/mcp-marketplace.d.ts.map +0 -0
  1626. /package/{packages → dist/packages}/agent/src/services/plugin-manager-types.js +0 -0
  1627. /package/{packages → dist/packages}/agent/src/services/registry-client-types.js +0 -0
  1628. /package/{packages → dist/packages}/agent/src/services/sandbox-engine.d.ts +0 -0
  1629. /package/{packages → dist/packages}/agent/src/services/sandbox-engine.d.ts.map +0 -0
  1630. /package/{packages → dist/packages}/agent/src/services/sandbox-engine.js +0 -0
  1631. /package/{packages → dist/packages}/agent/src/services/signing-policy.d.ts +0 -0
  1632. /package/{packages → dist/packages}/agent/src/services/signing-policy.d.ts.map +0 -0
  1633. /package/{packages → dist/packages}/agent/src/services/signing-policy.js +0 -0
  1634. /package/{packages → dist/packages}/agent/src/services/skill-catalog-client.d.ts +0 -0
  1635. /package/{packages → dist/packages}/agent/src/services/skill-catalog-client.d.ts.map +0 -0
  1636. /package/{packages → dist/packages}/agent/src/services/skill-catalog-client.js +0 -0
  1637. /package/{packages → dist/packages}/agent/src/services/skill-marketplace.d.ts +0 -0
  1638. /package/{packages → dist/packages}/agent/src/test-support/process-helpers.d.ts +0 -0
  1639. /package/{packages → dist/packages}/agent/src/test-support/process-helpers.d.ts.map +0 -0
  1640. /package/{packages → dist/packages}/agent/src/test-support/process-helpers.js +0 -0
  1641. /package/{packages → dist/packages}/agent/src/utils/exec-safety.d.ts +0 -0
  1642. /package/{packages → dist/packages}/agent/src/utils/exec-safety.d.ts.map +0 -0
  1643. /package/{packages → dist/packages}/agent/src/utils/exec-safety.js +0 -0
  1644. /package/{packages → dist/packages}/agent/src/utils/number-parsing.d.ts +0 -0
@@ -0,0 +1,3372 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ /**
10
+ * elizaOS runtime entry point for Eliza.
11
+ *
12
+ * Starts the elizaOS agent runtime with Eliza's plugin configuration.
13
+ * Can be run directly via: node --import tsx src/runtime/eliza.ts
14
+ * Or via the CLI: eliza start
15
+ *
16
+ * @module eliza
17
+ */
18
+ import crypto from "node:crypto";
19
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
20
+ import fs from "node:fs/promises";
21
+ import { createRequire } from "node:module";
22
+ import os from "node:os";
23
+ import path from "node:path";
24
+ import process from "node:process";
25
+ import * as readline from "node:readline";
26
+ import { fileURLToPath, pathToFileURL } from "node:url";
27
+ // ---------------------------------------------------------------------------
28
+ // Extracted modules — re-exported for backward compatibility
29
+ // ---------------------------------------------------------------------------
30
+ import { runFirstTimeSetup } from "./first-time-setup.js";
31
+ import { resolveConfigEnvForProcess } from "./operations/vault-bridge.js";
32
+ import { resolvePlugins } from "./plugin-resolver.js";
33
+ import { CUSTOM_PLUGINS_DIRNAME as CUSTOM_RUNTIME_PLUGINS_DIRNAME, STATIC_ELIZA_PLUGINS, } from "./plugin-types.js";
34
+ export { CHANNEL_PLUGIN_MAP, collectPluginNames, OPTIONAL_PLUGIN_MAP, PROVIDER_PLUGIN_MAP, } from "./plugin-collector.js";
35
+ export { CUSTOM_PLUGINS_DIRNAME, EJECTED_PLUGINS_DIRNAME, ensureBrowserServerLink, findPluginBrowserStagehandDir, findRuntimePluginExport, mergeDropInPlugins, repairBrokenInstallRecord, resolveElizaPluginImportSpecifier, resolvePackageEntry, STATIC_ELIZA_PLUGINS, scanDropInPlugins, } from "./plugin-types.js";
36
+ // resolvePlugins is re-exported via index.ts from ./plugin-resolver
37
+ // `@elizaos/app-lifeops` and `@elizaos/app-companion` are NOT eagerly imported
38
+ // here. Both packages transitively import from `@elizaos/agent` (e.g.
39
+ // `hasOwnerAccess` from this package's barrel) — a top-level static import
40
+ // would form a module-init cycle that leaves named exports of the app-lifeops
41
+ // actions array as `undefined`, crashing `runtime.registerPlugin` when it
42
+ // iterates `plugin.actions`.
43
+ //
44
+ // Both apps still resolve at plugin-load time via headless dynamic-import
45
+ // entrypoints in `plugin-resolver.ts`, after the static module graph has fully
46
+ // evaluated, so the cycle never forms and browser-only UI exports stay out of
47
+ // the agent process.
48
+ // Keep this here as a single sentinel: if we ever need a static reference,
49
+ // add `as const` data only — never an `import * as` of an app-* package.
50
+ import { AgentRuntime, AutonomyService, addLogListener, ChannelType, createBasicCapabilitiesPlugin, createMessageMemory, logger, stringToUuid, } from "@elizaos/core";
51
+ import { DEFAULT_ELIZA_CLOUD_TEXT_MODEL, formatError, isElizaSettingsDebugEnabled, isMobilePlatform, migrateLegacyRuntimeConfig, resolveDeploymentTargetInConfig, resolveElizaCloudTopology, resolveServerOnlyPort, resolveServiceRoutingInConfig, settingsDebugCloudSummary, } from "@elizaos/shared";
52
+ async function importAppCoreRuntime() {
53
+ // Use a string-literal dynamic import (no indirection through a `const`)
54
+ // so Bun.build can statically follow it and inline `@elizaos/app-core`
55
+ // into the mobile bundle. The previous indirect form
56
+ // (`const moduleId = "@elizaos/app-core"; import(moduleId)`) defeated
57
+ // Bun's resolver and produced a runtime `Cannot find module` on AOSP
58
+ // where there is no node_modules tree.
59
+ return import(
60
+ /* webpackIgnore: true */ "@elizaos/app-core");
61
+ }
62
+ import { buildCharacterFromConfig } from "./build-character-config.js";
63
+ import { resolvePreferredProviderId, resolvePreferredProviderPluginName, resolvePrimaryModel, } from "./model-resolution.js";
64
+ const ELIZAMAKER_MODULE = "@elizaos/app-elizamaker";
65
+ const STEWARD_EVM_BRIDGE_MODULE = "@elizaos/app-steward";
66
+ async function loadElizaMakerModule() {
67
+ return (await import(__rewriteRelativeImportExtension(
68
+ /* @vite-ignore */ ELIZAMAKER_MODULE)));
69
+ }
70
+ async function loadStewardEvmBridgeModule() {
71
+ return (await import(__rewriteRelativeImportExtension(
72
+ /* @vite-ignore */ STEWARD_EVM_BRIDGE_MODULE)));
73
+ }
74
+ import { debugLogResolvedContext, validateRuntimeContext, } from "../api/plugin-validation.js";
75
+ import { getWalletAddresses, syncSolanaPublicKeyEnv } from "../api/wallet.js";
76
+ import { configFileExists, loadElizaConfig, } from "../config/config.js";
77
+ import { CONNECTOR_ENV_MAP, collectConfigEnvVars, collectConnectorEnvVars, } from "../config/env-vars.js";
78
+ import { resolveStateDir, resolveUserPath } from "../config/paths.js";
79
+ import { createHookEvent, loadHooks, triggerHook, } from "../hooks/index.js";
80
+ import { ensureAgentWorkspace } from "../providers/workspace.js";
81
+ import { SandboxAuditLog } from "../security/audit-log.js";
82
+ import { SandboxManager, } from "../services/sandbox-manager.js";
83
+ import { resolveDefaultAgentWorkspaceDir, shouldBootstrapWorkspaceInitFiles, } from "../shared/workspace-resolution.js";
84
+ import { CORE_PLUGINS, OPTIONAL_CORE_PLUGINS } from "./core-plugins.js";
85
+ import { seedBundledDocuments } from "./default-documents.js";
86
+ import { createElizaPlugin } from "./eliza-plugin.js";
87
+ import { detectEmbeddingPreset } from "./embedding-presets.js";
88
+ import { runtimeDocumentsEnabled, runtimeTrajectoriesEnabled, } from "./native-runtime-features.js";
89
+ import { createPgliteInitError, getPgliteErrorCode, PGLITE_ERROR_CODES, } from "./pglite-error-compat.js";
90
+ import { installRuntimePluginLifecycle } from "./plugin-lifecycle.js";
91
+ import rolesPlugin from "./roles.js";
92
+ import { shouldEnableTrajectoryLoggingByDefault } from "./trajectory-persistence.js";
93
+ function isPluginSqlResolutionError(err) {
94
+ const message = err instanceof Error ? err.message : String(err);
95
+ return (message.includes("Cannot find module '@elizaos/plugin-sql'") ||
96
+ message.includes('Cannot find module "@elizaos/plugin-sql"') ||
97
+ (message.includes("@elizaos/plugin-sql") &&
98
+ (message.includes("ResolveMessage") ||
99
+ message.includes("Module not found") ||
100
+ message.includes("could not resolve") ||
101
+ message.includes("Could not resolve"))));
102
+ }
103
+ async function loadRequiredPluginSql() {
104
+ try {
105
+ return await import("@elizaos/plugin-sql");
106
+ }
107
+ catch (err) {
108
+ const sourceEntry = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../../plugins/plugin-sql/src/index.node.ts");
109
+ if (!isPluginSqlResolutionError(err) || !existsSync(sourceEntry)) {
110
+ throw err;
111
+ }
112
+ logger.debug(`[eliza] Loading @elizaos/plugin-sql from workspace source at ${sourceEntry}`);
113
+ return (await import(__rewriteRelativeImportExtension(pathToFileURL(sourceEntry).href)));
114
+ }
115
+ }
116
+ // Agent orchestrator ships as the standalone @elizaos/plugin-agent-orchestrator package.
117
+ const loadOptionalPlugin = async (packageName) => {
118
+ try {
119
+ return await import(__rewriteRelativeImportExtension(packageName));
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ };
125
+ // IMPORTANT: Do NOT pull plugin modules in via top-level `await` at module scope.
126
+ //
127
+ // Bun.build (and any cross-module top-level-await scheduling that follows the
128
+ // ESM spec naively) can emit an `init_eliza()` call that is NOT awaited inside
129
+ // a downstream `init_runtime*` function. When that happens, the
130
+ // `Object.assign(STATIC_ELIZA_PLUGINS, ...)` below has not run yet by the time
131
+ // `loadSinglePlugin("@elizaos/plugin-sql")` is dispatched, and the resolver
132
+ // falls through to a dynamic import that throws
133
+ // "Cannot find module '@elizaos/plugin-sql'" from the bundle path.
134
+ //
135
+ // Solution: lazy-load and memoize each module, and register the static map
136
+ // inside `ensureCoreStaticPluginsRegistered()` which is awaited from every
137
+ // runtime entry point (`startEliza`, `startInCloudMode`).
138
+ let _pluginSqlPromise = null;
139
+ async function getPluginSql() {
140
+ if (!_pluginSqlPromise) {
141
+ _pluginSqlPromise = loadRequiredPluginSql();
142
+ }
143
+ return _pluginSqlPromise;
144
+ }
145
+ let _pluginLocalEmbeddingPromise = null;
146
+ async function getPluginLocalEmbedding() {
147
+ if (!_pluginLocalEmbeddingPromise) {
148
+ _pluginLocalEmbeddingPromise = (async () => {
149
+ try {
150
+ return await import("@elizaos/plugin-local-embedding");
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ })();
156
+ }
157
+ return _pluginLocalEmbeddingPromise;
158
+ }
159
+ const _optionalPluginCache = new Map();
160
+ function getOptionalPlugin(packageName) {
161
+ const cached = _optionalPluginCache.get(packageName);
162
+ if (cached)
163
+ return cached;
164
+ const promise = loadOptionalPlugin(packageName);
165
+ _optionalPluginCache.set(packageName, promise);
166
+ return promise;
167
+ }
168
+ // Personality is bundled in @elizaos/core advanced capabilities (advancedCapabilities).
169
+ let _coreStaticPluginsRegistered = false;
170
+ let _coreStaticPluginsRegistrationPromise = null;
171
+ /**
172
+ * Resolve and register the baseline `@elizaos/plugin-*` modules into the
173
+ * shared `STATIC_ELIZA_PLUGINS` map. Called from every runtime entry point
174
+ * (`startEliza`, `startInCloudMode`, `bootElizaRuntime`) before any caller
175
+ * touches `loadSinglePlugin`. Memoized so repeated calls are free.
176
+ *
177
+ * Why this isn't done at module init:
178
+ * - Top-level `await` for these modules at module scope creates a
179
+ * cross-module TLA dependency that `Bun.build` does not always honor in
180
+ * the bundled output (it emits the init call without awaiting it).
181
+ * - Deferring to an explicit awaited call inside an entry function makes the
182
+ * ordering explicit and bundler-independent.
183
+ */
184
+ export async function ensureCoreStaticPluginsRegistered() {
185
+ if (_coreStaticPluginsRegistered)
186
+ return;
187
+ if (_coreStaticPluginsRegistrationPromise) {
188
+ await _coreStaticPluginsRegistrationPromise;
189
+ return;
190
+ }
191
+ _coreStaticPluginsRegistrationPromise = (async () => {
192
+ const [pluginSql, pluginLocalEmbedding, pluginAgentOrchestrator, pluginShell, pluginCommands, pluginVideo, pluginElizacloud, pluginOllama, pluginAnthropic, pluginOpenai,] = await Promise.all([
193
+ getPluginSql(),
194
+ getPluginLocalEmbedding(),
195
+ getOptionalPlugin("@elizaos/plugin-agent-orchestrator"),
196
+ getOptionalPlugin("@elizaos/plugin-shell"),
197
+ getOptionalPlugin("@elizaos/plugin-commands"),
198
+ getOptionalPlugin("@elizaos/plugin-video"),
199
+ getOptionalPlugin("@elizaos/plugin-elizacloud"),
200
+ getOptionalPlugin("@elizaos/plugin-ollama"),
201
+ getOptionalPlugin("@elizaos/plugin-anthropic"),
202
+ getOptionalPlugin("@elizaos/plugin-openai"),
203
+ ]);
204
+ Object.assign(STATIC_ELIZA_PLUGINS, {
205
+ "@elizaos/plugin-sql": pluginSql,
206
+ ...(pluginLocalEmbedding
207
+ ? { "@elizaos/plugin-local-embedding": pluginLocalEmbedding }
208
+ : {}),
209
+ // secrets (SECRETS service): now built-in core capability (ENABLE_SECRETS_MANAGER)
210
+ ...(pluginAgentOrchestrator
211
+ ? { "agent-orchestrator": pluginAgentOrchestrator }
212
+ : {}),
213
+ ...(pluginShell ? { "@elizaos/plugin-shell": pluginShell } : {}),
214
+ // plugin-manager: now built-in core capability (ENABLE_PLUGIN_MANAGER)
215
+ ...(pluginCommands ? { "@elizaos/plugin-commands": pluginCommands } : {}),
216
+ ...(pluginVideo ? { "@elizaos/plugin-video": pluginVideo } : {}),
217
+ ...(pluginOpenai ? { "@elizaos/plugin-openai": pluginOpenai } : {}),
218
+ ...(pluginAnthropic
219
+ ? { "@elizaos/plugin-anthropic": pluginAnthropic }
220
+ : {}),
221
+ ...(pluginOllama ? { "@elizaos/plugin-ollama": pluginOllama } : {}),
222
+ ...(pluginElizacloud
223
+ ? { "@elizaos/plugin-elizacloud": pluginElizacloud }
224
+ : {}),
225
+ // trust: now built-in core capability (ENABLE_TRUST)
226
+ // `@elizaos/app-lifeops` and `@elizaos/app-companion` are intentionally
227
+ // omitted from the static map — see the comment near the top of this file.
228
+ // They resolve via headless dynamic-import entrypoints in plugin-resolver.ts.
229
+ // personality: now built-in advanced capability (advancedCapabilities: true)
230
+ });
231
+ _coreStaticPluginsRegistered = true;
232
+ })();
233
+ await _coreStaticPluginsRegistrationPromise;
234
+ }
235
+ let activeSignalShutdownContext = null;
236
+ let signalHandlersRegistered = false;
237
+ let signalShutdownPromise = null;
238
+ function registerSignalShutdownHandlers(context) {
239
+ activeSignalShutdownContext = context;
240
+ if (signalHandlersRegistered) {
241
+ return;
242
+ }
243
+ const shutdown = async () => {
244
+ if (signalShutdownPromise) {
245
+ await signalShutdownPromise;
246
+ return;
247
+ }
248
+ signalShutdownPromise = (async () => {
249
+ const current = activeSignalShutdownContext;
250
+ if (!current) {
251
+ process.exit(0);
252
+ }
253
+ try {
254
+ await current?.beforeShutdown?.();
255
+ }
256
+ catch (err) {
257
+ logger.warn(`[eliza] Pre-shutdown cleanup error: ${formatError(err)}`);
258
+ }
259
+ try {
260
+ const sandboxManager = current?.getSandboxManager();
261
+ if (sandboxManager) {
262
+ try {
263
+ await sandboxManager.stop();
264
+ logger.info("[eliza] Sandbox manager stopped");
265
+ }
266
+ catch (err) {
267
+ logger.warn(`[eliza] Sandbox stop error: ${err instanceof Error ? err.message : String(err)}`);
268
+ }
269
+ }
270
+ }
271
+ catch (err) {
272
+ logger.warn(`[eliza] Sandbox shutdown error: ${formatError(err)}`);
273
+ }
274
+ try {
275
+ const runtime = current?.getRuntime();
276
+ if (runtime) {
277
+ await shutdownRuntime(runtime, "signal shutdown");
278
+ }
279
+ }
280
+ catch (err) {
281
+ logger.warn(`[eliza] Error during shutdown: ${formatError(err)}`);
282
+ }
283
+ process.exit(0);
284
+ })();
285
+ await signalShutdownPromise;
286
+ };
287
+ process.on("SIGINT", () => void shutdown());
288
+ process.on("SIGTERM", () => void shutdown());
289
+ signalHandlersRegistered = true;
290
+ }
291
+ /**
292
+ * Map of baseline bundled @elizaos plugin names to their statically imported
293
+ * modules.
294
+ *
295
+ * Post-release plugins are intentionally excluded so the packaged runtime can
296
+ * ship a smaller baseline bundle. Those plugins fall through to dynamic
297
+ * import() and can be installed later via the plugin installer.
298
+ *
299
+ * The actual `Object.assign(STATIC_ELIZA_PLUGINS, ...)` registration runs
300
+ * inside `ensureCoreStaticPluginsRegistered()` (defined above), which is
301
+ * called at the top of every runtime entry point. Doing it there instead of
302
+ * at module init avoids a `Bun.build` cross-module top-level-await scheduling
303
+ * bug that strands `@elizaos/plugin-sql` undefined in the bundled runtime.
304
+ */
305
+ // NODE_PATH so dynamic plugin imports (e.g. @elizaos/plugin-*) resolve.
306
+ // WHY: When eliza is loaded from dist/ or by a test runner, Node's resolution does not
307
+ // search repo root node_modules; import("@elizaos/plugin-*") then fails. We prepend
308
+ // repo root node_modules only if not already in NODE_PATH (run-node.mjs may have set it)
309
+ // to avoid duplicate entries; _initPaths() makes Node re-read NODE_PATH. See docs/plugin-resolution-and-node-path.md.
310
+ // We walk up from this file to find node_modules — we do not assume a fixed depth
311
+ // (e.g. two levels for src/runtime/ or dist/runtime/) so we still work if build
312
+ // output structure changes (e.g. flat dist). First directory with node_modules wins.
313
+ const _elizaDir = path.dirname(fileURLToPath(import.meta.url));
314
+ let _dir = _elizaDir;
315
+ let _rootModules = null;
316
+ while (_dir !== path.dirname(_dir)) {
317
+ const candidate = path.join(_dir, "node_modules");
318
+ if (existsSync(candidate)) {
319
+ _rootModules = candidate;
320
+ break;
321
+ }
322
+ _dir = path.dirname(_dir);
323
+ }
324
+ if (_rootModules) {
325
+ const prev = process.env.NODE_PATH ?? "";
326
+ const entries = prev ? prev.split(path.delimiter) : [];
327
+ const normalizedRoot = path.resolve(_rootModules);
328
+ if (!entries.some((e) => path.resolve(e) === normalizedRoot)) {
329
+ process.env.NODE_PATH = prev
330
+ ? `${_rootModules}${path.delimiter}${prev}`
331
+ : _rootModules;
332
+ createRequire(import.meta.url)("node:module").Module._initPaths();
333
+ }
334
+ }
335
+ export function configureLocalEmbeddingPlugin(_plugin, config) {
336
+ const detectedPreset = detectEmbeddingPreset();
337
+ const SQL_COMPATIBLE_EMBEDDING_DIMENSIONS = new Set([
338
+ 384, 512, 768, 1024, 1536, 3072,
339
+ ]);
340
+ const normalizeEmbeddingDimensions = (rawValue) => {
341
+ if (!rawValue)
342
+ return undefined;
343
+ const parsed = Number.parseInt(rawValue, 10);
344
+ if (!Number.isInteger(parsed) || parsed <= 0)
345
+ return undefined;
346
+ return SQL_COMPATIBLE_EMBEDDING_DIMENSIONS.has(parsed)
347
+ ? String(parsed)
348
+ : "384";
349
+ };
350
+ const embeddingConfig = config?.embedding;
351
+ const configuredModel = embeddingConfig?.model?.trim();
352
+ const configuredRepo = embeddingConfig?.modelRepo?.trim();
353
+ const configuredDimensions = normalizeEmbeddingDimensions(typeof embeddingConfig?.dimensions === "number" &&
354
+ Number.isInteger(embeddingConfig.dimensions) &&
355
+ embeddingConfig.dimensions > 0
356
+ ? String(embeddingConfig.dimensions)
357
+ : undefined);
358
+ const detectedDimensions = normalizeEmbeddingDimensions(String(detectedPreset.dimensions));
359
+ const configuredContextSize = typeof embeddingConfig?.contextSize === "number" &&
360
+ Number.isInteger(embeddingConfig.contextSize) &&
361
+ embeddingConfig.contextSize > 0
362
+ ? String(embeddingConfig.contextSize)
363
+ : undefined;
364
+ const configuredGpuLayers = (() => {
365
+ const value = embeddingConfig?.gpuLayers;
366
+ if (typeof value === "number" && Number.isInteger(value) && value >= 0) {
367
+ return String(value);
368
+ }
369
+ if (value === "auto" || value === "max") {
370
+ // plugin-local-embedding understands "auto" and treats it as runtime max
371
+ return "auto";
372
+ }
373
+ return undefined;
374
+ })();
375
+ const setEnvIfMissing = (key, value) => {
376
+ if (!value || process.env[key])
377
+ return;
378
+ process.env[key] = value;
379
+ };
380
+ const setEnvFromConfig = (key, value) => {
381
+ if (!value)
382
+ return;
383
+ process.env[key] = value;
384
+ };
385
+ // Keep plugin-local-embedding aligned with Eliza's hardware-adaptive preset
386
+ // selection. Hard-coding the standard preset here forces slower first-run
387
+ // downloads on Windows and low-spec machines.
388
+ setEnvIfMissing("LOCAL_EMBEDDING_MODEL", configuredModel || detectedPreset.model);
389
+ if (configuredRepo) {
390
+ setEnvFromConfig("LOCAL_EMBEDDING_MODEL_REPO", configuredRepo);
391
+ }
392
+ else if (!configuredModel) {
393
+ setEnvIfMissing("LOCAL_EMBEDDING_MODEL_REPO", detectedPreset.modelRepo);
394
+ }
395
+ if (configuredDimensions) {
396
+ setEnvFromConfig("LOCAL_EMBEDDING_DIMENSIONS", configuredDimensions);
397
+ }
398
+ else if (!configuredModel) {
399
+ setEnvIfMissing("LOCAL_EMBEDDING_DIMENSIONS", detectedDimensions);
400
+ }
401
+ if (configuredContextSize) {
402
+ setEnvFromConfig("LOCAL_EMBEDDING_CONTEXT_SIZE", configuredContextSize);
403
+ }
404
+ else if (!configuredModel) {
405
+ setEnvIfMissing("LOCAL_EMBEDDING_CONTEXT_SIZE", String(detectedPreset.contextSize));
406
+ }
407
+ if (configuredGpuLayers) {
408
+ process.env.LOCAL_EMBEDDING_GPU_LAYERS = configuredGpuLayers;
409
+ }
410
+ else if (!process.env.LOCAL_EMBEDDING_GPU_LAYERS) {
411
+ process.env.LOCAL_EMBEDDING_GPU_LAYERS = String(detectedPreset.gpuLayers);
412
+ }
413
+ // Performance tuning
414
+ // Disable mmap on Metal to prevent "different text" errors with some models
415
+ setEnvIfMissing("LOCAL_EMBEDDING_USE_MMAP", detectedPreset.gpuLayers === "auto" ? "false" : "true");
416
+ // Set default models directory if not present
417
+ setEnvIfMissing("MODELS_DIR", path.join(os.homedir(), ".eliza", "models"));
418
+ // Normalize Google AI API key aliases — the elizaOS plugin and @google/genai
419
+ // SDK expect different env var names. Canonicalize to the long form that
420
+ // @elizaos/plugin-google-genai reads via runtime.getSetting(). Users can set
421
+ // any of: GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY.
422
+ setEnvIfMissing("GOOGLE_GENERATIVE_AI_API_KEY", process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY);
423
+ // Default Google model names — the Google GenAI plugin's getSetting() returns
424
+ // null (not undefined) for missing keys, but the plugin checks !== undefined
425
+ // causing String(null) = "null" to be sent as the model name. Set sensible
426
+ // defaults so the plugin always has valid model names.
427
+ setEnvIfMissing("GOOGLE_SMALL_MODEL", "gemini-3-flash-preview");
428
+ setEnvIfMissing("GOOGLE_LARGE_MODEL", "gemini-3.1-pro-preview");
429
+ // Default Groq model names — plugin-groq still ships a deprecated large-model
430
+ // fallback. Seed runtime defaults before plugin init so direct Groq provider
431
+ // sessions use the approved GPT-OSS default.
432
+ const currentSharedSmallModel = process.env.OPENAI_SMALL_MODEL ?? process.env.SMALL_MODEL;
433
+ const currentSharedLargeModel = process.env.OPENAI_LARGE_MODEL ?? process.env.LARGE_MODEL;
434
+ setEnvIfMissing("GROQ_SMALL_MODEL", currentSharedSmallModel && !isLikelyOpenAiTextModel(currentSharedSmallModel)
435
+ ? currentSharedSmallModel
436
+ : "openai/gpt-oss-120b");
437
+ setEnvIfMissing("GROQ_LARGE_MODEL", currentSharedLargeModel && !isLikelyOpenAiTextModel(currentSharedLargeModel)
438
+ ? currentSharedLargeModel
439
+ : "openai/gpt-oss-120b");
440
+ logger.info(`[eliza] Configured local embedding env: ${process.env.LOCAL_EMBEDDING_MODEL} (repo: ${process.env.LOCAL_EMBEDDING_MODEL_REPO ?? "auto"}, dims: ${process.env.LOCAL_EMBEDDING_DIMENSIONS ?? "auto"}, ctx: ${process.env.LOCAL_EMBEDDING_CONTEXT_SIZE ?? "auto"}, GPU: ${process.env.LOCAL_EMBEDDING_GPU_LAYERS}, mmap: ${process.env.LOCAL_EMBEDDING_USE_MMAP})`);
441
+ }
442
+ // ---------------------------------------------------------------------------
443
+ // Helpers
444
+ // ---------------------------------------------------------------------------
445
+ function trimEnvString(value) {
446
+ if (typeof value !== "string")
447
+ return undefined;
448
+ const trimmed = value.trim();
449
+ return trimmed.length > 0 ? trimmed : undefined;
450
+ }
451
+ function getMutableConfigEnv(config) {
452
+ if (!config.env ||
453
+ typeof config.env !== "object" ||
454
+ Array.isArray(config.env)) {
455
+ return null;
456
+ }
457
+ return config.env;
458
+ }
459
+ function getMutableConfigEnvVars(configEnv) {
460
+ if (!configEnv.vars ||
461
+ typeof configEnv.vars !== "object" ||
462
+ Array.isArray(configEnv.vars)) {
463
+ return null;
464
+ }
465
+ return configEnv.vars;
466
+ }
467
+ function readConfigEnvValue(config, key) {
468
+ const configEnv = getMutableConfigEnv(config);
469
+ if (!configEnv)
470
+ return undefined;
471
+ const vars = getMutableConfigEnvVars(configEnv);
472
+ return trimEnvString(vars?.[key]) ?? trimEnvString(configEnv[key]);
473
+ }
474
+ function readEffectiveEnvValue(config, key, env = process.env) {
475
+ return trimEnvString(env[key]) ?? readConfigEnvValue(config, key);
476
+ }
477
+ function setConfigEnvValue(config, key, value) {
478
+ if (!config.env ||
479
+ typeof config.env !== "object" ||
480
+ Array.isArray(config.env)) {
481
+ config.env = {};
482
+ }
483
+ const configEnv = config.env;
484
+ const vars = getMutableConfigEnvVars(configEnv);
485
+ if (vars) {
486
+ vars[key] = value;
487
+ delete configEnv[key];
488
+ return;
489
+ }
490
+ configEnv[key] = value;
491
+ }
492
+ function deleteConfigEnvValue(config, key) {
493
+ const configEnv = getMutableConfigEnv(config);
494
+ if (!configEnv)
495
+ return;
496
+ const vars = getMutableConfigEnvVars(configEnv);
497
+ if (vars) {
498
+ delete vars[key];
499
+ if (Object.keys(vars).length === 0) {
500
+ delete configEnv.vars;
501
+ }
502
+ }
503
+ delete configEnv[key];
504
+ }
505
+ function detectOpenAiBaseUrlProvider(baseUrl) {
506
+ try {
507
+ const hostname = new URL(baseUrl).hostname.trim().toLowerCase();
508
+ if (hostname === "api.groq.com" || hostname.endsWith(".groq.com")) {
509
+ return "groq";
510
+ }
511
+ }
512
+ catch {
513
+ return null;
514
+ }
515
+ return null;
516
+ }
517
+ function looksLikeGroqApiKey(value) {
518
+ return Boolean(value && /^gsk[-_]/i.test(value));
519
+ }
520
+ function isLikelyOpenAiTextModel(value) {
521
+ if (!value)
522
+ return false;
523
+ const normalized = value.trim().toLowerCase();
524
+ return normalized.startsWith("gpt-") || normalized.startsWith("openai/");
525
+ }
526
+ /**
527
+ * Normalize known-bad provider compatibility shims before plugin resolution.
528
+ *
529
+ * A common failure mode is routing the OpenAI plugin through Groq's
530
+ * OpenAI-compatible base URL while leaving OpenAI defaults (`gpt-5.5`,
531
+ * `gpt-5-mini`) in place. Structured output generation then fails during
532
+ * message handling because Groq does not serve those model IDs.
533
+ *
534
+ * When we can confidently detect that state, rewrite the effective runtime
535
+ * config to use the Groq plugin directly.
536
+ */
537
+ /** @internal Exported for testing. */
538
+ export function normalizeOpenAiCompatibleProviderConfig(config, env = process.env) {
539
+ const cloudInferenceEnabled = resolveElizaCloudTopology(config).services.inference;
540
+ if (cloudInferenceEnabled) {
541
+ return false;
542
+ }
543
+ const openaiBaseUrl = readEffectiveEnvValue(config, "OPENAI_BASE_URL", env);
544
+ if (!openaiBaseUrl) {
545
+ return false;
546
+ }
547
+ if (detectOpenAiBaseUrlProvider(openaiBaseUrl) !== "groq") {
548
+ return false;
549
+ }
550
+ const openaiApiKey = readEffectiveEnvValue(config, "OPENAI_API_KEY", env);
551
+ const groqApiKey = readEffectiveEnvValue(config, "GROQ_API_KEY", env);
552
+ const inheritedGroqApiKey = groqApiKey ??
553
+ (looksLikeGroqApiKey(openaiApiKey) ? openaiApiKey : undefined);
554
+ if (!inheritedGroqApiKey) {
555
+ return false;
556
+ }
557
+ const currentGroqSmallModel = readEffectiveEnvValue(config, "GROQ_SMALL_MODEL", env);
558
+ const currentGroqLargeModel = readEffectiveEnvValue(config, "GROQ_LARGE_MODEL", env);
559
+ const currentSharedSmallModel = readEffectiveEnvValue(config, "OPENAI_SMALL_MODEL", env) ??
560
+ readEffectiveEnvValue(config, "SMALL_MODEL", env);
561
+ const currentSharedLargeModel = readEffectiveEnvValue(config, "OPENAI_LARGE_MODEL", env) ??
562
+ readEffectiveEnvValue(config, "LARGE_MODEL", env);
563
+ const normalizedGroqSmallModel = currentGroqSmallModel ??
564
+ (currentSharedSmallModel &&
565
+ !isLikelyOpenAiTextModel(currentSharedSmallModel)
566
+ ? currentSharedSmallModel
567
+ : "openai/gpt-oss-120b");
568
+ const normalizedGroqLargeModel = currentGroqLargeModel ??
569
+ (currentSharedLargeModel &&
570
+ !isLikelyOpenAiTextModel(currentSharedLargeModel)
571
+ ? currentSharedLargeModel
572
+ : "openai/gpt-oss-120b");
573
+ env.GROQ_API_KEY = inheritedGroqApiKey;
574
+ env.GROQ_SMALL_MODEL = normalizedGroqSmallModel;
575
+ env.GROQ_LARGE_MODEL = normalizedGroqLargeModel;
576
+ setConfigEnvValue(config, "GROQ_API_KEY", inheritedGroqApiKey);
577
+ setConfigEnvValue(config, "GROQ_SMALL_MODEL", normalizedGroqSmallModel);
578
+ setConfigEnvValue(config, "GROQ_LARGE_MODEL", normalizedGroqLargeModel);
579
+ delete env.OPENAI_BASE_URL;
580
+ deleteConfigEnvValue(config, "OPENAI_BASE_URL");
581
+ const shouldDisableOpenAiKey = !openaiApiKey ||
582
+ openaiApiKey === groqApiKey ||
583
+ looksLikeGroqApiKey(openaiApiKey);
584
+ if (shouldDisableOpenAiKey) {
585
+ delete env.OPENAI_API_KEY;
586
+ deleteConfigEnvValue(config, "OPENAI_API_KEY");
587
+ }
588
+ const primaryModel = trimEnvString(config.agents?.defaults?.model?.primary);
589
+ if (shouldDisableOpenAiKey &&
590
+ primaryModel &&
591
+ (primaryModel.toLowerCase() === "openai" ||
592
+ isLikelyOpenAiTextModel(primaryModel))) {
593
+ config.agents ??= {};
594
+ config.agents.defaults ??= {};
595
+ config.agents.defaults.model = {
596
+ ...config.agents.defaults.model,
597
+ primary: "groq",
598
+ };
599
+ }
600
+ logger.warn("[eliza] Detected Groq routed through OPENAI_BASE_URL; normalizing runtime settings to use @elizaos/plugin-groq");
601
+ return true;
602
+ }
603
+ /** Redact username segments from filesystem paths to avoid leaking user info in logs. */
604
+ function _redactUserSegments(filepath) {
605
+ // Replace /Users/<name>/ or /home/<name>/ with /Users/<redacted>/ etc.
606
+ return filepath.replace(/\/(Users|home)\/[^/]+\//g, "/$1/<redacted>/");
607
+ }
608
+ /**
609
+ * Best-effort runtime shutdown that also closes the database adapter.
610
+ *
611
+ * AgentRuntime.stop() only stops services. plugin-sql keeps a process-global
612
+ * PGlite manager, so restarts must close the adapter or the next runtime can
613
+ * silently reuse the same broken manager instance.
614
+ */
615
+ export async function shutdownRuntime(runtime, context) {
616
+ if (!runtime)
617
+ return;
618
+ const adapter = runtime.adapter;
619
+ let firstError = null;
620
+ try {
621
+ await runtime.stop();
622
+ }
623
+ catch (err) {
624
+ firstError = err;
625
+ logger.warn(`[eliza] ${context}: runtime stop failed: ${formatError(err)}`);
626
+ }
627
+ if (adapter && typeof adapter.close === "function") {
628
+ try {
629
+ await adapter.close();
630
+ }
631
+ catch (err) {
632
+ if (!firstError) {
633
+ firstError = err;
634
+ }
635
+ logger.warn(`[eliza] ${context}: database adapter close failed: ${formatError(err)}`);
636
+ }
637
+ }
638
+ if (firstError) {
639
+ throw firstError;
640
+ }
641
+ }
642
+ /**
643
+ * Remove duplicate actions across an ordered list of plugins.
644
+ *
645
+ * When multiple plugins define an action with the same `name`, only the first
646
+ * occurrence is kept. This prevents "Action already registered" warnings from
647
+ * elizaOS core. The function mutates each plugin's `actions` array in-place.
648
+ */
649
+ export function deduplicatePluginActions(plugins) {
650
+ const seen = new Set();
651
+ for (const plugin of plugins) {
652
+ if (plugin.actions) {
653
+ plugin.actions = plugin.actions.filter((action) => {
654
+ if (seen.has(action.name)) {
655
+ logger.debug(`[eliza] Skipping duplicate action "${action.name}" from plugin "${plugin.name}"`);
656
+ return false;
657
+ }
658
+ seen.add(action.name);
659
+ return true;
660
+ });
661
+ }
662
+ }
663
+ }
664
+ /**
665
+ * Retrieve the AutonomyService from the runtime, returning null if unavailable.
666
+ * Uses a runtime property check to safely narrow the opaque Service return.
667
+ */
668
+ function getAutonomyService(runtime) {
669
+ const svc = runtime.getService("AUTONOMY") ?? runtime.getService("autonomy");
670
+ if (svc &&
671
+ "enableAutonomy" in svc &&
672
+ typeof svc.enableAutonomy === "function") {
673
+ return svc;
674
+ }
675
+ return null;
676
+ }
677
+ async function startAndRegisterAutonomyService(runtime) {
678
+ const service = await AutonomyService.start(runtime);
679
+ runtime.services.set("AUTONOMY", [service]);
680
+ return service;
681
+ }
682
+ async function waitForTrajectoriesService(runtime, context, timeoutMs = 3000) {
683
+ if (!runtimeTrajectoriesEnabled(runtime)) {
684
+ return;
685
+ }
686
+ const runtimeLike = runtime;
687
+ // Check if already available
688
+ if (typeof runtimeLike.getService === "function") {
689
+ const existing = runtimeLike.getService("trajectories");
690
+ if (existing)
691
+ return;
692
+ }
693
+ const registrationStatus = typeof runtimeLike.getServiceRegistrationStatus === "function"
694
+ ? runtimeLike.getServiceRegistrationStatus("trajectories")
695
+ : "unknown";
696
+ if (registrationStatus !== "pending" &&
697
+ registrationStatus !== "registering") {
698
+ return;
699
+ }
700
+ if (typeof runtimeLike.getServiceLoadPromise !== "function")
701
+ return;
702
+ let timedOut = false;
703
+ let timeoutHandle;
704
+ const timeoutPromise = new Promise((resolve) => {
705
+ timeoutHandle = setTimeout(() => {
706
+ timedOut = true;
707
+ resolve();
708
+ }, timeoutMs);
709
+ });
710
+ try {
711
+ await Promise.race([
712
+ runtimeLike.getServiceLoadPromise("trajectories").then(() => { }),
713
+ timeoutPromise,
714
+ ]);
715
+ if (timedOut) {
716
+ logger.debug(`[eliza] trajectories still ${registrationStatus} after ${timeoutMs}ms (${context})`);
717
+ }
718
+ }
719
+ catch (err) {
720
+ logger.debug(`[eliza] trajectories registration failed while waiting (${context}): ${formatError(err)}`);
721
+ }
722
+ finally {
723
+ if (timeoutHandle)
724
+ clearTimeout(timeoutHandle);
725
+ }
726
+ }
727
+ function ensureTrajectoryLoggerEnabled(runtime, context) {
728
+ if (!runtimeTrajectoriesEnabled(runtime)) {
729
+ logger.info(`[eliza] Native trajectories disabled (${context})`);
730
+ return;
731
+ }
732
+ const trajectoryLogger = runtime.getService("trajectories");
733
+ if (!trajectoryLogger) {
734
+ logger.warn(`[eliza] trajectories service unavailable (${context}); trajectory capture disabled`);
735
+ return;
736
+ }
737
+ const isEnabled = typeof trajectoryLogger.isEnabled === "function"
738
+ ? trajectoryLogger.isEnabled()
739
+ : shouldEnableTrajectoryLoggingByDefault();
740
+ const shouldEnable = shouldEnableTrajectoryLoggingByDefault();
741
+ if (isEnabled !== shouldEnable &&
742
+ typeof trajectoryLogger.setEnabled === "function") {
743
+ trajectoryLogger.setEnabled(shouldEnable);
744
+ logger.info(`[eliza] trajectories defaulted ${shouldEnable ? "on" : "off"} (${context})`);
745
+ }
746
+ }
747
+ async function installPromptOptimizationLayer(runtime, context, config) {
748
+ try {
749
+ const { installPromptOptimizations } = await import("./prompt-optimization.js");
750
+ installPromptOptimizations(runtime, config);
751
+ }
752
+ catch (err) {
753
+ logger.warn(`[eliza] Failed to install prompt optimizations (${context}): ${err instanceof Error ? err.message : err}`);
754
+ }
755
+ }
756
+ async function prepareRuntimeForTrajectoryCapture(runtime, context, config) {
757
+ await waitForTrajectoriesService(runtime, context);
758
+ ensureTrajectoryLoggerEnabled(runtime, context);
759
+ await installPromptOptimizationLayer(runtime, context, config);
760
+ }
761
+ // ---------------------------------------------------------------------------
762
+ // Channel secret mapping
763
+ // ---------------------------------------------------------------------------
764
+ /**
765
+ * Maps Eliza channel config fields to the environment variable names
766
+ * that elizaOS plugins expect.
767
+ *
768
+ * Eliza stores channel credentials under `config.channels.<name>.<field>`,
769
+ * while elizaOS plugins read them from process.env.
770
+ */
771
+ const CHANNEL_ENV_MAP = CONNECTOR_ENV_MAP;
772
+ // ---------------------------------------------------------------------------
773
+ // Plugin resolution
774
+ // ---------------------------------------------------------------------------
775
+ export { CORE_PLUGINS, OPTIONAL_CORE_PLUGINS };
776
+ /**
777
+ * Optional plugins that require native binaries or specific config.
778
+ * These are only loaded when explicitly enabled via features config,
779
+ * NOT by default — they crash if their prerequisites are missing.
780
+ */
781
+ const _OPTIONAL_NATIVE_PLUGINS = [
782
+ "@elizaos/plugin-browser", // requires browser server binary
783
+ "@elizaos/plugin-vision", // requires @tensorflow/tfjs-node native addon
784
+ "@elizaos/plugin-computeruse", // requires platform-specific binaries
785
+ ];
786
+ // CHANNEL_PLUGIN_MAP, PROVIDER_PLUGIN_MAP, and OPTIONAL_PLUGIN_MAP live in
787
+ // ./plugin-collector.ts and are re-exported from this module for backward compatibility.
788
+ // ---------------------------------------------------------------------------
789
+ // Custom / drop-in plugin discovery (moved to plugin-types.ts)
790
+ // ---------------------------------------------------------------------------
791
+ // ---------------------------------------------------------------------------
792
+ // Plugin resolution
793
+ // ---------------------------------------------------------------------------
794
+ // ---------------------------------------------------------------------------
795
+ // Browser server pre-flight
796
+ // ---------------------------------------------------------------------------
797
+ /**
798
+ * Returns true if the given env var key is safe to forward to runtime.settings.
799
+ * Blocks blockchain private keys, secrets, passwords, tokens, credentials,
800
+ * mnemonics, and seed phrases while allowing API keys that plugins need.
801
+ */
802
+ export function isEnvKeyAllowedForForwarding(key) {
803
+ const upper = key.toUpperCase();
804
+ if (upper === "ALLOW_NO_DATABASE")
805
+ return false;
806
+ // Block blockchain private keys
807
+ if (upper.includes("PRIVATE_KEY"))
808
+ return false;
809
+ if (upper.startsWith("EVM_") || upper.startsWith("SOLANA_"))
810
+ return false;
811
+ // Block secrets, passwords, tokens, and seed phrases (but not API_KEY which plugins need)
812
+ if (/(SECRET|PASSWORD|CREDENTIAL|MNEMONIC|SEED_PHRASE)/i.test(key))
813
+ return false;
814
+ if (/(ACCESS_TOKEN|REFRESH_TOKEN|SESSION_TOKEN|AUTH_TOKEN)$/i.test(key))
815
+ return false;
816
+ // Block elizaCloud connection keys — these must only come from config.cloud
817
+ // via applyCloudConfigToEnv(). Forwarding them from config.env.vars into
818
+ // runtime.settings would let a stale env-var shadow the live cloud key that
819
+ // the app sets when the user connects through the UI.
820
+ if (upper === "ELIZAOS_CLOUD_API_KEY" ||
821
+ upper === "ELIZAOS_CLOUD_ENABLED" ||
822
+ upper === "ELIZAOS_CLOUD_BASE_URL" ||
823
+ upper === "ELIZAOS_CLOUD_NANO_MODEL" ||
824
+ upper === "ELIZAOS_CLOUD_MEDIUM_MODEL" ||
825
+ upper === "ELIZAOS_CLOUD_SMALL_MODEL" ||
826
+ upper === "ELIZAOS_CLOUD_LARGE_MODEL" ||
827
+ upper === "ELIZAOS_CLOUD_MEGA_MODEL" ||
828
+ upper === "ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL" ||
829
+ upper === "ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL" ||
830
+ upper === "ELIZAOS_CLOUD_ACTION_PLANNER_MODEL" ||
831
+ upper === "ELIZAOS_CLOUD_PLANNER_MODEL")
832
+ return false;
833
+ return true;
834
+ }
835
+ function assertPersistentDatabaseRequired(runtime) {
836
+ const raw = runtime.getSetting("ALLOW_NO_DATABASE") ?? process.env.ALLOW_NO_DATABASE;
837
+ const normalized = String(raw ?? "")
838
+ .trim()
839
+ .toLowerCase();
840
+ if (normalized === "true" ||
841
+ normalized === "1" ||
842
+ normalized === "yes" ||
843
+ normalized === "on") {
844
+ throw new Error(`Eliza requires persistent database storage and does not permit ALLOW_NO_DATABASE (agent ${runtime.agentId}). Remove ALLOW_NO_DATABASE from config/env and use @elizaos/plugin-sql.`);
845
+ }
846
+ }
847
+ function isElizaCloudManagedProcessEnvKey(key) {
848
+ const upper = key.toUpperCase();
849
+ return (upper === "ELIZAOS_CLOUD_API_KEY" ||
850
+ upper === "ELIZAOS_CLOUD_ENABLED" ||
851
+ upper === "ELIZAOS_CLOUD_BASE_URL" ||
852
+ upper === "ELIZAOS_CLOUD_NANO_MODEL" ||
853
+ upper === "ELIZAOS_CLOUD_MEDIUM_MODEL" ||
854
+ upper === "ELIZAOS_CLOUD_SMALL_MODEL" ||
855
+ upper === "ELIZAOS_CLOUD_LARGE_MODEL" ||
856
+ upper === "ELIZAOS_CLOUD_MEGA_MODEL" ||
857
+ upper === "ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL" ||
858
+ upper === "ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL" ||
859
+ upper === "ELIZAOS_CLOUD_ACTION_PLANNER_MODEL" ||
860
+ upper === "ELIZAOS_CLOUD_PLANNER_MODEL");
861
+ }
862
+ // findPluginBrowserStagehandDir, ensureBrowserServerLink,
863
+ // repairBrokenInstallRecord, resolvePackageEntry — moved to plugin-types.ts
864
+ // ---------------------------------------------------------------------------
865
+ // Config → Character mapping
866
+ // ---------------------------------------------------------------------------
867
+ /**
868
+ * Propagate channel credentials from Eliza config into process.env so
869
+ * that elizaOS plugins can find them.
870
+ */
871
+ /** @internal Exported for testing. */
872
+ export function applyConnectorSecretsToEnv(config) {
873
+ // Prefer config.connectors, fall back to config.channels for backward compatibility
874
+ const connectors = config.connectors ?? config.channels ?? {};
875
+ for (const [channelName, channelConfig] of Object.entries(connectors)) {
876
+ if (!channelConfig || typeof channelConfig !== "object")
877
+ continue;
878
+ const configObj = channelConfig;
879
+ // Discord plugins in the ecosystem use both DISCORD_API_TOKEN and
880
+ // DISCORD_BOT_TOKEN across versions. Mirror to both when available.
881
+ if (channelName === "discord") {
882
+ const tokenValue = (typeof configObj.token === "string" && configObj.token.trim()) ||
883
+ (typeof configObj.botToken === "string" && configObj.botToken.trim()) ||
884
+ "";
885
+ if (tokenValue) {
886
+ process.env.DISCORD_API_TOKEN = tokenValue;
887
+ process.env.DISCORD_BOT_TOKEN = tokenValue;
888
+ }
889
+ }
890
+ const envMap = CHANNEL_ENV_MAP[channelName];
891
+ if (!envMap)
892
+ continue;
893
+ for (const [configField, envKey] of Object.entries(envMap)) {
894
+ const value = configObj[configField];
895
+ if (typeof value === "boolean" || typeof value === "number") {
896
+ process.env[envKey] = String(value);
897
+ }
898
+ else if (typeof value === "string" && value.trim()) {
899
+ process.env[envKey] = value;
900
+ }
901
+ }
902
+ if (channelName === "whatsapp") {
903
+ const allowFrom = configObj.allowFrom;
904
+ if (Array.isArray(allowFrom) && allowFrom.length > 0) {
905
+ const normalized = allowFrom
906
+ .map((value) => String(value).trim())
907
+ .filter(Boolean);
908
+ if (normalized.length > 0) {
909
+ process.env.WHATSAPP_ALLOW_FROM = normalized.join(",");
910
+ }
911
+ }
912
+ const groupAllowFrom = configObj.groupAllowFrom;
913
+ if (Array.isArray(groupAllowFrom) && groupAllowFrom.length > 0) {
914
+ const normalized = groupAllowFrom
915
+ .map((value) => String(value).trim())
916
+ .filter(Boolean);
917
+ if (normalized.length > 0) {
918
+ process.env.WHATSAPP_GROUP_ALLOW_FROM = normalized.join(",");
919
+ }
920
+ }
921
+ const accounts = configObj.accounts;
922
+ if (accounts &&
923
+ typeof accounts === "object" &&
924
+ !Array.isArray(accounts)) {
925
+ const firstEnabledAccount = Object.values(accounts).find((account) => {
926
+ if (!account ||
927
+ typeof account !== "object" ||
928
+ Array.isArray(account)) {
929
+ return false;
930
+ }
931
+ const candidate = account;
932
+ return (candidate.enabled !== false && typeof candidate.authDir === "string");
933
+ });
934
+ if (firstEnabledAccount &&
935
+ typeof firstEnabledAccount.authDir === "string" &&
936
+ firstEnabledAccount.authDir.trim()) {
937
+ process.env.WHATSAPP_AUTH_DIR = firstEnabledAccount.authDir.trim();
938
+ }
939
+ }
940
+ }
941
+ }
942
+ }
943
+ /**
944
+ * Auto-resolve Discord Application ID from the bot token via Discord API.
945
+ * Called during async runtime init so that users only need a bot token.
946
+ */
947
+ /** @internal Exported for testing. */
948
+ export async function autoResolveDiscordAppId() {
949
+ if (process.env.DISCORD_APPLICATION_ID)
950
+ return;
951
+ const discordToken = process.env.DISCORD_API_TOKEN || process.env.DISCORD_BOT_TOKEN;
952
+ if (!discordToken)
953
+ return;
954
+ try {
955
+ const res = await fetch("https://discord.com/api/v10/oauth2/applications/@me", { headers: { Authorization: `Bot ${discordToken}` } });
956
+ if (!res.ok) {
957
+ logger.warn(`[eliza] Failed to auto-resolve Discord Application ID: ${res.status}`);
958
+ return;
959
+ }
960
+ const app = (await res.json());
961
+ if (!app.id)
962
+ return;
963
+ process.env.DISCORD_APPLICATION_ID = app.id;
964
+ logger.info(`[eliza] Auto-resolved Discord Application ID: ${app.id}`);
965
+ }
966
+ catch (err) {
967
+ logger.warn(`[eliza] Could not auto-resolve Discord Application ID: ${err}`);
968
+ }
969
+ }
970
+ /**
971
+ * Fetch GitHub OAuth token from cloud if available and no local token is set.
972
+ * Called during async runtime init after cloud config is applied.
973
+ *
974
+ * Flow: If the agent has a managed GitHub connection in the cloud, and no
975
+ * local GITHUB_TOKEN is set, fetch the OAuth token from the cloud API and
976
+ * inject it into process.env so plugins (plugin-github, git-workspace-service)
977
+ * can use it for API calls and git credential helpers.
978
+ */
979
+ /** @internal Exported for testing. */
980
+ export async function autoFetchCloudGithubToken(agentId) {
981
+ // Skip if a local token is already configured
982
+ if (process.env.GITHUB_TOKEN || process.env.GITHUB_PAT)
983
+ return;
984
+ // Need cloud credentials and an agent ID
985
+ const cloudApiKey = process.env.ELIZAOS_CLOUD_API_KEY?.trim();
986
+ const cloudBaseUrl = process.env.ELIZAOS_CLOUD_BASE_URL?.trim() || "https://api.elizacloud.ai";
987
+ if (!cloudApiKey || !agentId)
988
+ return;
989
+ const managedNs = process.env.ELIZA_CLOUD_MANAGED_AGENTS_API_SEGMENT?.trim();
990
+ if (!managedNs)
991
+ return;
992
+ try {
993
+ const url = `${cloudBaseUrl}/api/v1/${managedNs}/agents/${encodeURIComponent(agentId)}/github/token`;
994
+ const res = await fetch(url, {
995
+ headers: {
996
+ Authorization: `Bearer ${cloudApiKey}`,
997
+ Accept: "application/json",
998
+ },
999
+ signal: AbortSignal.timeout(10_000),
1000
+ });
1001
+ if (!res.ok) {
1002
+ // 404 = no GitHub connection for this agent, which is fine
1003
+ if (res.status !== 404) {
1004
+ logger.warn(`[eliza] Failed to fetch cloud GitHub token: ${res.status}`);
1005
+ }
1006
+ return;
1007
+ }
1008
+ const body = (await res.json());
1009
+ if (!body.success || !body.data?.accessToken)
1010
+ return;
1011
+ process.env.GITHUB_TOKEN = body.data.accessToken;
1012
+ logger.info(`[eliza] Fetched GitHub token from cloud for @${body.data.githubUsername || "unknown"}`);
1013
+ }
1014
+ catch (err) {
1015
+ logger.warn(`[eliza] Could not fetch cloud GitHub token: ${err}`);
1016
+ }
1017
+ }
1018
+ /**
1019
+ * Propagate cloud config from Eliza config into process.env so the
1020
+ * ElizaCloud plugin can discover settings at startup.
1021
+ */
1022
+ export function applyCloudConfigToEnv(config) {
1023
+ migrateLegacyRuntimeConfig(config);
1024
+ const cloud = config.cloud;
1025
+ const isCloudContainer = process.env.ELIZA_CLOUD_PROVISIONED === "1";
1026
+ if (!cloud && !isCloudContainer)
1027
+ return;
1028
+ const topology = resolveElizaCloudTopology(config);
1029
+ // Cloud inference is selected from the canonical onboarding connection, not
1030
+ // just from raw cloud flags. This keeps linked cloud auth from re-enabling
1031
+ // Eliza Cloud after the user has switched to a local or remote provider.
1032
+ const effectivelyEnabled = topology.services.inference || isCloudContainer;
1033
+ const shouldLoadCloudPlugin = topology.shouldLoadPlugin || isCloudContainer;
1034
+ const setCloudUsageEnv = (key, enabled) => {
1035
+ if (enabled) {
1036
+ process.env[key] = "true";
1037
+ }
1038
+ else {
1039
+ delete process.env[key];
1040
+ }
1041
+ };
1042
+ if (isElizaSettingsDebugEnabled()) {
1043
+ const c = (cloud ?? {});
1044
+ logger.debug(`[eliza][settings][runtime] applyCloudConfigToEnv inference=${effectivelyEnabled} shouldLoadPlugin=${shouldLoadCloudPlugin} isCloudContainer=${isCloudContainer} cloud=${JSON.stringify(settingsDebugCloudSummary(c))}`);
1045
+ }
1046
+ setCloudUsageEnv("ELIZAOS_CLOUD_USE_INFERENCE", effectivelyEnabled);
1047
+ setCloudUsageEnv("ELIZAOS_CLOUD_USE_TTS", topology.services.tts || isCloudContainer);
1048
+ setCloudUsageEnv("ELIZAOS_CLOUD_USE_MEDIA", topology.services.media);
1049
+ setCloudUsageEnv("ELIZAOS_CLOUD_USE_EMBEDDINGS", topology.services.embeddings);
1050
+ setCloudUsageEnv("ELIZAOS_CLOUD_USE_RPC", topology.services.rpc);
1051
+ if (effectivelyEnabled) {
1052
+ process.env.ELIZAOS_CLOUD_ENABLED = "true";
1053
+ }
1054
+ else {
1055
+ delete process.env.ELIZAOS_CLOUD_ENABLED;
1056
+ }
1057
+ if (shouldLoadCloudPlugin) {
1058
+ logger.info(`[eliza] Cloud config: inference=${topology.services.inference}, runtime=${topology.runtime}, hasApiKey=${Boolean(cloud?.apiKey || process.env.ELIZAOS_CLOUD_API_KEY)}, baseUrl=${cloud?.baseUrl ?? "(default)"}, isCloudContainer=${isCloudContainer}`);
1059
+ // Only propagate the API key when cloud is enabled AND it is a real
1060
+ // credential — never set the literal "[REDACTED]" placeholder (which can
1061
+ // leak into the config via UI round-trips through the redacted GET → PUT
1062
+ // cycle). WHY: when enabled is false (BYOK / disconnected), leaving the key
1063
+ // in process.env still auto-loads @elizaos/plugin-elizacloud and steals
1064
+ // TEXT_LARGE even if the JSON says cloud is off.
1065
+ const isRealApiKey = cloud?.apiKey && cloud.apiKey.trim().toUpperCase() !== "[REDACTED]";
1066
+ if (isRealApiKey) {
1067
+ process.env.ELIZAOS_CLOUD_API_KEY = cloud.apiKey;
1068
+ }
1069
+ else if (!isCloudContainer) {
1070
+ delete process.env.ELIZAOS_CLOUD_API_KEY;
1071
+ }
1072
+ if (cloud?.baseUrl) {
1073
+ process.env.ELIZAOS_CLOUD_BASE_URL = cloud.baseUrl;
1074
+ }
1075
+ else if (!isCloudContainer) {
1076
+ delete process.env.ELIZAOS_CLOUD_BASE_URL;
1077
+ }
1078
+ }
1079
+ else {
1080
+ delete process.env.ELIZAOS_CLOUD_NANO_MODEL;
1081
+ delete process.env.ELIZAOS_CLOUD_MEDIUM_MODEL;
1082
+ delete process.env.ELIZAOS_CLOUD_SMALL_MODEL;
1083
+ delete process.env.ELIZAOS_CLOUD_LARGE_MODEL;
1084
+ delete process.env.ELIZAOS_CLOUD_MEGA_MODEL;
1085
+ delete process.env.ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL;
1086
+ delete process.env.ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL;
1087
+ delete process.env.ELIZAOS_CLOUD_ACTION_PLANNER_MODEL;
1088
+ delete process.env.ELIZAOS_CLOUD_PLANNER_MODEL;
1089
+ delete process.env.ELIZAOS_CLOUD_API_KEY;
1090
+ delete process.env.ELIZAOS_CLOUD_BASE_URL;
1091
+ }
1092
+ // Propagate model names so the cloud plugin picks them up. Falls back to
1093
+ // sensible defaults when cloud is enabled but no explicit selection exists.
1094
+ // Skip when inferenceMode is "byok"/"local" or services.inference is off —
1095
+ // user's own keys handle models.
1096
+ // If the user chose a subscription provider, treat that as "byok" unless
1097
+ // they explicitly set inferenceMode to "cloud".
1098
+ const llmText = resolveServiceRoutingInConfig(config)?.llmText;
1099
+ const models = config.models;
1100
+ if (effectivelyEnabled) {
1101
+ const nano = llmText?.nanoModel || models?.nano || DEFAULT_ELIZA_CLOUD_TEXT_MODEL;
1102
+ const small = llmText?.smallModel || models?.small || DEFAULT_ELIZA_CLOUD_TEXT_MODEL;
1103
+ const medium = llmText?.mediumModel || models?.medium || small;
1104
+ const large = llmText?.largeModel || models?.large || DEFAULT_ELIZA_CLOUD_TEXT_MODEL;
1105
+ const mega = llmText?.megaModel || models?.mega || large;
1106
+ const responseHandlerModel = llmText?.responseHandlerModel || llmText?.shouldRespondModel;
1107
+ const actionPlannerModel = llmText?.actionPlannerModel || llmText?.plannerModel;
1108
+ process.env.SMALL_MODEL = small;
1109
+ process.env.NANO_MODEL = nano;
1110
+ process.env.MEDIUM_MODEL = medium;
1111
+ process.env.LARGE_MODEL = large;
1112
+ process.env.MEGA_MODEL = mega;
1113
+ if (responseHandlerModel) {
1114
+ process.env.ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL = responseHandlerModel;
1115
+ process.env.ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL = responseHandlerModel;
1116
+ }
1117
+ else {
1118
+ delete process.env.ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL;
1119
+ delete process.env.ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL;
1120
+ }
1121
+ if (actionPlannerModel) {
1122
+ process.env.ELIZAOS_CLOUD_ACTION_PLANNER_MODEL = actionPlannerModel;
1123
+ process.env.ELIZAOS_CLOUD_PLANNER_MODEL = actionPlannerModel;
1124
+ }
1125
+ else {
1126
+ delete process.env.ELIZAOS_CLOUD_ACTION_PLANNER_MODEL;
1127
+ delete process.env.ELIZAOS_CLOUD_PLANNER_MODEL;
1128
+ }
1129
+ process.env.ELIZAOS_CLOUD_NANO_MODEL = nano;
1130
+ process.env.ELIZAOS_CLOUD_MEDIUM_MODEL = medium;
1131
+ process.env.ELIZAOS_CLOUD_SMALL_MODEL = small;
1132
+ process.env.ELIZAOS_CLOUD_LARGE_MODEL = large;
1133
+ process.env.ELIZAOS_CLOUD_MEGA_MODEL = mega;
1134
+ }
1135
+ else if (shouldLoadCloudPlugin) {
1136
+ // Cloud plugin may still be active for non-inference services; keep model
1137
+ // routing local by clearing the cloud model aliases.
1138
+ delete process.env.ELIZAOS_CLOUD_NANO_MODEL;
1139
+ delete process.env.ELIZAOS_CLOUD_MEDIUM_MODEL;
1140
+ delete process.env.ELIZAOS_CLOUD_SMALL_MODEL;
1141
+ delete process.env.ELIZAOS_CLOUD_LARGE_MODEL;
1142
+ delete process.env.ELIZAOS_CLOUD_MEGA_MODEL;
1143
+ delete process.env.ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL;
1144
+ delete process.env.ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL;
1145
+ delete process.env.ELIZAOS_CLOUD_ACTION_PLANNER_MODEL;
1146
+ delete process.env.ELIZAOS_CLOUD_PLANNER_MODEL;
1147
+ delete process.env.NANO_MODEL;
1148
+ delete process.env.MEDIUM_MODEL;
1149
+ delete process.env.SMALL_MODEL;
1150
+ delete process.env.LARGE_MODEL;
1151
+ delete process.env.MEGA_MODEL;
1152
+ }
1153
+ // Propagate per-service disable flags so downstream code can check them
1154
+ // without needing direct access to the ElizaConfig object.
1155
+ if (!topology.services.tts) {
1156
+ process.env.ELIZA_CLOUD_TTS_DISABLED = "true";
1157
+ }
1158
+ else {
1159
+ delete process.env.ELIZA_CLOUD_TTS_DISABLED;
1160
+ }
1161
+ if (!topology.services.media) {
1162
+ process.env.ELIZA_CLOUD_MEDIA_DISABLED = "true";
1163
+ }
1164
+ else {
1165
+ delete process.env.ELIZA_CLOUD_MEDIA_DISABLED;
1166
+ }
1167
+ if (!topology.services.embeddings) {
1168
+ process.env.ELIZA_CLOUD_EMBEDDINGS_DISABLED = "true";
1169
+ }
1170
+ else {
1171
+ delete process.env.ELIZA_CLOUD_EMBEDDINGS_DISABLED;
1172
+ }
1173
+ if (!topology.services.rpc) {
1174
+ process.env.ELIZA_CLOUD_RPC_DISABLED = "true";
1175
+ }
1176
+ else {
1177
+ delete process.env.ELIZA_CLOUD_RPC_DISABLED;
1178
+ }
1179
+ }
1180
+ /**
1181
+ * Translate `config.database` into the environment variables that
1182
+ * `@elizaos/plugin-sql` reads at init time (`POSTGRES_URL`, `PGLITE_DATA_DIR`).
1183
+ *
1184
+ * When the provider is "postgres", we build a connection string from the
1185
+ * credentials (or use the explicit `connectionString` field) and set
1186
+ * `POSTGRES_URL`. When the provider is "pglite" (the default), we set
1187
+ * `PGLITE_DATA_DIR` to either the configured value or the resolved default
1188
+ * workspace (`<workspace>/.eliza/.elizadb`) and remove any stale
1189
+ * `POSTGRES_URL`.
1190
+ */
1191
+ /** @internal Exported for testing. */
1192
+ export function applyX402ConfigToEnv(config) {
1193
+ const x402 = config.x402;
1194
+ if (!x402?.enabled)
1195
+ return;
1196
+ if (!process.env.X402_ENABLED)
1197
+ process.env.X402_ENABLED = "true";
1198
+ if (x402.apiKey && !process.env.X402_API_KEY)
1199
+ process.env.X402_API_KEY = x402.apiKey;
1200
+ if (x402.baseUrl && !process.env.X402_BASE_URL)
1201
+ process.env.X402_BASE_URL = x402.baseUrl;
1202
+ }
1203
+ function resolveDefaultPgliteDataDir(config) {
1204
+ const workspaceDir = config.agents?.defaults?.workspace ?? resolveDefaultAgentWorkspaceDir();
1205
+ return path.join(resolveUserPath(workspaceDir), ".eliza", ".elizadb");
1206
+ }
1207
+ /** @internal Exported for testing. */
1208
+ export function applyDatabaseConfigToEnv(config) {
1209
+ const db = config.database;
1210
+ const provider = db?.provider ?? "pglite";
1211
+ if (provider === "postgres" && db?.postgres) {
1212
+ const pg = db.postgres;
1213
+ let url = pg.connectionString;
1214
+ if (!url) {
1215
+ const host = pg.host ?? "localhost";
1216
+ const port = pg.port ?? 5432;
1217
+ const user = encodeURIComponent(pg.user ?? "postgres");
1218
+ const password = pg.password ? encodeURIComponent(pg.password) : "";
1219
+ const database = pg.database ?? "postgres";
1220
+ const auth = password ? `${user}:${password}` : user;
1221
+ const sslParam = pg.ssl ? "?sslmode=require" : "";
1222
+ url = `postgresql://${auth}@${host}:${port}/${database}${sslParam}`;
1223
+ }
1224
+ process.env.POSTGRES_URL = url;
1225
+ // Clear PGLite dir so plugin-sql does not fall back to PGLite
1226
+ delete process.env.PGLITE_DATA_DIR;
1227
+ }
1228
+ else {
1229
+ // PGLite mode (default): ensure no leftover POSTGRES_URL and pin
1230
+ // PGLite to the workspace path unless overridden by config/env.
1231
+ delete process.env.POSTGRES_URL;
1232
+ const configuredDataDir = db?.pglite?.dataDir?.trim();
1233
+ if (configuredDataDir) {
1234
+ process.env.PGLITE_DATA_DIR = resolveUserPath(configuredDataDir);
1235
+ // Fall through to directory creation below instead of returning early
1236
+ }
1237
+ const envDataDir = process.env.PGLITE_DATA_DIR?.trim();
1238
+ if (!envDataDir) {
1239
+ process.env.PGLITE_DATA_DIR = resolveDefaultPgliteDataDir(config);
1240
+ }
1241
+ // Ensure the PGlite data directory exists before init so PGlite does
1242
+ // not silently fall back to in-memory mode on first run.
1243
+ const dataDir = process.env.PGLITE_DATA_DIR;
1244
+ if (dataDir) {
1245
+ const alreadyExisted = existsSync(dataDir);
1246
+ mkdirSync(dataDir, { recursive: true });
1247
+ logger.info(`[eliza] PGlite data dir: ${dataDir} (${alreadyExisted ? "existed" : "created"})`);
1248
+ // Remove stale postmaster.pid left by a crashed process. Without this,
1249
+ // PGlite sees the lock and either fails or, with explicit destructive
1250
+ // recovery enabled, triggers the resetPgliteDataDir path.
1251
+ cleanStalePglitePid(dataDir);
1252
+ }
1253
+ }
1254
+ }
1255
+ function reconcilePglitePidFile(dataDir) {
1256
+ const pidPath = path.join(dataDir, "postmaster.pid");
1257
+ if (!existsSync(pidPath))
1258
+ return "missing";
1259
+ try {
1260
+ const content = readFileSync(pidPath, "utf-8");
1261
+ const firstLine = content.split("\n")[0]?.trim();
1262
+ const pid = parseInt(firstLine, 10);
1263
+ if (Number.isNaN(pid) || pid <= 0) {
1264
+ // Malformed pid file — remove it
1265
+ unlinkSync(pidPath);
1266
+ logger.info(`[eliza] Removed malformed PGlite postmaster.pid`);
1267
+ return "cleared-malformed";
1268
+ }
1269
+ // Check if the process is still alive
1270
+ try {
1271
+ process.kill(pid, 0); // signal 0 = existence check, doesn't kill
1272
+ // Process exists — pid file is NOT stale, leave it alone
1273
+ logger.info(`[eliza] PGlite postmaster.pid references running process ${pid} — leaving intact`);
1274
+ return "active";
1275
+ }
1276
+ catch (killErr) {
1277
+ const code = killErr.code;
1278
+ if (code === "ESRCH") {
1279
+ // Process doesn't exist — stale pid file, safe to remove
1280
+ unlinkSync(pidPath);
1281
+ logger.info(`[eliza] Removed stale PGlite postmaster.pid (process ${pid} not running)`);
1282
+ return "cleared-stale";
1283
+ }
1284
+ else {
1285
+ // EPERM or other — process may be alive under a different user,
1286
+ // leave the file alone to avoid data directory corruption
1287
+ logger.warn(`[eliza] Cannot confirm postmaster.pid staleness (${code}) — leaving intact`);
1288
+ return "active-unconfirmed";
1289
+ }
1290
+ }
1291
+ }
1292
+ catch (err) {
1293
+ logger.warn(`[eliza] Failed to check PGlite postmaster.pid: ${formatError(err)}`);
1294
+ return "check-failed";
1295
+ }
1296
+ }
1297
+ /**
1298
+ * Check for and remove a stale postmaster.pid in the PGlite data directory.
1299
+ * The pid file is stale if the recorded process is no longer running.
1300
+ */
1301
+ export function cleanStalePglitePid(dataDir) {
1302
+ try {
1303
+ reconcilePglitePidFile(dataDir);
1304
+ }
1305
+ catch (err) {
1306
+ logger.warn(`[eliza] PGlite PID reconciliation failed: ${err}`);
1307
+ }
1308
+ }
1309
+ function collectErrorMessages(err) {
1310
+ const messages = [];
1311
+ const seen = new Set();
1312
+ let current = err;
1313
+ while (current && !seen.has(current)) {
1314
+ seen.add(current);
1315
+ if (typeof current === "string") {
1316
+ messages.push(current);
1317
+ break;
1318
+ }
1319
+ if (current instanceof Error) {
1320
+ if (current.message)
1321
+ messages.push(current.message);
1322
+ if (current.stack)
1323
+ messages.push(current.stack);
1324
+ current = current.cause;
1325
+ continue;
1326
+ }
1327
+ if (typeof current === "object") {
1328
+ const maybeErr = current;
1329
+ if (typeof maybeErr.message === "string" && maybeErr.message) {
1330
+ messages.push(maybeErr.message);
1331
+ }
1332
+ if (maybeErr.cause !== undefined) {
1333
+ current = maybeErr.cause;
1334
+ continue;
1335
+ }
1336
+ }
1337
+ break;
1338
+ }
1339
+ return messages;
1340
+ }
1341
+ function isPgliteLockError(err) {
1342
+ const haystack = collectErrorMessages(err).join("\n").toLowerCase();
1343
+ if (!haystack)
1344
+ return false;
1345
+ const hasPglite = haystack.includes("pglite");
1346
+ const hasSqlite = haystack.includes("sqlite");
1347
+ const hasLockSignal = haystack.includes("database is locked") ||
1348
+ haystack.includes("lock file already exists");
1349
+ return hasLockSignal && (hasPglite || hasSqlite);
1350
+ }
1351
+ /** @internal Exported for testing. */
1352
+ export function isRecoverablePgliteInitError(err) {
1353
+ const code = getPgliteErrorCode(err);
1354
+ if (code === PGLITE_ERROR_CODES.ACTIVE_LOCK ||
1355
+ code === PGLITE_ERROR_CODES.CORRUPT_DATA ||
1356
+ code === PGLITE_ERROR_CODES.MANUAL_RESET_REQUIRED) {
1357
+ return true;
1358
+ }
1359
+ const haystack = collectErrorMessages(err).join("\n").toLowerCase();
1360
+ if (!haystack)
1361
+ return false;
1362
+ const hasAbort = haystack.includes("aborted(). build with -sassertions");
1363
+ const hasPglite = haystack.includes("pglite");
1364
+ const _hasSqlite = haystack.includes("sqlite");
1365
+ const hasMigrationsSchema = haystack.includes("create schema if not exists migrations") ||
1366
+ haystack.includes("failed query: create schema if not exists migrations");
1367
+ const hasRecoverableStorageSignal = [
1368
+ "database disk image is malformed",
1369
+ "file is not a database",
1370
+ "malformed database schema",
1371
+ "database is locked",
1372
+ "lock file already exists",
1373
+ "wal file",
1374
+ "checkpoint failed",
1375
+ "checksum mismatch",
1376
+ "corrupt",
1377
+ "could not read blocks",
1378
+ "read only ",
1379
+ "unreachable code should not be executed",
1380
+ "_pgl_backend",
1381
+ ].some((needle) => haystack.includes(needle));
1382
+ if (hasMigrationsSchema)
1383
+ return true;
1384
+ if (hasAbort && hasPglite)
1385
+ return true;
1386
+ if (hasRecoverableStorageSignal)
1387
+ return true;
1388
+ return false;
1389
+ }
1390
+ /** @internal Exported for testing. */
1391
+ export function getPgliteRecoveryAction(err, dataDir) {
1392
+ const code = getPgliteErrorCode(err);
1393
+ if (code === PGLITE_ERROR_CODES.ACTIVE_LOCK) {
1394
+ return "fail-active-lock";
1395
+ }
1396
+ if (code === PGLITE_ERROR_CODES.CORRUPT_DATA ||
1397
+ code === PGLITE_ERROR_CODES.MANUAL_RESET_REQUIRED) {
1398
+ return "fail-manual-reset";
1399
+ }
1400
+ if (!isRecoverablePgliteInitError(err))
1401
+ return "none";
1402
+ const pidStatus = reconcilePglitePidFile(dataDir);
1403
+ const treatPidAsActiveLock = code === PGLITE_ERROR_CODES.ACTIVE_LOCK || isPgliteLockError(err);
1404
+ if ((treatPidAsActiveLock && pidStatus === "active") ||
1405
+ (treatPidAsActiveLock && pidStatus === "active-unconfirmed") ||
1406
+ (treatPidAsActiveLock && pidStatus === "check-failed")) {
1407
+ return "fail-active-lock";
1408
+ }
1409
+ if (pidStatus === "cleared-stale" || pidStatus === "cleared-malformed") {
1410
+ return "retry-without-reset";
1411
+ }
1412
+ return "fail-manual-reset";
1413
+ }
1414
+ function createActivePgliteLockError(dataDir, err) {
1415
+ if (getPgliteErrorCode(err) === PGLITE_ERROR_CODES.ACTIVE_LOCK &&
1416
+ err instanceof Error) {
1417
+ return err;
1418
+ }
1419
+ return createPgliteInitError(PGLITE_ERROR_CODES.ACTIVE_LOCK, `PGLite data dir is already in use at ${dataDir}. Close the other Eliza or Eliza process, or set a different PGLITE_DATA_DIR before retrying.`, { cause: err, dataDir });
1420
+ }
1421
+ function formatPgliteFailure(err) {
1422
+ return collectErrorMessages(err)[0] ?? formatError(err);
1423
+ }
1424
+ function createManualResetRequiredPgliteError(dataDir, err) {
1425
+ if (getPgliteErrorCode(err) === PGLITE_ERROR_CODES.MANUAL_RESET_REQUIRED &&
1426
+ err instanceof Error) {
1427
+ return err;
1428
+ }
1429
+ const errorText = formatPgliteFailure(err);
1430
+ const cause = getPgliteErrorCode(err) === PGLITE_ERROR_CODES.CORRUPT_DATA
1431
+ ? err
1432
+ : createPgliteInitError(PGLITE_ERROR_CODES.CORRUPT_DATA, `PGlite data dir at ${dataDir} appears corrupt or unreadable: ${errorText}`, { cause: err, dataDir });
1433
+ return createPgliteInitError(PGLITE_ERROR_CODES.MANUAL_RESET_REQUIRED, `PGlite initialization failed for ${dataDir}: ${errorText}. Stop Eliza, then rename or delete only this directory before retrying: ${dataDir}`, { cause, dataDir });
1434
+ }
1435
+ export function isFatalPgliteStartupError(err) {
1436
+ const code = getPgliteErrorCode(err);
1437
+ return (code === PGLITE_ERROR_CODES.ACTIVE_LOCK ||
1438
+ code === PGLITE_ERROR_CODES.CORRUPT_DATA ||
1439
+ code === PGLITE_ERROR_CODES.MANUAL_RESET_REQUIRED);
1440
+ }
1441
+ function resolveActivePgliteDataDir(config) {
1442
+ const provider = config.database?.provider ?? "pglite";
1443
+ if (provider === "postgres")
1444
+ return null;
1445
+ const configured = process.env.PGLITE_DATA_DIR?.trim();
1446
+ const dataDir = configured || resolveDefaultPgliteDataDir(config);
1447
+ return resolveUserPath(dataDir);
1448
+ }
1449
+ /** Call whichever init method the adapter exposes (.init or .initialize). */
1450
+ async function callAdapterInit(adapter) {
1451
+ const fn = "init" in adapter &&
1452
+ typeof adapter.init === "function"
1453
+ ? adapter.init
1454
+ : adapter.initialize;
1455
+ if (typeof fn === "function")
1456
+ await fn.call(adapter);
1457
+ }
1458
+ async function initializeDatabaseAdapter(runtime, config) {
1459
+ if (!runtime.adapter || (await runtime.adapter.isReady()))
1460
+ return;
1461
+ try {
1462
+ await callAdapterInit(runtime.adapter);
1463
+ logger.info("[eliza] Database adapter initialized early (before plugin inits)");
1464
+ }
1465
+ catch (err) {
1466
+ const pgliteDataDir = resolveActivePgliteDataDir(config);
1467
+ if (!pgliteDataDir) {
1468
+ throw err;
1469
+ }
1470
+ const recoveryAction = getPgliteRecoveryAction(err, pgliteDataDir);
1471
+ if (recoveryAction === "none") {
1472
+ throw err;
1473
+ }
1474
+ if (recoveryAction === "fail-active-lock") {
1475
+ throw createActivePgliteLockError(pgliteDataDir, err);
1476
+ }
1477
+ if (recoveryAction === "fail-manual-reset") {
1478
+ throw createManualResetRequiredPgliteError(pgliteDataDir, err);
1479
+ }
1480
+ logger.warn(`[eliza] PGLite init failed (${formatError(err)}). Cleared a stale PGLite lock in ${pgliteDataDir} and retrying without resetting data.`);
1481
+ await callAdapterInit(runtime.adapter);
1482
+ logger.info("[eliza] Database adapter recovered after clearing a stale PGLite lock");
1483
+ }
1484
+ // Health check: verify PGlite data directory has files after init.
1485
+ // Runs on BOTH the happy path and the recovery path.
1486
+ await verifyPgliteDataDir(config);
1487
+ }
1488
+ /**
1489
+ * Verify PGlite data directory contains files after init.
1490
+ * Warns if the directory is empty (suggests ephemeral/in-memory fallback).
1491
+ */
1492
+ async function verifyPgliteDataDir(config) {
1493
+ const pgliteDataDir = resolveActivePgliteDataDir(config);
1494
+ if (!pgliteDataDir || !existsSync(pgliteDataDir))
1495
+ return;
1496
+ try {
1497
+ const files = await fs.readdir(pgliteDataDir);
1498
+ logger.info(`[eliza] PGlite health check: ${files.length} file(s) in ${pgliteDataDir}`);
1499
+ if (files.length === 0) {
1500
+ logger.warn(`[eliza] PGlite data directory is empty after init — data may not persist across restarts`);
1501
+ }
1502
+ }
1503
+ catch (err) {
1504
+ logger.warn(`[eliza] PGlite health check failed: ${formatError(err)}`);
1505
+ }
1506
+ }
1507
+ function isPluginAlreadyRegisteredError(err) {
1508
+ return formatError(err).toLowerCase().includes("already registered");
1509
+ }
1510
+ function getConstraintName(error) {
1511
+ if (!error || typeof error !== "object")
1512
+ return null;
1513
+ const err = error;
1514
+ if (typeof err.constraint === "string" && err.constraint.length > 0) {
1515
+ return err.constraint;
1516
+ }
1517
+ if (err.cause)
1518
+ return getConstraintName(err.cause);
1519
+ return null;
1520
+ }
1521
+ function isComponentsWorldFkViolation(error) {
1522
+ return getConstraintName(error) === "components_world_id_worlds_id_fk";
1523
+ }
1524
+ function toErrorDetails(error, depth = 0) {
1525
+ if (!error || typeof error !== "object") {
1526
+ return { value: String(error) };
1527
+ }
1528
+ const err = error;
1529
+ const details = {};
1530
+ for (const key of [
1531
+ "name",
1532
+ "message",
1533
+ "code",
1534
+ "detail",
1535
+ "hint",
1536
+ "constraint",
1537
+ "schema",
1538
+ "table",
1539
+ "column",
1540
+ "where",
1541
+ ]) {
1542
+ const value = err[key];
1543
+ if (typeof value === "string" || typeof value === "number") {
1544
+ details[key] = value;
1545
+ }
1546
+ }
1547
+ if (depth < 2 && err.cause) {
1548
+ details.cause = toErrorDetails(err.cause, depth + 1);
1549
+ }
1550
+ return details;
1551
+ }
1552
+ async function withEntityCreateMutex(runtimeWithBindings, fn) {
1553
+ const previous = runtimeWithBindings.__elizaEntityCreateMutex;
1554
+ let release = () => { };
1555
+ runtimeWithBindings.__elizaEntityCreateMutex = new Promise((resolve) => {
1556
+ release = resolve;
1557
+ });
1558
+ if (previous) {
1559
+ await previous;
1560
+ }
1561
+ try {
1562
+ return await fn();
1563
+ }
1564
+ finally {
1565
+ release();
1566
+ }
1567
+ }
1568
+ function summarizeComponentWrite(input) {
1569
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
1570
+ return { inputType: typeof input };
1571
+ }
1572
+ const record = input;
1573
+ const data = record.data;
1574
+ const dataKeys = data && typeof data === "object" && !Array.isArray(data)
1575
+ ? Object.keys(data).slice(0, 20)
1576
+ : [];
1577
+ return {
1578
+ id: record.id,
1579
+ type: record.type,
1580
+ entityId: record.entityId ?? record.entity_id,
1581
+ sourceEntityId: record.sourceEntityId ?? record.source_entity_id,
1582
+ roomId: record.roomId ?? record.room_id,
1583
+ worldId: record.worldId ?? record.world_id,
1584
+ agentId: record.agentId ?? record.agent_id,
1585
+ dataKeys,
1586
+ };
1587
+ }
1588
+ export function installRuntimeMethodBindings(runtime) {
1589
+ const runtimeWithBindings = runtime;
1590
+ if (runtimeWithBindings.__elizaMethodBindingsInstalled) {
1591
+ return;
1592
+ }
1593
+ installRuntimePluginLifecycle(runtime);
1594
+ // Some plugin builds store this method and invoke it later without the
1595
+ // runtime receiver, which breaks private-field access in AgentRuntime.
1596
+ runtime.getConversationLength = runtime.getConversationLength.bind(runtime);
1597
+ // Wrap getSetting() to fall back to process.env for known keys when the
1598
+ // core returns null. elizaOS core returns null for missing keys, but some
1599
+ // plugins (e.g. @elizaos/plugin-google-genai) check `!== undefined` and
1600
+ // convert null to the string "null", causing API calls like `models/null`.
1601
+ // Scoped to an allowlist to avoid leaking arbitrary env vars to plugins.
1602
+ const GETSETTING_ENV_ALLOWLIST = new Set([
1603
+ // Model provider API keys
1604
+ "ANTHROPIC_API_KEY",
1605
+ "OPENAI_API_KEY",
1606
+ "GOOGLE_GENERATIVE_AI_API_KEY",
1607
+ "GOOGLE_API_KEY",
1608
+ "GEMINI_API_KEY",
1609
+ "GROQ_API_KEY",
1610
+ "XAI_API_KEY",
1611
+ "DEEPSEEK_API_KEY",
1612
+ "ZAI_API_KEY",
1613
+ "Z_AI_API_KEY",
1614
+ "MOONSHOT_API_KEY",
1615
+ "KIMI_API_KEY",
1616
+ "OPENAI_BASE_URL",
1617
+ "OPENROUTER_API_KEY",
1618
+ // Google model defaults
1619
+ "GOOGLE_SMALL_MODEL",
1620
+ "GOOGLE_LARGE_MODEL",
1621
+ // GitHub
1622
+ "GITHUB_TOKEN",
1623
+ "GITHUB_OAUTH_CLIENT_ID",
1624
+ // Coding agent model preferences
1625
+ "PARALLAX_CLAUDE_MODEL_POWERFUL",
1626
+ "PARALLAX_CLAUDE_MODEL_FAST",
1627
+ "PARALLAX_GEMINI_MODEL_POWERFUL",
1628
+ "PARALLAX_GEMINI_MODEL_FAST",
1629
+ "PARALLAX_CODEX_MODEL_POWERFUL",
1630
+ "PARALLAX_CODEX_MODEL_FAST",
1631
+ "PARALLAX_AIDER_PROVIDER",
1632
+ "PARALLAX_AIDER_MODEL_POWERFUL",
1633
+ "PARALLAX_AIDER_MODEL_FAST",
1634
+ // Custom credential forwarding — intentionally broad: users configure which env vars
1635
+ // to forward to coding agents via this comma-separated key list (e.g. MCP server tokens).
1636
+ "CUSTOM_CREDENTIAL_KEYS",
1637
+ ]);
1638
+ const originalGetSetting = runtime.getSetting.bind(runtime);
1639
+ runtime.getSetting = (key) => {
1640
+ const result = originalGetSetting(key);
1641
+ if (result !== null && result !== undefined)
1642
+ return result;
1643
+ if (GETSETTING_ENV_ALLOWLIST.has(key)) {
1644
+ const envVal = process.env[key];
1645
+ if (envVal !== undefined && envVal.trim() !== "")
1646
+ return envVal;
1647
+ }
1648
+ return result;
1649
+ };
1650
+ // Add targeted diagnostics around component writes. Relationships reflection and
1651
+ // relationship extraction rely heavily on components; when inserts fail,
1652
+ // upstream logs often hide the concrete DB cause/constraint.
1653
+ if (!runtimeWithBindings.__elizaComponentWriteDiagnosticsInstalled) {
1654
+ const runtimeWithComponentWrites = runtime;
1655
+ if (typeof runtimeWithComponentWrites.createComponent === "function") {
1656
+ const originalCreate = runtimeWithComponentWrites.createComponent.bind(runtime);
1657
+ runtimeWithComponentWrites.createComponent = async (input) => {
1658
+ try {
1659
+ return await originalCreate(input);
1660
+ }
1661
+ catch (error) {
1662
+ // Recovery path: some evaluators (e.g. relationship extraction)
1663
+ // compute a synthetic worldId that may not exist yet. If we hit the
1664
+ // components->worlds FK, retry once with the room's canonical worldId.
1665
+ if (isComponentsWorldFkViolation(error) &&
1666
+ input.roomId &&
1667
+ typeof runtime.getRoom === "function") {
1668
+ try {
1669
+ const room = await runtime.getRoom(input.roomId);
1670
+ const fallbackWorldId = room?.worldId ?? null;
1671
+ if (fallbackWorldId !== input.worldId) {
1672
+ logger.warn(`[eliza] createComponent retry with ${fallbackWorldId ? `room worldId (${fallbackWorldId})` : "null worldId"} after FK violation`);
1673
+ const recovered = {
1674
+ ...input,
1675
+ worldId: fallbackWorldId,
1676
+ };
1677
+ return await originalCreate(recovered);
1678
+ }
1679
+ }
1680
+ catch (retryLookupError) {
1681
+ logger.warn(`[eliza] createComponent recovery lookup failed: ${formatError(retryLookupError)}`);
1682
+ }
1683
+ }
1684
+ const component = summarizeComponentWrite(input);
1685
+ logger.error(`[eliza] createComponent failed: ${formatError(error)} | component=${JSON.stringify(component)}`);
1686
+ logger.error(`[eliza] createComponent db details: ${JSON.stringify(toErrorDetails(error))}`);
1687
+ throw error;
1688
+ }
1689
+ };
1690
+ }
1691
+ if (typeof runtimeWithComponentWrites.updateComponent === "function") {
1692
+ const originalUpdate = runtimeWithComponentWrites.updateComponent.bind(runtime);
1693
+ runtimeWithComponentWrites.updateComponent = async (input) => {
1694
+ try {
1695
+ return await originalUpdate(input);
1696
+ }
1697
+ catch (error) {
1698
+ const component = summarizeComponentWrite(input);
1699
+ logger.error(`[eliza] updateComponent failed: ${formatError(error)} | component=${JSON.stringify(component)}`);
1700
+ logger.error(`[eliza] updateComponent db details: ${JSON.stringify(toErrorDetails(error))}`);
1701
+ throw error;
1702
+ }
1703
+ };
1704
+ }
1705
+ runtimeWithBindings.__elizaComponentWriteDiagnosticsInstalled = true;
1706
+ }
1707
+ // Proactive guard for plugin-sql entity creation. Some evaluators may attempt
1708
+ // to create the same entity in rapid succession; plugin-sql's batch insert is
1709
+ // non-idempotent and can fail entire writes on duplicate/conflicting rows.
1710
+ if (!runtimeWithBindings.__elizaEntityWriteDiagnosticsInstalled) {
1711
+ const runtimeWithEntityWrites = runtime;
1712
+ if (typeof runtimeWithEntityWrites.createEntities === "function") {
1713
+ const originalCreateEntities = runtimeWithEntityWrites.createEntities.bind(runtime);
1714
+ runtimeWithEntityWrites.createEntities = async (entities) => {
1715
+ return withEntityCreateMutex(runtimeWithBindings, async () => {
1716
+ const uniqueById = new Map();
1717
+ for (const entity of entities) {
1718
+ if (entity?.id)
1719
+ uniqueById.set(entity.id, entity);
1720
+ }
1721
+ const deduped = Array.from(uniqueById.values());
1722
+ if (deduped.length === 0)
1723
+ return deduped.map((e) => e.id);
1724
+ let missing = deduped;
1725
+ if (typeof runtimeWithEntityWrites.getEntitiesByIds === "function") {
1726
+ try {
1727
+ const existing = (await runtimeWithEntityWrites.getEntitiesByIds(deduped.map((e) => e.id))) ?? [];
1728
+ const existingIds = new Set();
1729
+ for (const entity of existing) {
1730
+ if (entity?.id)
1731
+ existingIds.add(entity.id);
1732
+ }
1733
+ missing = deduped.filter((entity) => !existingIds.has(entity.id));
1734
+ }
1735
+ catch (err) {
1736
+ logger.warn(`[eliza] createEntities precheck failed; proceeding with guarded insert: ${formatError(err)}`);
1737
+ }
1738
+ }
1739
+ if (missing.length === 0)
1740
+ return deduped.map((e) => e.id);
1741
+ const result = await originalCreateEntities(missing);
1742
+ if (Array.isArray(result) ? result.length > 0 : result)
1743
+ return deduped.map((e) => e.id);
1744
+ if (typeof runtimeWithEntityWrites.ensureEntityExists === "function") {
1745
+ let allRecovered = true;
1746
+ for (const entity of missing) {
1747
+ try {
1748
+ const ensured = await runtimeWithEntityWrites.ensureEntityExists(entity);
1749
+ allRecovered = allRecovered && ensured;
1750
+ }
1751
+ catch (err) {
1752
+ allRecovered = false;
1753
+ logger.warn(`[eliza] ensureEntityExists recovery failed for ${String(entity.id)}: ${formatError(err)}`);
1754
+ }
1755
+ }
1756
+ if (allRecovered)
1757
+ return deduped.map((e) => e.id);
1758
+ }
1759
+ logger.warn(`[eliza] createEntities unresolved after guarded retries (requested=${entities.length}, deduped=${deduped.length}, missing=${missing.length})`);
1760
+ return [];
1761
+ });
1762
+ };
1763
+ }
1764
+ runtimeWithBindings.__elizaEntityWriteDiagnosticsInstalled = true;
1765
+ }
1766
+ runtimeWithBindings.__elizaMethodBindingsInstalled = true;
1767
+ }
1768
+ function installActionAliases(runtime) {
1769
+ const runtimeWithAliases = runtime;
1770
+ if (runtimeWithAliases.__elizaActionAliasesInstalled) {
1771
+ return;
1772
+ }
1773
+ const actions = Array.isArray(runtimeWithAliases.actions)
1774
+ ? runtimeWithAliases.actions
1775
+ : [];
1776
+ // Keep compaction automatic-only; do not allow manual COMPACT_SESSION invokes.
1777
+ const compactSessionIndex = actions.findIndex((action) => action?.name?.toUpperCase() === "COMPACT_SESSION");
1778
+ if (compactSessionIndex !== -1) {
1779
+ actions.splice(compactSessionIndex, 1);
1780
+ logger.info("[eliza] Disabled manual COMPACT_SESSION action; auto-compaction remains enabled");
1781
+ }
1782
+ // Compatibility alias: older prompts/docs still reference CODE_TASK,
1783
+ // while agent-orchestrator exposes START_CODING_TASK.
1784
+ const codingTaskAction = actions.find((action) => action?.name?.toUpperCase() === "START_CODING_TASK") ??
1785
+ actions.find((action) => action?.name?.toUpperCase() === "CREATE_TASK");
1786
+ if (codingTaskAction) {
1787
+ const similes = Array.isArray(codingTaskAction.similes)
1788
+ ? codingTaskAction.similes
1789
+ : [];
1790
+ const hasCodeTaskAlias = similes.some((simile) => simile.toUpperCase() === "CODE_TASK");
1791
+ if (!hasCodeTaskAlias) {
1792
+ codingTaskAction.similes = [...similes, "CODE_TASK"];
1793
+ logger.info("[eliza] Added action alias CODE_TASK -> START_CODING_TASK for agent-orchestrator");
1794
+ }
1795
+ }
1796
+ runtimeWithAliases.__elizaActionAliasesInstalled = true;
1797
+ }
1798
+ async function registerSqlPluginWithRecovery(runtime, sqlPlugin, config) {
1799
+ let registerError = null;
1800
+ try {
1801
+ await runtime.registerPlugin(sqlPlugin.plugin);
1802
+ }
1803
+ catch (err) {
1804
+ registerError = err;
1805
+ }
1806
+ if (registerError) {
1807
+ const pgliteDataDir = resolveActivePgliteDataDir(config);
1808
+ if (!pgliteDataDir) {
1809
+ throw registerError;
1810
+ }
1811
+ const recoveryAction = getPgliteRecoveryAction(registerError, pgliteDataDir);
1812
+ if (recoveryAction === "none") {
1813
+ throw registerError;
1814
+ }
1815
+ if (recoveryAction === "fail-active-lock") {
1816
+ throw createActivePgliteLockError(pgliteDataDir, registerError);
1817
+ }
1818
+ if (recoveryAction === "fail-manual-reset") {
1819
+ throw createManualResetRequiredPgliteError(pgliteDataDir, registerError);
1820
+ }
1821
+ logger.warn(`[eliza] SQL plugin registration failed (${formatError(registerError)}). Cleared a stale PGLite lock in ${pgliteDataDir} and retrying without resetting data.`);
1822
+ try {
1823
+ await runtime.registerPlugin(sqlPlugin.plugin);
1824
+ }
1825
+ catch (retryErr) {
1826
+ if (!isPluginAlreadyRegisteredError(retryErr)) {
1827
+ throw retryErr;
1828
+ }
1829
+ }
1830
+ }
1831
+ await initializeDatabaseAdapter(runtime, config);
1832
+ }
1833
+ export { buildCharacterFromConfig, resolvePreferredProviderId, resolvePreferredProviderPluginName, resolvePrimaryModel, };
1834
+ /**
1835
+ * Vision is a heavy optional plugin. When Eliza enables it, keep the service
1836
+ * loaded but idle until the user explicitly selects CAMERA, SCREEN, or BOTH.
1837
+ * This avoids background capture loops during normal app startup.
1838
+ */
1839
+ export function resolveVisionModeSetting(config, env = process.env) {
1840
+ const explicitMode = env.VISION_MODE?.trim();
1841
+ if (explicitMode)
1842
+ return explicitMode;
1843
+ if (config.features?.vision === true)
1844
+ return "OFF";
1845
+ return undefined;
1846
+ }
1847
+ /** @internal Exported for testing. */
1848
+ export function resolveWalletRuntimeSettings(config, env = process.env) {
1849
+ const directRpcUrl = trimEnvString(env.SOLANA_RPC_URL);
1850
+ const solanaNoActions = trimEnvString(env.SOLANA_NO_ACTIONS);
1851
+ const configEnv = config?.env;
1852
+ const configVars = configEnv?.vars &&
1853
+ typeof configEnv.vars === "object" &&
1854
+ !Array.isArray(configEnv.vars)
1855
+ ? configEnv.vars
1856
+ : undefined;
1857
+ const getConfigEnvString = (key) => {
1858
+ const value = configVars?.[key] ?? configEnv?.[key];
1859
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
1860
+ };
1861
+ const explicitSolanaPublicKey = trimEnvString(env.SOLANA_PUBLIC_KEY) ??
1862
+ trimEnvString(env.WALLET_PUBLIC_KEY) ??
1863
+ getConfigEnvString("SOLANA_PUBLIC_KEY") ??
1864
+ getConfigEnvString("WALLET_PUBLIC_KEY");
1865
+ const derivedSolanaPublicKey = trimEnvString(getWalletAddresses().solanaAddress) ??
1866
+ trimEnvString(syncSolanaPublicKeyEnv(getConfigEnvString("SOLANA_PRIVATE_KEY")));
1867
+ const solanaPublicKey = explicitSolanaPublicKey ?? derivedSolanaPublicKey;
1868
+ const settings = {};
1869
+ if (directRpcUrl) {
1870
+ settings.SOLANA_RPC_URL = directRpcUrl;
1871
+ }
1872
+ if (solanaNoActions) {
1873
+ settings.SOLANA_NO_ACTIONS = solanaNoActions;
1874
+ }
1875
+ if (!solanaPublicKey) {
1876
+ return settings;
1877
+ }
1878
+ settings.SOLANA_PUBLIC_KEY = solanaPublicKey;
1879
+ settings.WALLET_PUBLIC_KEY = solanaPublicKey;
1880
+ return settings;
1881
+ }
1882
+ /**
1883
+ * Boot the elizaOS runtime without starting the readline chat loop.
1884
+ *
1885
+ * This is a convenience wrapper around {@link startEliza} in headless mode,
1886
+ * with optional config guards.
1887
+ */
1888
+ export async function bootElizaRuntime(opts = {}) {
1889
+ if (opts.requireConfig && !configFileExists()) {
1890
+ throw new Error("No config found. Run `eliza start` once to complete setup.");
1891
+ }
1892
+ const runtime = await startEliza({ headless: true });
1893
+ if (!runtime) {
1894
+ throw new Error("Failed to boot runtime");
1895
+ }
1896
+ return runtime;
1897
+ }
1898
+ const LEVEL_TO_NAME = {
1899
+ 10: "trace",
1900
+ 20: "debug",
1901
+ 27: "success",
1902
+ 28: "progress",
1903
+ 29: "log",
1904
+ 30: "info",
1905
+ 40: "warn",
1906
+ 50: "error",
1907
+ 60: "fatal",
1908
+ };
1909
+ export const logToChatListener = (entry) => {
1910
+ const chatEntry = entry;
1911
+ if (chatEntry.roomId && chatEntry.runtime) {
1912
+ const runtime = chatEntry.runtime;
1913
+ // access dynamic property
1914
+ const overrides = runtime.logLevelOverrides;
1915
+ const overrideLevel = overrides?.get(String(chatEntry.roomId));
1916
+ if (overrideLevel) {
1917
+ const levelKey = entry.level;
1918
+ const levelName = (levelKey && LEVEL_TO_NAME[levelKey] ? LEVEL_TO_NAME[levelKey] : "log").toUpperCase();
1919
+ const prefix = `[${levelName}]`;
1920
+ const content = `${prefix} ${entry.msg}`;
1921
+ // Prevent infinite loops by suppressing logs from this action
1922
+ runtime
1923
+ .sendMessageToTarget({ roomId: entry.roomId }, {
1924
+ text: `\`\`\`\n${content}\n\`\`\``,
1925
+ source: "system",
1926
+ isLog: "true",
1927
+ })
1928
+ .catch((err) => {
1929
+ logger.debug(`[runtime] failed to send log message to target: ${err}`);
1930
+ });
1931
+ }
1932
+ }
1933
+ };
1934
+ /**
1935
+ * Start the elizaOS runtime with Eliza's configuration.
1936
+ *
1937
+ * In headless mode the runtime is returned instead of entering the
1938
+ * interactive readline loop.
1939
+ */
1940
+ export async function startEliza(opts) {
1941
+ // Resolve and register baseline `@elizaos/plugin-*` modules into the
1942
+ // STATIC_ELIZA_PLUGINS map BEFORE any plugin resolution happens. See the
1943
+ // comment on `ensureCoreStaticPluginsRegistered()` for why this isn't a
1944
+ // module-init top-level await.
1945
+ await ensureCoreStaticPluginsRegistered();
1946
+ // Start buffering logs early so startup messages appear in the UI log viewer
1947
+ const { captureEarlyLogs } = await import("../api/early-logs.js");
1948
+ captureEarlyLogs();
1949
+ // Register log listener for chat mirroring
1950
+ addLogListener(logToChatListener);
1951
+ // 1. Load Eliza config from ~/.eliza/eliza.json
1952
+ let config;
1953
+ try {
1954
+ config = loadElizaConfig();
1955
+ }
1956
+ catch (err) {
1957
+ if (err.code === "ENOENT") {
1958
+ logger.warn("[eliza] No config found, using defaults");
1959
+ // All ElizaConfig fields are optional, so an empty object is
1960
+ // structurally valid. The `as` cast is safe here.
1961
+ config = {};
1962
+ }
1963
+ else {
1964
+ throw err;
1965
+ }
1966
+ }
1967
+ // 1b. First-run onboarding — ask for agent name if not configured.
1968
+ // In headless mode (GUI) the onboarding is handled by the web UI,
1969
+ // so we skip the interactive CLI prompt and let the runtime start
1970
+ // with defaults. The GUI will restart the agent after onboarding.
1971
+ if (!opts?.headless) {
1972
+ config = await runFirstTimeSetup(config);
1973
+ }
1974
+ // 1c. Apply logging level from config to process.env so the global
1975
+ // @elizaos/core logger (used by plugins) respects it.
1976
+ // config.logging.level is guaranteed to be set (defaults to "error").
1977
+ // Users can still opt into noisy logs via config.logging.level or
1978
+ // an explicit LOG_LEVEL environment variable.
1979
+ if (!process.env.LOG_LEVEL) {
1980
+ process.env.LOG_LEVEL = config.logging?.level ?? "error";
1981
+ }
1982
+ // 2. Push channel secrets into process.env for plugin discovery
1983
+ applyConnectorSecretsToEnv(config);
1984
+ await autoResolveDiscordAppId();
1985
+ // 2b. Propagate cloud config into process.env for ElizaCloud plugin
1986
+ applyCloudConfigToEnv(config);
1987
+ // 2c. Propagate x402 config into process.env
1988
+ applyX402ConfigToEnv(config);
1989
+ // 2d. Propagate database config into process.env for plugin-sql
1990
+ applyDatabaseConfigToEnv(config);
1991
+ // 2e. Boot-time vault hydration. Migrate plaintext sensitive values from
1992
+ // eliza.json + config.env + sensitive process.env keys into the OS-keychain
1993
+ // vault, then resolve any vault://KEY sentinels in `config.env` so the
1994
+ // legacy hydration loop below sees real values.
1995
+ {
1996
+ try {
1997
+ const { hydrateWalletKeysFromNodePlatformSecureStore } = await importAppCoreRuntime();
1998
+ await hydrateWalletKeysFromNodePlatformSecureStore();
1999
+ }
2000
+ catch (err) {
2001
+ logger.warn(`[wallet][os-store] boot hydrate skipped: ${err instanceof Error ? err.message : String(err)}`);
2002
+ }
2003
+ const { runVaultBootstrap } = await importAppCoreRuntime();
2004
+ const { sharedVault } = await importAppCoreRuntime();
2005
+ const bootResult = await runVaultBootstrap();
2006
+ logger.info(`[vault-bootstrap] migrated=${bootResult.migrated} failed=${bootResult.failed.length}`);
2007
+ const { resolved, missing } = await resolveConfigEnvForProcess(config.env, sharedVault());
2008
+ if (missing.length > 0) {
2009
+ logger.warn(`[vault-bootstrap] sentinel(s) without vault entry: ${missing.join(", ")}`);
2010
+ }
2011
+ if (config.env &&
2012
+ typeof config.env === "object" &&
2013
+ !Array.isArray(config.env)) {
2014
+ for (const [key, value] of Object.entries(resolved)) {
2015
+ config.env[key] = value;
2016
+ }
2017
+ }
2018
+ const varsBag = config.env?.vars;
2019
+ if (varsBag && typeof varsBag === "object" && !Array.isArray(varsBag)) {
2020
+ const varsResult = await resolveConfigEnvForProcess(varsBag, sharedVault());
2021
+ for (const [key, value] of Object.entries(varsResult.resolved)) {
2022
+ varsBag[key] = value;
2023
+ }
2024
+ }
2025
+ }
2026
+ // 2f. Propagate arbitrary env vars from config.env into process.env.
2027
+ // Eliza stores user-defined env vars (plugin settings, API URLs, etc.)
2028
+ // in config.env; elizaOS plugins read them via process.env / getSetting.
2029
+ // Skip ELIZAOS_CLOUD_* — applyCloudConfigToEnv() owns those; otherwise a
2030
+ // stale key in config.env refills process.env after disconnect cleared it.
2031
+ if (config.env &&
2032
+ typeof config.env === "object" &&
2033
+ !Array.isArray(config.env)) {
2034
+ for (const [key, value] of Object.entries(config.env)) {
2035
+ if (isElizaCloudManagedProcessEnvKey(key))
2036
+ continue;
2037
+ if (typeof value === "string" && !process.env[key]) {
2038
+ process.env[key] = value;
2039
+ }
2040
+ }
2041
+ // Also hydrate from config.env.vars — setEnvValue writes API keys to
2042
+ // both config.env["KEY"] and config.env.vars["KEY"]. If the top-level
2043
+ // key was lost (e.g. pruneEnv, config migration), the nested form is
2044
+ // the authoritative source.
2045
+ const vars = config.env.vars;
2046
+ if (vars && typeof vars === "object" && !Array.isArray(vars)) {
2047
+ for (const [key, value] of Object.entries(vars)) {
2048
+ if (isElizaCloudManagedProcessEnvKey(key))
2049
+ continue;
2050
+ if (typeof value === "string" && !process.env[key]) {
2051
+ process.env[key] = value;
2052
+ }
2053
+ }
2054
+ }
2055
+ }
2056
+ // Keep the canonical public key env in sync for Solana plugins that still
2057
+ // read process.env directly instead of runtime settings.
2058
+ syncSolanaPublicKeyEnv();
2059
+ normalizeOpenAiCompatibleProviderConfig(config);
2060
+ // Log active database configuration for debugging persistence issues
2061
+ {
2062
+ const dbProvider = config.database?.provider ?? "pglite";
2063
+ const pgliteDir = process.env.PGLITE_DATA_DIR;
2064
+ const postgresUrl = process.env.POSTGRES_URL;
2065
+ logger.info(`[eliza] Database provider: ${dbProvider}` +
2066
+ (dbProvider === "pglite" && pgliteDir
2067
+ ? ` | data dir: ${pgliteDir}`
2068
+ : "") +
2069
+ (dbProvider === "postgres" && postgresUrl
2070
+ ? ` | connection: ${(postgresUrl.length > 4096 ? postgresUrl.slice(0, 4096) : postgresUrl).replace(/:\/\/([^:@]{1,1024}):([^@]{1,1024})@/, "://$1:***@")}`
2071
+ : ""));
2072
+ }
2073
+ // 2d-iii. OG tracking code initialization
2074
+ if (!isMobilePlatform()) {
2075
+ try {
2076
+ const { initializeOGCode } = await loadElizaMakerModule();
2077
+ initializeOGCode?.();
2078
+ }
2079
+ catch {
2080
+ // Silent — OG tracking is non-critical
2081
+ }
2082
+ }
2083
+ // 2d-ii. Allow destructive migrations (e.g. dropping tables removed between
2084
+ // plugin versions) so the runtime doesn't silently stall. Without this
2085
+ // the migration system throws an error that gets swallowed, leaving the
2086
+ // app hanging indefinitely with no output.
2087
+ if (!process.env.ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS) {
2088
+ process.env.ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS = "true";
2089
+ }
2090
+ // 2e-ii. SECRET_SALT must be stable across boots — multiple consumers key
2091
+ // durable encryption off it (core/settings.ts encryptStringValue,
2092
+ // encryptedCharacter for character.secrets, runtime.ts decryptSecret,
2093
+ // advanced-capabilities settings). Previously we generated a random
2094
+ // value per process, which silently invalidated every persisted
2095
+ // ciphertext on restart (decryptStringValue returns the encrypted
2096
+ // string on failure, so connector logins just stopped working
2097
+ // without an error). Persist to <stateDir>/secret-salt instead.
2098
+ if (!process.env.SECRET_SALT) {
2099
+ const secretSaltPath = path.join(resolveStateDir(), "secret-salt");
2100
+ let salt = null;
2101
+ try {
2102
+ const cached = readFileSync(secretSaltPath, "utf8").trim();
2103
+ if (/^[0-9a-f]{64}$/.test(cached)) {
2104
+ salt = cached;
2105
+ }
2106
+ }
2107
+ catch (err) {
2108
+ if (err.code !== "ENOENT") {
2109
+ throw err;
2110
+ }
2111
+ }
2112
+ if (!salt) {
2113
+ salt = crypto.randomBytes(32).toString("hex");
2114
+ mkdirSync(path.dirname(secretSaltPath), { recursive: true });
2115
+ // 0o600: only the user account that wrote it can read it. The salt
2116
+ // is a key-derivation input — anyone who reads it plus the
2117
+ // ciphertext can decrypt persisted secrets.
2118
+ writeFileSync(secretSaltPath, salt, { encoding: "utf8", mode: 0o600 });
2119
+ logger.info(`[eliza] Generated SECRET_SALT and persisted to ${secretSaltPath}`);
2120
+ }
2121
+ process.env.SECRET_SALT = salt;
2122
+ }
2123
+ // 2e-iii. Pre-flight validation for Google AI API keys. If the key looks
2124
+ // obviously invalid (too short, placeholder, wrong prefix), clear it
2125
+ // to prevent plugin-google-genai from making a failing API call.
2126
+ for (const gkey of [
2127
+ "GEMINI_API_KEY",
2128
+ "GOOGLE_API_KEY",
2129
+ "GOOGLE_GENERATIVE_AI_API_KEY",
2130
+ ]) {
2131
+ const val = process.env[gkey]?.trim();
2132
+ if (val &&
2133
+ (val.length < 20 || val === "your-key-here" || val.startsWith("sk-"))) {
2134
+ logger.warn(`[eliza] ${gkey} appears invalid (length/format), clearing to skip Google AI plugin`);
2135
+ delete process.env[gkey];
2136
+ }
2137
+ }
2138
+ // 2f. Install the multi-account pool shims and apply selected direct API
2139
+ // accounts before plugin resolution snapshots process.env.
2140
+ try {
2141
+ const accountPool = await importAppCoreRuntime();
2142
+ accountPool.getDefaultAccountPool();
2143
+ await accountPool.applyAccountPoolApiCredentials({
2144
+ activeBackend: resolveServiceRoutingInConfig(config)?.llmText?.backend,
2145
+ accountStrategies: config.accountStrategies,
2146
+ serviceRouting: resolveServiceRoutingInConfig(config),
2147
+ });
2148
+ accountPool.startAccountPoolKeepAlive();
2149
+ }
2150
+ catch (err) {
2151
+ logger.debug(`[eliza] Account pool bootstrap skipped: ${formatError(err)}`);
2152
+ }
2153
+ // 2g. Apply subscription-based credentials (Claude Max, Codex Max).
2154
+ // Failure is non-fatal — the agent can still start with other providers.
2155
+ // Config is NOT rolled back on failure; partial mutations may persist in
2156
+ // the in-memory config but are not saved to disk until explicit save.
2157
+ try {
2158
+ const { applySubscriptionCredentials } = await import("../auth/index.js");
2159
+ await applySubscriptionCredentials(config);
2160
+ }
2161
+ catch (err) {
2162
+ logger.warn(`[eliza] Failed to apply subscription credentials (agent will continue without them): ${formatError(err)}`);
2163
+ }
2164
+ // 2h. Cloud mode — if the user chose cloud during onboarding (or on a
2165
+ // subsequent start with cloud config), skip local runtime setup and
2166
+ // connect via the thin client instead.
2167
+ const deploymentTarget = resolveDeploymentTargetInConfig(config);
2168
+ // 2h-pre. Store-variant build: macOS App Sandbox / MAS / MS Store / Flathub
2169
+ // policy is incompatible with running an embedded local AgentRuntime, so
2170
+ // store builds must route to Eliza Cloud. If the cloud config is missing,
2171
+ // fail loudly and route the user to onboarding.
2172
+ const { isStoreBuild } = await importAppCoreRuntime();
2173
+ if (isStoreBuild()) {
2174
+ if (deploymentTarget.runtime === "local") {
2175
+ throw new Error("[eliza] Store-variant builds cannot run a local agent. " +
2176
+ "Pair an Eliza Cloud account in onboarding, or switch to the direct download build.");
2177
+ }
2178
+ if (!config.cloud?.apiKey?.trim() || !config.cloud?.agentId?.trim()) {
2179
+ throw new Error("[eliza] Store-variant build requires a paired Eliza Cloud account. " +
2180
+ "Run onboarding to link Eliza Cloud, or switch to the direct download build.");
2181
+ }
2182
+ return startInCloudMode(config, config.cloud.agentId, opts);
2183
+ }
2184
+ if (deploymentTarget.runtime === "cloud" &&
2185
+ deploymentTarget.provider === "elizacloud" &&
2186
+ config.cloud?.apiKey &&
2187
+ config.cloud?.agentId?.trim()) {
2188
+ return startInCloudMode(config, config.cloud.agentId, opts);
2189
+ }
2190
+ // 3. Build elizaOS Character from Eliza config
2191
+ const character = buildCharacterFromConfig(config);
2192
+ const primaryModel = resolvePrimaryModel(config);
2193
+ const preferredProviderId = resolvePreferredProviderId(config);
2194
+ const preferredProviderPluginName = resolvePreferredProviderPluginName(config);
2195
+ // 4. Ensure workspace exists with required files
2196
+ const workspaceDir = config.agents?.defaults?.workspace ?? resolveDefaultAgentWorkspaceDir();
2197
+ await ensureAgentWorkspace({
2198
+ dir: workspaceDir,
2199
+ ensureInitFiles: shouldBootstrapWorkspaceInitFiles(workspaceDir),
2200
+ });
2201
+ // 4b. Ensure custom plugins directory exists for drop-in plugins
2202
+ await fs.mkdir(path.join(resolveStateDir(), CUSTOM_RUNTIME_PLUGINS_DIRNAME), {
2203
+ recursive: true,
2204
+ });
2205
+ // 5. Create the Eliza bridge plugin (workspace context + session keys + compaction)
2206
+ const agentId = character.name?.toLowerCase().replace(/\s+/g, "-") ?? "main";
2207
+ // 5-pre0. Apply per-agent vault profile overrides to process.env.
2208
+ //
2209
+ // Vault keys with multiple named profiles (work / personal / throwaway)
2210
+ // resolve the active profile for THIS agent through the vault's
2211
+ // routing layer, then write the resolved value into process.env so
2212
+ // the synchronous runtime.getSetting fast path picks it up. Idempotent;
2213
+ // safe to run multiple times. Opt-out via
2214
+ // ELIZA_DISABLE_VAULT_PROFILE_RESOLVER=1.
2215
+ if (process.env.ELIZA_DISABLE_VAULT_PROFILE_RESOLVER !== "1") {
2216
+ try {
2217
+ const { sharedVault } = await importAppCoreRuntime();
2218
+ const { applyVaultProfilesForAgent } = await import("./vault-profile-resolver.js");
2219
+ await applyVaultProfilesForAgent(sharedVault(), agentId);
2220
+ }
2221
+ catch (err) {
2222
+ logger.warn(`[vault-profile-resolver] boot-time apply failed agent="${agentId}": ${err instanceof Error ? err.message : String(err)}`);
2223
+ }
2224
+ }
2225
+ // 5-pre. Ensure each agent has its own EVM + Solana keypair in the vault.
2226
+ // The runtime-wide EVM_PRIVATE_KEY / SOLANA_PRIVATE_KEY (process.env) is
2227
+ // the *user* wallet; per-agent wallets live inside the encrypted vault and
2228
+ // are surfaced separately in the in-app browser. Idempotent — existing
2229
+ // wallets are preserved. Opt-out via ELIZA_DISABLE_AGENT_WALLET_BOOTSTRAP=1.
2230
+ if (process.env.ELIZA_DISABLE_AGENT_WALLET_BOOTSTRAP !== "1") {
2231
+ try {
2232
+ const { sharedVault } = await importAppCoreRuntime();
2233
+ const { ensureAgentWallets } = await import("./agent-wallets.js");
2234
+ const descriptors = await ensureAgentWallets(sharedVault(), agentId, "agent-bootstrap");
2235
+ const summary = descriptors
2236
+ .map((d) => `${d.chain}:${d.address}`)
2237
+ .join(" ");
2238
+ logger.info(`[agent-wallets] agent="${agentId}" wallets ready (${summary})`);
2239
+ }
2240
+ catch (err) {
2241
+ logger.warn(`[agent-wallets] failed to ensure wallets for agent="${agentId}": ${err instanceof Error ? err.message : String(err)}`);
2242
+ }
2243
+ }
2244
+ // 5a. If cloud is configured and no local GitHub token, try fetching from cloud
2245
+ await autoFetchCloudGithubToken(config.cloud?.agentId?.trim() || agentId);
2246
+ const elizaPlugin = createElizaPlugin({
2247
+ workspaceDir,
2248
+ agentId,
2249
+ });
2250
+ // 6. Resolve and load plugins
2251
+ // In headless (GUI) mode before onboarding, the user hasn't configured a
2252
+ // provider yet. Downgrade diagnostics so the expected "no AI provider"
2253
+ // state doesn't appear as a scary Error in the terminal.
2254
+ const preOnboarding = opts?.headless && !config.agents;
2255
+ const resolvedPlugins = await resolvePlugins(config, {
2256
+ quiet: preOnboarding,
2257
+ });
2258
+ if (resolvedPlugins.length === 0) {
2259
+ if (preOnboarding) {
2260
+ logger.info("[eliza] No plugins loaded yet — the onboarding wizard will configure a model provider");
2261
+ }
2262
+ else {
2263
+ logger.error("[eliza] No plugins loaded — at least one model provider plugin is required");
2264
+ logger.error("[eliza] Set an API key (e.g. ANTHROPIC_API_KEY, OPENAI_API_KEY) in your environment");
2265
+ throw new Error("No plugins loaded");
2266
+ }
2267
+ }
2268
+ // 6b. Debug logging — print full context after provider + plugin resolution
2269
+ {
2270
+ const pluginNames = resolvedPlugins.map((p) => p.name);
2271
+ const providerNames = resolvedPlugins
2272
+ .flatMap((p) => p.plugin.providers ?? [])
2273
+ .map((prov) => prov.name);
2274
+ // Build a context summary for validation
2275
+ const contextSummary = {
2276
+ agentName: character.name,
2277
+ pluginCount: resolvedPlugins.length,
2278
+ providerCount: providerNames.length,
2279
+ primaryModel: primaryModel ?? "(auto-detect)",
2280
+ preferredProvider: preferredProviderId ?? "(auto-detect)",
2281
+ workspaceDir,
2282
+ };
2283
+ debugLogResolvedContext(pluginNames, providerNames, contextSummary, (msg) => logger.debug(msg));
2284
+ // Validate the context and surface issues early
2285
+ const contextValidation = validateRuntimeContext(contextSummary);
2286
+ if (!contextValidation.valid) {
2287
+ const issues = [];
2288
+ if (contextValidation.nullFields.length > 0) {
2289
+ issues.push(`null: ${contextValidation.nullFields.join(", ")}`);
2290
+ }
2291
+ if (contextValidation.undefinedFields.length > 0) {
2292
+ issues.push(`undefined: ${contextValidation.undefinedFields.join(", ")}`);
2293
+ }
2294
+ if (contextValidation.emptyFields.length > 0) {
2295
+ issues.push(`empty: ${contextValidation.emptyFields.join(", ")}`);
2296
+ }
2297
+ logger.warn(`[eliza] Context validation issues detected: ${issues.join("; ")}`);
2298
+ }
2299
+ }
2300
+ // 7. Create the AgentRuntime with Eliza plugin + resolved plugins
2301
+ // All CORE_PLUGINS are pre-registered sequentially (in CORE_PLUGINS
2302
+ // order) before runtime.initialize() so that cross-plugin getService()
2303
+ // calls always resolve. runtime.initialize() registers remaining
2304
+ // characterPlugins (connectors, providers, custom) in parallel — those
2305
+ // are NOT core and don't have ordering dependencies.
2306
+ const PREREGISTER_PLUGINS = new Set(CORE_PLUGINS);
2307
+ const sqlPlugin = resolvedPlugins.find((p) => p.name === "@elizaos/plugin-sql");
2308
+ const localEmbeddingPlugin = resolvedPlugins.find((p) => p.name === "@elizaos/plugin-local-embedding");
2309
+ const otherPlugins = resolvedPlugins.filter((p) => !PREREGISTER_PLUGINS.has(p.name));
2310
+ // Resolve the runtime log level from config (AgentRuntime doesn't support
2311
+ // "silent", so we map it to "fatal" as the quietest supported level).
2312
+ const runtimeLogLevel = (() => {
2313
+ // process.env.LOG_LEVEL is already resolved (set explicitly or from
2314
+ // config.logging.level above), so prefer it to honour the dev-mode
2315
+ // LOG_LEVEL=error override set by eliza/packages/app-core/scripts/dev-ui.mjs.
2316
+ const lvl = process.env.LOG_LEVEL ?? config.logging?.level ?? "error";
2317
+ if (lvl === "silent")
2318
+ return "fatal";
2319
+ return lvl;
2320
+ })();
2321
+ // 7a. Resolve bundled skills directory from @elizaos/skills so
2322
+ // plugin-agent-skills auto-loads them on startup.
2323
+ let bundledSkillsDir = null;
2324
+ try {
2325
+ const { getSkillsDir } = (await import("@elizaos/skills"));
2326
+ bundledSkillsDir = getSkillsDir();
2327
+ logger.info(`[eliza] Bundled skills dir: ${bundledSkillsDir}`);
2328
+ }
2329
+ catch {
2330
+ logger.debug("[eliza] @elizaos/skills not available — bundled skills will not be loaded");
2331
+ }
2332
+ // Workspace skills directory (highest precedence for overrides)
2333
+ const workspaceSkillsDir = workspaceDir ? `${workspaceDir}/skills` : null;
2334
+ const managedSkillsDir = path.join(resolveStateDir(), "skills");
2335
+ // ── Sandbox mode setup ──────────────────────────────────────────────────
2336
+ const sandboxConfig = config.agents?.defaults?.sandbox;
2337
+ const sandboxModeStr = sandboxConfig
2338
+ ?.mode;
2339
+ const sandboxMode = sandboxModeStr === "light" ||
2340
+ sandboxModeStr === "standard" ||
2341
+ sandboxModeStr === "max"
2342
+ ? sandboxModeStr
2343
+ : "off";
2344
+ const isSandboxActive = sandboxMode !== "off";
2345
+ let sandboxManager = null;
2346
+ let sandboxAuditLog = null;
2347
+ if (isSandboxActive) {
2348
+ logger.info(`[eliza] Sandbox mode: ${sandboxMode}`);
2349
+ sandboxAuditLog = new SandboxAuditLog({ console: true });
2350
+ // Standard/max modes also start the container sandbox manager
2351
+ if (sandboxMode === "standard" || sandboxMode === "max") {
2352
+ const dockerSettings = sandboxConfig?.docker;
2353
+ const browserSettings = sandboxConfig?.browser;
2354
+ sandboxManager = new SandboxManager({
2355
+ mode: sandboxMode,
2356
+ image: dockerSettings?.image ?? undefined,
2357
+ containerPrefix: dockerSettings?.containerPrefix ?? undefined,
2358
+ network: dockerSettings?.network ?? undefined,
2359
+ memory: dockerSettings?.memory ?? undefined,
2360
+ cpus: dockerSettings?.cpus ?? undefined,
2361
+ workspaceRoot: workspaceDir ?? undefined,
2362
+ browser: browserSettings
2363
+ ? {
2364
+ enabled: browserSettings.enabled ?? false,
2365
+ image: browserSettings.image ?? undefined,
2366
+ cdpPort: browserSettings.cdpPort ?? undefined,
2367
+ vncPort: browserSettings.vncPort ?? undefined,
2368
+ noVncPort: browserSettings.noVncPort ?? undefined,
2369
+ headless: browserSettings.headless ?? undefined,
2370
+ enableNoVnc: browserSettings.enableNoVnc ?? undefined,
2371
+ autoStart: browserSettings.autoStart ?? true,
2372
+ autoStartTimeoutMs: browserSettings.autoStartTimeoutMs ?? undefined,
2373
+ }
2374
+ : undefined,
2375
+ });
2376
+ try {
2377
+ await sandboxManager.start();
2378
+ logger.info("[eliza] Sandbox manager started");
2379
+ }
2380
+ catch (err) {
2381
+ logger.error(`[eliza] Sandbox manager failed to start: ${err instanceof Error ? err.message : String(err)}`);
2382
+ // Non-fatal: light mode fallback
2383
+ }
2384
+ }
2385
+ sandboxAuditLog.record({
2386
+ type: "sandbox_lifecycle",
2387
+ summary: `Sandbox initialized: mode=${sandboxMode}`,
2388
+ severity: "info",
2389
+ });
2390
+ }
2391
+ // ── End sandbox setup ───────────────────────────────────────────────────
2392
+ // ── Boost preferred provider plugin priority ──────────────────────────
2393
+ // elizaOS selects the model handler with the highest `priority` for each
2394
+ // ModelType. All provider plugins default to priority 0, so whichever
2395
+ // registers first wins — essentially random when using Promise.all.
2396
+ // When the user has explicitly selected a provider or model, prefer that
2397
+ // provider's plugin so its handlers are selected over registration order.
2398
+ const pluginsForRuntime = otherPlugins.map((p) => p.plugin);
2399
+ const visionModeSetting = resolveVisionModeSetting(config);
2400
+ if (preferredProviderPluginName) {
2401
+ for (const plugin of pluginsForRuntime) {
2402
+ if (plugin.name === preferredProviderPluginName) {
2403
+ plugin.priority = (plugin.priority ?? 0) + 10;
2404
+ logger.info(`[eliza] Boosted plugin "${plugin.name}" priority to ${plugin.priority} (preferred provider: ${preferredProviderId ?? "unknown"})`);
2405
+ break;
2406
+ }
2407
+ }
2408
+ }
2409
+ // ── Strip upstream skill providers ──────────────────────────────────────
2410
+ // The upstream @elizaos/plugin-agent-skills registers providers that dump
2411
+ // ALL loaded skills into every prompt (~2000-4000 tokens). Eliza replaces
2412
+ // them with a BM25-lite dynamic provider (see providers/skill-provider.ts)
2413
+ // that injects only the most relevant skills per turn.
2414
+ //
2415
+ // We keep:
2416
+ // - agent_skills_overview (lightweight stats, ~50 tokens)
2417
+ // - all actions (USE_SKILL, SEARCH_SKILLS, INSTALL_SKILL, …)
2418
+ // - the AGENT_SKILLS_SERVICE itself
2419
+ {
2420
+ const UPSTREAM_SKILL_PROVIDERS_TO_STRIP = new Set([
2421
+ "agent_skills",
2422
+ "agent_skill_instructions",
2423
+ "agent_skills_catalog",
2424
+ ]);
2425
+ for (const plugin of pluginsForRuntime) {
2426
+ if (plugin.name === "@elizaos/plugin-agent-skills" &&
2427
+ Array.isArray(plugin.providers)) {
2428
+ const before = plugin.providers.length;
2429
+ plugin.providers = plugin.providers.filter((p) => !UPSTREAM_SKILL_PROVIDERS_TO_STRIP.has(p.name ?? ""));
2430
+ const removed = before - plugin.providers.length;
2431
+ if (removed > 0) {
2432
+ logger.info(`[eliza] Stripped ${removed} upstream skill provider(s) — using dynamic BM25-lite provider instead`);
2433
+ }
2434
+ }
2435
+ }
2436
+ }
2437
+ // Deduplicate actions across all plugins to avoid "Action already registered"
2438
+ // warnings from elizaOS core. basic-capabilities is registered first by the
2439
+ // runtime, so include it in deduplication so its actions take precedence.
2440
+ const settings = character.settings ?? {};
2441
+ const basicCapabilitiesPlugin = createBasicCapabilitiesPlugin({
2442
+ disableBasic: settings.DISABLE_BASIC_CAPABILITIES === true ||
2443
+ settings.DISABLE_BASIC_CAPABILITIES === "true",
2444
+ enableExtended: settings.ENABLE_EXTENDED_CAPABILITIES === true ||
2445
+ settings.ENABLE_EXTENDED_CAPABILITIES === "true" ||
2446
+ settings.ADVANCED_CAPABILITIES === true ||
2447
+ settings.ADVANCED_CAPABILITIES === "true",
2448
+ skipCharacterProvider: false,
2449
+ enableAutonomy: settings.ENABLE_AUTONOMY === true || settings.ENABLE_AUTONOMY === "true",
2450
+ });
2451
+ deduplicatePluginActions([
2452
+ basicCapabilitiesPlugin,
2453
+ elizaPlugin,
2454
+ ...pluginsForRuntime,
2455
+ ]);
2456
+ let runtime = new AgentRuntime({
2457
+ character,
2458
+ // advancedCapabilities: true,
2459
+ actionPlanning: true,
2460
+ // advancedMemory is enabled via character.advancedMemory
2461
+ plugins: [elizaPlugin, ...pluginsForRuntime],
2462
+ ...(runtimeLogLevel ? { logLevel: runtimeLogLevel } : {}),
2463
+ // Sandbox options — only active when mode != "off"
2464
+ ...(isSandboxActive
2465
+ ? {
2466
+ sandboxMode: true,
2467
+ sandboxAuditHandler: sandboxAuditLog
2468
+ ? (event) => {
2469
+ sandboxAuditLog.recordTokenReplacement(event.direction, event.url, event.tokenIds);
2470
+ }
2471
+ : undefined,
2472
+ }
2473
+ : {}),
2474
+ settings: {
2475
+ VALIDATION_LEVEL: "fast",
2476
+ // Forward non-sensitive Eliza config.env vars as runtime settings so
2477
+ // plugins can access them via runtime.getSetting(). This fixes a bug where
2478
+ // plugins (e.g. @elizaos/plugin-google-genai) call runtime.getSetting()
2479
+ // which returns null for keys not in settings, but the plugin checks
2480
+ // !== undefined causing it to use "null" as the model name.
2481
+ //
2482
+ // Security: Filter out blockchain private keys and secrets. API keys are
2483
+ // allowed since plugins need them via runtime.getSetting(). Private keys
2484
+ // should only be accessed via process.env by signing services.
2485
+ ...Object.fromEntries(Object.entries(collectConfigEnvVars(config)).filter(([key]) => isEnvKeyAllowedForForwarding(key))),
2486
+ // Forward connector config vars as-is. The connector env map is curated
2487
+ // and plugins need access to secrets like passwords and tokens via
2488
+ // runtime.getSetting() for real transports to boot.
2489
+ ...collectConnectorEnvVars(config),
2490
+ // Forward Eliza config env vars as runtime settings
2491
+ ...(preferredProviderId ? { MODEL_PROVIDER: preferredProviderId } : {}),
2492
+ ...(visionModeSetting ? { VISION_MODE: visionModeSetting } : {}),
2493
+ ...resolveWalletRuntimeSettings(config),
2494
+ ...(typeof config.agents?.defaults?.adminEntityId === "string" &&
2495
+ config.agents.defaults.adminEntityId.trim().length > 0
2496
+ ? {
2497
+ ELIZA_ADMIN_ENTITY_ID: config.agents.defaults.adminEntityId.trim(),
2498
+ }
2499
+ : {}),
2500
+ ...(config.agents?.defaults?.ownerContacts
2501
+ ? {
2502
+ ELIZA_OWNER_CONTACTS_JSON: JSON.stringify(config.agents.defaults.ownerContacts),
2503
+ }
2504
+ : {}),
2505
+ ...(config.roles?.connectorAdmins
2506
+ ? {
2507
+ ELIZA_ROLES_CONNECTOR_ADMINS_JSON: JSON.stringify(config.roles.connectorAdmins),
2508
+ }
2509
+ : {}),
2510
+ // Forward skills config so plugin-agent-skills can apply allow/deny filtering
2511
+ ...(config.skills?.allowBundled
2512
+ ? { SKILLS_ALLOWLIST: config.skills.allowBundled.join(",") }
2513
+ : {}),
2514
+ ...(config.skills?.denyBundled
2515
+ ? { SKILLS_DENYLIST: config.skills.denyBundled.join(",") }
2516
+ : {}),
2517
+ // Managed skills are stored in the Eliza state dir (~/.eliza/skills).
2518
+ SKILLS_DIR: managedSkillsDir,
2519
+ // Tell plugin-agent-skills where to find bundled + workspace skills
2520
+ ...(bundledSkillsDir ? { BUNDLED_SKILLS_DIRS: bundledSkillsDir } : {}),
2521
+ ...(workspaceSkillsDir
2522
+ ? { WORKSPACE_SKILLS_DIR: workspaceSkillsDir }
2523
+ : {}),
2524
+ // Also forward extra dirs from config
2525
+ ...(config.skills?.load?.extraDirs?.length
2526
+ ? { EXTRA_SKILLS_DIRS: config.skills.load.extraDirs.join(",") }
2527
+ : {}),
2528
+ // Disable image description when vision is explicitly toggled off.
2529
+ // The cloud plugin always registers IMAGE_DESCRIPTION, so we need a
2530
+ // runtime setting to prevent the message service from calling it.
2531
+ ...(config.features?.vision === false
2532
+ ? { DISABLE_IMAGE_DESCRIPTION: "true" }
2533
+ : {}),
2534
+ },
2535
+ });
2536
+ installRuntimeMethodBindings(runtime);
2537
+ // 7a. Mobile local inference must be registered before runtime.initialize().
2538
+ // Runtime services probe TEXT_EMBEDDING during init; registering the local
2539
+ // handler only after startEliza() returns leaves mobile local mode booting
2540
+ // with "no provider" diagnostics and disabled embedding services.
2541
+ if (process.env.ELIZA_LOCAL_LLAMA?.trim() === "1") {
2542
+ try {
2543
+ const { ensureAospLocalInferenceHandlers } = await import("@elizaos/plugin-aosp-local-inference");
2544
+ await ensureAospLocalInferenceHandlers(runtime);
2545
+ }
2546
+ catch (err) {
2547
+ logger.warn(`[eliza] AOSP local inference pre-registration skipped: ${formatError(err)}`);
2548
+ }
2549
+ }
2550
+ else if (process.env.ELIZA_DEVICE_BRIDGE_ENABLED?.trim() === "1") {
2551
+ try {
2552
+ const { ensureMobileDeviceBridgeInferenceHandlers } = await import("@elizaos/plugin-capacitor-bridge");
2553
+ await ensureMobileDeviceBridgeInferenceHandlers(runtime);
2554
+ }
2555
+ catch (err) {
2556
+ logger.warn(`[eliza] Mobile device bridge pre-registration skipped: ${formatError(err)}`);
2557
+ }
2558
+ }
2559
+ // 7b. Pre-register plugin-sql so the adapter is ready before other plugins init.
2560
+ // This is OPTIONAL — without it, some features (memory, todos) won't work.
2561
+ // runtime.db is a getter that returns this.adapter.db and throws when
2562
+ // this.adapter is undefined, so plugins that use runtime.db will fail.
2563
+ if (sqlPlugin) {
2564
+ // 7c. Eagerly initialize the database adapter so it's fully ready
2565
+ // BEFORE other plugins run their init(). When legacy/corrupt PGLite
2566
+ // state causes startup aborts, reset the local DB dir and retry once.
2567
+ await registerSqlPluginWithRecovery(runtime, sqlPlugin, config);
2568
+ }
2569
+ else {
2570
+ const loadedNames = resolvedPlugins.map((p) => p.name).join(", ");
2571
+ logger.error(`[eliza] @elizaos/plugin-sql was NOT found among resolved plugins. ` +
2572
+ `Loaded: [${loadedNames}]`);
2573
+ throw new Error("@elizaos/plugin-sql is required but was not loaded. " +
2574
+ "Ensure the package is installed and built (check for import errors above).");
2575
+ }
2576
+ // 7d. Pre-register plugin-local-embedding so its TEXT_EMBEDDING handler
2577
+ // (priority 10) is available before runtime.initialize() starts all
2578
+ // plugins in parallel. Without this, the basic-capabilities plugin's services
2579
+ // (ActionFilterService, EmbeddingGenerationService) race ahead and use
2580
+ // the cloud plugin's TEXT_EMBEDDING handler — which hits a paid API —
2581
+ // because local-embedding's heavier init hasn't completed yet.
2582
+ if (localEmbeddingPlugin) {
2583
+ configureLocalEmbeddingPlugin(localEmbeddingPlugin.plugin, config);
2584
+ await runtime.registerPlugin(localEmbeddingPlugin.plugin);
2585
+ logger.info("[eliza] plugin-local-embedding pre-registered (TEXT_EMBEDDING ready)");
2586
+ }
2587
+ else {
2588
+ logger.warn("[eliza] @elizaos/plugin-local-embedding not found — embeddings " +
2589
+ "will fall back to whatever TEXT_EMBEDDING handler is registered by " +
2590
+ "other plugins (may incur cloud API costs)");
2591
+ }
2592
+ // 7e. Pre-register remaining core plugins sequentially in CORE_PLUGINS order.
2593
+ // Each registerPlugin() call runs the plugin's init() before proceeding
2594
+ // to the next, guaranteeing that cross-plugin getService() calls resolve.
2595
+ {
2596
+ try {
2597
+ logger.info("[eliza] Pre-registering roles capability...");
2598
+ await runtime.registerPlugin(rolesPlugin);
2599
+ logger.info("[eliza] ✓ roles capability pre-registered");
2600
+ }
2601
+ catch (err) {
2602
+ logger.warn(`[eliza] Roles capability pre-registration failed: ${formatError(err)}`);
2603
+ }
2604
+ const alreadyPreRegistered = new Set([
2605
+ "@elizaos/plugin-sql",
2606
+ "@elizaos/plugin-local-embedding",
2607
+ ]);
2608
+ for (const name of CORE_PLUGINS) {
2609
+ if (alreadyPreRegistered.has(name))
2610
+ continue;
2611
+ const resolved = resolvedPlugins.find((p) => p.name === name);
2612
+ if (!resolved) {
2613
+ logger.debug(`[eliza] Core plugin ${name} not resolved — skipping pre-registration`);
2614
+ continue;
2615
+ }
2616
+ try {
2617
+ const regStart = Date.now();
2618
+ logger.info(`[eliza] Pre-registering core plugin: ${name}...`);
2619
+ const PLUGIN_REG_TIMEOUT_MS = 30_000;
2620
+ await Promise.race([
2621
+ runtime.registerPlugin(resolved.plugin),
2622
+ new Promise((_resolve, reject) => setTimeout(() => reject(new Error(`Timed out after ${PLUGIN_REG_TIMEOUT_MS / 1000}s`)), PLUGIN_REG_TIMEOUT_MS)),
2623
+ ]);
2624
+ logger.info(`[eliza] ✓ ${name} pre-registered (${Date.now() - regStart}ms)`);
2625
+ }
2626
+ catch (err) {
2627
+ logger.warn(`[eliza] Core plugin ${name} pre-registration failed: ${formatError(err)}`);
2628
+ }
2629
+ }
2630
+ }
2631
+ const warmAgentSkillsService = async () => {
2632
+ // Let runtime startup complete first; this warm-up runs asynchronously
2633
+ // so API + agent come online immediately.
2634
+ try {
2635
+ const skillServicePromise = runtime.getServiceLoadPromise("AGENT_SKILLS_SERVICE");
2636
+ const timeout = new Promise((_resolve, reject) => {
2637
+ setTimeout(() => {
2638
+ reject(new Error("AgentSkillsService warm-up timed out (10s) — non-blocking, agent will function without skills"));
2639
+ }, 10_000);
2640
+ });
2641
+ await Promise.race([skillServicePromise, timeout]);
2642
+ const svc = runtime.getService("AGENT_SKILLS_SERVICE");
2643
+ if (svc?.getCatalogStats) {
2644
+ const stats = svc.getCatalogStats();
2645
+ logger.info(`[eliza] AgentSkills ready — ${stats.loaded} skills loaded, ` +
2646
+ `${stats.total} in catalog (storage: ${stats.storageType})`);
2647
+ }
2648
+ // Guard against non-string skill.description values.
2649
+ // The bundled YAML parser produces {} for multi-line descriptions, which
2650
+ // crashes findBestLocalMatch / scoreSkillMatch (call .toLowerCase() on it).
2651
+ // Instead of a one-shot sanitize (which misses skills loaded later by
2652
+ // syncCatalog / autoRefresh), we monkey-patch getLoadedSkills to always
2653
+ // return sanitized values.
2654
+ const svcAny = svc;
2655
+ const origGetLoaded = svcAny?.getLoadedSkills;
2656
+ if (origGetLoaded && svcAny) {
2657
+ svcAny.getLoadedSkills = function (...args) {
2658
+ const skills = origGetLoaded.apply(this, args);
2659
+ for (const skill of skills) {
2660
+ if (typeof skill.description !== "string") {
2661
+ skill.description =
2662
+ skill.description == null
2663
+ ? ""
2664
+ : JSON.stringify(skill.description);
2665
+ }
2666
+ }
2667
+ return skills;
2668
+ };
2669
+ logger.debug("[eliza] Patched getLoadedSkills to guard descriptions");
2670
+ }
2671
+ }
2672
+ catch (err) {
2673
+ // Non-fatal — the agent can operate without skills. This warm-up runs
2674
+ // async so it doesn't block startup.
2675
+ logger.debug(`[eliza] AgentSkillsService warm-up: ${formatError(err)}`);
2676
+ }
2677
+ };
2678
+ const initializeRuntimeServices = async () => {
2679
+ if (process.env.ELIZA_LEGACY_STEWARD_EVM_BRIDGE !== "0") {
2680
+ try {
2681
+ const { stewardEvmPreBoot } = await loadStewardEvmBridgeModule();
2682
+ await stewardEvmPreBoot?.(runtime);
2683
+ }
2684
+ catch (err) {
2685
+ logger.debug(`[eliza] Steward EVM pre-boot skipped: ${formatError(err)}`);
2686
+ }
2687
+ }
2688
+ // 7f. Pre-register ConnectorSetupService so connector plugins can access
2689
+ // shared config/escalation/owner-contact helpers via runtime.getService().
2690
+ try {
2691
+ const { ConnectorSetupService } = await import("../services/connector-setup-service.js");
2692
+ await runtime.registerService(ConnectorSetupService);
2693
+ }
2694
+ catch (err) {
2695
+ logger.debug(`[eliza] ConnectorSetupService registration skipped: ${formatError(err)}`);
2696
+ }
2697
+ // 8. Initialize the runtime (registers remaining plugins, starts services)
2698
+ assertPersistentDatabaseRequired(runtime);
2699
+ await runtime.initialize();
2700
+ await prepareRuntimeForTrajectoryCapture(runtime, "runtime.initialize()", config);
2701
+ // 8a. Apply legacy role redaction to protected plugin providers.
2702
+ try {
2703
+ const { applyPluginRoleGating } = await import("./plugin-role-gating.js");
2704
+ applyPluginRoleGating(runtime.plugins ?? []);
2705
+ }
2706
+ catch (err) {
2707
+ logger.debug(`[eliza] Plugin provider role gating skipped: ${formatError(err)}`);
2708
+ }
2709
+ // 8b. Register conversation-proximity provider for post-turn evaluators.
2710
+ // This is read-only context; relationship writes are handled by the
2711
+ // evaluator service from model-extracted relationship updates.
2712
+ try {
2713
+ const { conversationProximityProvider } = await import("../providers/conversation-proximity.js");
2714
+ await runtime.registerPlugin({
2715
+ name: "eliza-conversation-proximity",
2716
+ description: "Read-only co-participant context for post-turn evaluators",
2717
+ providers: [conversationProximityProvider],
2718
+ });
2719
+ logger.info("[eliza] ✓ conversation-proximity provider registered");
2720
+ }
2721
+ catch (err) {
2722
+ logger.debug(`[eliza] Conversation-proximity provider skipped: ${formatError(err)}`);
2723
+ }
2724
+ try {
2725
+ if (runtimeDocumentsEnabled(runtime)) {
2726
+ await seedBundledDocuments(runtime);
2727
+ }
2728
+ else {
2729
+ logger.info("[eliza] Native documents disabled; skipping bundled document seeding");
2730
+ }
2731
+ }
2732
+ catch (err) {
2733
+ logger.warn(`[eliza] Failed to seed bundled documents: ${formatError(err)}`);
2734
+ }
2735
+ if (process.env.ELIZA_LEGACY_STEWARD_EVM_BRIDGE !== "0") {
2736
+ try {
2737
+ const { stewardEvmPostBoot } = await loadStewardEvmBridgeModule();
2738
+ await stewardEvmPostBoot?.(runtime);
2739
+ }
2740
+ catch (err) {
2741
+ logger.debug(`[eliza] Steward EVM post-boot skipped: ${formatError(err)}`);
2742
+ }
2743
+ }
2744
+ try {
2745
+ const { installAnthropicWebSearch } = await import("./web-search-tools.js");
2746
+ installAnthropicWebSearch(runtime);
2747
+ }
2748
+ catch (err) {
2749
+ logger.debug(`[eliza] Anthropic web search setup skipped: ${formatError(err)}`);
2750
+ }
2751
+ // 8b. Ensure AutonomyService is available for trigger dispatch.
2752
+ // registers this service) from loading, so we start it explicitly.
2753
+ // Respect ENABLE_AUTONOMY env var — cloud-provisioned containers may
2754
+ // disable this to prevent runaway autonomous actions.
2755
+ const autonomyEnabled = (process.env.ENABLE_AUTONOMY ?? "true").toLowerCase() !== "false";
2756
+ if (autonomyEnabled && !runtime.getService("AUTONOMY")) {
2757
+ try {
2758
+ await startAndRegisterAutonomyService(runtime);
2759
+ logger.info("[eliza] AutonomyService started for trigger dispatch");
2760
+ }
2761
+ catch (err) {
2762
+ logger.warn(`[eliza] AutonomyService failed to start: ${formatError(err)}`);
2763
+ }
2764
+ }
2765
+ else if (!autonomyEnabled) {
2766
+ logger.info("[eliza] AutonomyService skipped — ENABLE_AUTONOMY=false");
2767
+ }
2768
+ // Enable the autonomy loop so memories injected into the autonomy
2769
+ // room (e.g. by workflow nodes that post into autonomy) are actually
2770
+ // processed by the agent's autonomous reasoning.
2771
+ if (autonomyEnabled) {
2772
+ const autonomySvc = getAutonomyService(runtime);
2773
+ if (autonomySvc) {
2774
+ try {
2775
+ await autonomySvc.enableAutonomy();
2776
+ logger.info("[eliza] AutonomyService enabled — trigger instructions will be processed");
2777
+ }
2778
+ catch (err) {
2779
+ logger.warn(`[eliza] Failed to enable autonomy loop: ${formatError(err)}`);
2780
+ }
2781
+ }
2782
+ }
2783
+ // Do not block runtime startup on skills warm-up.
2784
+ void warmAgentSkillsService().catch((err) => {
2785
+ logger.warn(`[eliza] Skills warm-up failed: ${formatError(err)}`);
2786
+ });
2787
+ };
2788
+ try {
2789
+ await initializeRuntimeServices();
2790
+ }
2791
+ catch (err) {
2792
+ const pgliteDataDir = resolveActivePgliteDataDir(config);
2793
+ const recoveryAction = !opts?.pgliteRecoveryAttempted && pgliteDataDir
2794
+ ? getPgliteRecoveryAction(err, pgliteDataDir)
2795
+ : "none";
2796
+ if (!pgliteDataDir || recoveryAction === "none") {
2797
+ throw err;
2798
+ }
2799
+ if (recoveryAction === "fail-active-lock") {
2800
+ throw createActivePgliteLockError(pgliteDataDir, err);
2801
+ }
2802
+ if (recoveryAction === "fail-manual-reset") {
2803
+ throw createManualResetRequiredPgliteError(pgliteDataDir, err);
2804
+ }
2805
+ logger.warn(`[eliza] Runtime migrations failed (${formatError(err)}). Cleared a stale PGLite lock in ${pgliteDataDir} and retrying startup once without resetting data.`);
2806
+ try {
2807
+ await shutdownRuntime(runtime, "PGLite recovery");
2808
+ }
2809
+ catch {
2810
+ // Ignore cleanup errors — retry creates a fresh runtime anyway.
2811
+ }
2812
+ return await startEliza({
2813
+ ...opts,
2814
+ pgliteRecoveryAttempted: true,
2815
+ });
2816
+ }
2817
+ installActionAliases(runtime);
2818
+ // 9. Graceful shutdown handler
2819
+ //
2820
+ // In headless mode the caller (dev-server / desktop shell) owns the process
2821
+ // lifecycle, so we must NOT register signal handlers here — they would
2822
+ // stack on every hot-restart, close over stale runtime references, and
2823
+ // race with bun --watch's own process teardown.
2824
+ if (!opts?.headless) {
2825
+ registerSignalShutdownHandlers({
2826
+ getRuntime: () => runtime,
2827
+ getSandboxManager: () => sandboxManager,
2828
+ });
2829
+ }
2830
+ const loadHooksSystem = async () => {
2831
+ try {
2832
+ const internalHooksConfig = config.hooks
2833
+ ?.internal;
2834
+ await loadHooks({
2835
+ workspacePath: workspaceDir,
2836
+ internalConfig: internalHooksConfig,
2837
+ elizaConfig: config,
2838
+ });
2839
+ const startupEvent = createHookEvent("gateway", "startup", "system", {
2840
+ cfg: config,
2841
+ });
2842
+ await triggerHook(startupEvent);
2843
+ }
2844
+ catch (err) {
2845
+ logger.warn(`[eliza] Hooks system could not load: ${formatError(err)}`);
2846
+ }
2847
+ };
2848
+ // ── Headless mode — return runtime for API server wiring ──────────────
2849
+ if (opts?.headless) {
2850
+ void loadHooksSystem().catch((err) => {
2851
+ logger.warn(`[eliza] Hooks system load failed: ${formatError(err)}`);
2852
+ });
2853
+ logger.info("[eliza] Runtime initialised in headless mode (autonomy enabled)");
2854
+ return runtime;
2855
+ }
2856
+ // 10. Load hooks system
2857
+ await loadHooksSystem();
2858
+ // ── Start API server for GUI access ──────────────────────────────────────
2859
+ // In CLI mode (non-headless), start the API server in the background so
2860
+ // the GUI can connect to the running agent. This ensures full feature
2861
+ // parity: whether started via `npx elizaos`, `bun run dev`, or the
2862
+ // desktop app, the API server is always available for the GUI admin
2863
+ // surface.
2864
+ try {
2865
+ const { startApiServer } = await import("../api/server.js");
2866
+ const apiPort = resolveServerOnlyPort(process.env);
2867
+ const { port: actualApiPort } = await startApiServer({
2868
+ port: apiPort,
2869
+ runtime,
2870
+ onRestart: async () => {
2871
+ logger.info("[eliza] Hot-reload: Restarting runtime...");
2872
+ try {
2873
+ // Stop the old runtime to release resources (DB connections, timers, etc.)
2874
+ //
2875
+ // WHY the 2s timeout: some services — notably PTYService —
2876
+ // shut down gracefully by awaiting each active session with a
2877
+ // per-session timeout (up to ~5s). runtime.stop() awaits every
2878
+ // service.stop() sequentially, so a single idle PTY session
2879
+ // turns a provider switch into a multi-second block. During
2880
+ // that window the runtime-operations active-op slot +
2881
+ // agentState === "restarting" guard reject further clicks,
2882
+ // which is why flipping through providers rapidly feels stuck.
2883
+ //
2884
+ // Cap the shutdown window at 2s; if it doesn't finish, log and
2885
+ // bring the new runtime up anyway. Services that miss the
2886
+ // window get GC'd when the process unwinds. This is fine for a
2887
+ // user-initiated restart — the user asked for a new runtime;
2888
+ // in-flight work on the old one is already obsolete.
2889
+ try {
2890
+ const SHUTDOWN_TIMEOUT_MS = 2000;
2891
+ let shutdownTimedOut = false;
2892
+ await Promise.race([
2893
+ shutdownRuntime(runtime, "hot-reload cleanup"),
2894
+ new Promise((resolve) => setTimeout(() => {
2895
+ shutdownTimedOut = true;
2896
+ resolve();
2897
+ }, SHUTDOWN_TIMEOUT_MS)),
2898
+ ]);
2899
+ if (shutdownTimedOut) {
2900
+ logger.warn(`[eliza] Hot-reload: old runtime shutdown exceeded ${SHUTDOWN_TIMEOUT_MS}ms; proceeding with new runtime`);
2901
+ }
2902
+ }
2903
+ catch (stopErr) {
2904
+ logger.warn(`[eliza] Hot-reload: old runtime stop failed: ${formatError(stopErr)}`);
2905
+ }
2906
+ // Reload config from disk (updated by API)
2907
+ const freshConfig = loadElizaConfig();
2908
+ // Propagate secrets & cloud config into process.env so plugins
2909
+ // (especially plugin-elizacloud) can discover them. The initial
2910
+ // startup does this in startEliza(); the hot-reload must repeat it
2911
+ // because the config may have changed (e.g. cloud enabled during
2912
+ // onboarding).
2913
+ applyConnectorSecretsToEnv(freshConfig);
2914
+ await autoResolveDiscordAppId();
2915
+ applyCloudConfigToEnv(freshConfig);
2916
+ applyX402ConfigToEnv(freshConfig);
2917
+ applyDatabaseConfigToEnv(freshConfig);
2918
+ await autoFetchCloudGithubToken(freshConfig.cloud?.agentId?.trim() || agentId);
2919
+ try {
2920
+ const accountPool = await importAppCoreRuntime();
2921
+ accountPool.getDefaultAccountPool();
2922
+ await accountPool.applyAccountPoolApiCredentials({
2923
+ activeBackend: resolveServiceRoutingInConfig(freshConfig)?.llmText?.backend,
2924
+ accountStrategies: freshConfig.accountStrategies,
2925
+ serviceRouting: resolveServiceRoutingInConfig(freshConfig),
2926
+ });
2927
+ accountPool.startAccountPoolKeepAlive();
2928
+ }
2929
+ catch (poolErr) {
2930
+ logger.debug(`[eliza] Hot-reload: account pool bootstrap skipped: ${formatError(poolErr)}`);
2931
+ }
2932
+ // Apply subscription-based credentials (Claude Max, Codex Max)
2933
+ // that may have been set up during onboarding.
2934
+ try {
2935
+ const { applySubscriptionCredentials } = await import("../auth/index.js");
2936
+ await applySubscriptionCredentials(freshConfig);
2937
+ }
2938
+ catch (subErr) {
2939
+ logger.warn(`[eliza] Hot-reload: subscription credentials: ${formatError(subErr)}`);
2940
+ }
2941
+ // Resolve plugins using same function as startup
2942
+ const resolvedPlugins = await resolvePlugins(freshConfig);
2943
+ // Rebuild character from the fresh config so onboarding changes
2944
+ // (name, bio, style, etc.) are picked up on restart.
2945
+ const freshCharacter = buildCharacterFromConfig(freshConfig);
2946
+ // Recreate Eliza plugin with fresh workspace
2947
+ const freshElizaPlugin = createElizaPlugin({
2948
+ workspaceDir: freshConfig.agents?.defaults?.workspace ?? workspaceDir,
2949
+ agentId: freshCharacter.name?.toLowerCase().replace(/\s+/g, "-") ?? "main",
2950
+ });
2951
+ // Create new runtime with updated plugins.
2952
+ // Filter out pre-registered plugins so they aren't double-loaded
2953
+ // inside initialize()'s Promise.all — same pattern as the initial
2954
+ // startup to avoid the TEXT_EMBEDDING race condition.
2955
+ const freshPreferredProviderId = resolvePreferredProviderId(freshConfig);
2956
+ const freshPreferredProviderPluginName = resolvePreferredProviderPluginName(freshConfig);
2957
+ const freshOtherPlugins = resolvedPlugins.filter((p) => !PREREGISTER_PLUGINS.has(p.name));
2958
+ // Boost the preferred provider plugin priority (same as initial startup)
2959
+ const freshPluginsForRuntime = freshOtherPlugins.map((p) => p.plugin);
2960
+ const freshVisionModeSetting = resolveVisionModeSetting(freshConfig);
2961
+ if (freshPreferredProviderPluginName) {
2962
+ for (const plugin of freshPluginsForRuntime) {
2963
+ if (plugin.name === freshPreferredProviderPluginName) {
2964
+ plugin.priority = (plugin.priority ?? 0) + 10;
2965
+ break;
2966
+ }
2967
+ }
2968
+ }
2969
+ const newRuntime = new AgentRuntime({
2970
+ character: freshCharacter,
2971
+ plugins: [freshElizaPlugin, ...freshPluginsForRuntime],
2972
+ ...(runtimeLogLevel ? { logLevel: runtimeLogLevel } : {}),
2973
+ settings: {
2974
+ ...(freshPreferredProviderId
2975
+ ? { MODEL_PROVIDER: freshPreferredProviderId }
2976
+ : {}),
2977
+ ...(freshVisionModeSetting
2978
+ ? { VISION_MODE: freshVisionModeSetting }
2979
+ : {}),
2980
+ // Disable image description when vision is explicitly toggled off.
2981
+ ...(freshConfig.features?.vision === false
2982
+ ? { DISABLE_IMAGE_DESCRIPTION: "true" }
2983
+ : {}),
2984
+ },
2985
+ });
2986
+ installRuntimeMethodBindings(newRuntime);
2987
+ // Pre-register plugin-sql + local-embedding before initialize()
2988
+ // to avoid the same race condition as the initial startup.
2989
+ // Re-derive from freshly resolved plugins (not outer closure) so
2990
+ // hot-reload picks up any plugin updates.
2991
+ const freshSqlPlugin = resolvedPlugins.find((p) => p.name === "@elizaos/plugin-sql");
2992
+ const freshLocalEmbeddingPlugin = resolvedPlugins.find((p) => p.name === "@elizaos/plugin-local-embedding");
2993
+ if (freshSqlPlugin) {
2994
+ await registerSqlPluginWithRecovery(newRuntime, freshSqlPlugin, freshConfig);
2995
+ }
2996
+ if (freshLocalEmbeddingPlugin) {
2997
+ configureLocalEmbeddingPlugin(freshLocalEmbeddingPlugin.plugin, freshConfig);
2998
+ await newRuntime.registerPlugin(freshLocalEmbeddingPlugin.plugin);
2999
+ }
3000
+ // Pre-register remaining core plugins sequentially (same as startup)
3001
+ {
3002
+ try {
3003
+ await newRuntime.registerPlugin(rolesPlugin);
3004
+ }
3005
+ catch (err) {
3006
+ logger.warn(`[eliza] Hot-reload: roles capability pre-registration failed: ${formatError(err)}`);
3007
+ }
3008
+ const alreadyPreRegistered = new Set([
3009
+ "@elizaos/plugin-sql",
3010
+ "@elizaos/plugin-local-embedding",
3011
+ ]);
3012
+ for (const name of CORE_PLUGINS) {
3013
+ if (alreadyPreRegistered.has(name))
3014
+ continue;
3015
+ const resolved = resolvedPlugins.find((p) => p.name === name);
3016
+ if (!resolved)
3017
+ continue;
3018
+ try {
3019
+ await newRuntime.registerPlugin(resolved.plugin);
3020
+ }
3021
+ catch (err) {
3022
+ logger.warn(`[eliza] Hot-reload: core plugin ${name} pre-registration failed: ${formatError(err)}`);
3023
+ }
3024
+ }
3025
+ }
3026
+ assertPersistentDatabaseRequired(newRuntime);
3027
+ try {
3028
+ const { ConnectorSetupService: CSSReload } = await import("../services/connector-setup-service.js");
3029
+ await newRuntime.registerService(CSSReload);
3030
+ }
3031
+ catch {
3032
+ // non-fatal
3033
+ }
3034
+ try {
3035
+ const { stewardEvmPreBoot: preBootHR } = await loadStewardEvmBridgeModule();
3036
+ await preBootHR?.(newRuntime);
3037
+ }
3038
+ catch {
3039
+ // non-fatal
3040
+ }
3041
+ assertPersistentDatabaseRequired(newRuntime);
3042
+ await newRuntime.initialize();
3043
+ await prepareRuntimeForTrajectoryCapture(newRuntime, "hot-reload runtime.initialize()", config);
3044
+ try {
3045
+ const { applyPluginRoleGating } = await import("./plugin-role-gating.js");
3046
+ applyPluginRoleGating(newRuntime.plugins ?? []);
3047
+ }
3048
+ catch (err) {
3049
+ logger.debug(`[eliza] Hot-reload plugin provider role gating skipped: ${formatError(err)}`);
3050
+ }
3051
+ try {
3052
+ const { stewardEvmPostBoot: postBootHR } = await loadStewardEvmBridgeModule();
3053
+ await postBootHR?.(newRuntime);
3054
+ }
3055
+ catch {
3056
+ // non-fatal
3057
+ }
3058
+ // Ensure AutonomyService survives hot-reload (respects ENABLE_AUTONOMY)
3059
+ const hotReloadAutonomyEnabled = (process.env.ENABLE_AUTONOMY ?? "true").toLowerCase() !== "false";
3060
+ if (hotReloadAutonomyEnabled && !newRuntime.getService("AUTONOMY")) {
3061
+ try {
3062
+ await startAndRegisterAutonomyService(newRuntime);
3063
+ }
3064
+ catch (err) {
3065
+ logger.warn(`[eliza] AutonomyService failed to start after hot-reload: ${formatError(err)}`);
3066
+ }
3067
+ }
3068
+ // Enable the autonomy loop after hot-reload (same as initial boot)
3069
+ if (hotReloadAutonomyEnabled) {
3070
+ const svc = getAutonomyService(newRuntime);
3071
+ if (svc) {
3072
+ try {
3073
+ await svc.enableAutonomy();
3074
+ }
3075
+ catch (err) {
3076
+ logger.warn(`[eliza] Failed to enable autonomy after hot-reload: ${formatError(err)}`);
3077
+ }
3078
+ }
3079
+ }
3080
+ installActionAliases(newRuntime);
3081
+ runtime = newRuntime;
3082
+ logger.info("[eliza] Hot-reload: Runtime restarted successfully");
3083
+ return newRuntime;
3084
+ }
3085
+ catch (err) {
3086
+ logger.error(`[eliza] Hot-reload failed: ${formatError(err)}`);
3087
+ return null;
3088
+ }
3089
+ },
3090
+ });
3091
+ const dashboardUrl = `http://localhost:${actualApiPort}`;
3092
+ console.log(`[eliza] Control UI: ${dashboardUrl}`);
3093
+ logger.info(`[eliza] API server listening on ${dashboardUrl}`);
3094
+ }
3095
+ catch (apiErr) {
3096
+ // Log to both stderr (visible to Electrobun agent.ts) and the in-memory
3097
+ // logger so the error is never silently swallowed in packaged builds.
3098
+ const apiErrMsg = `[eliza] Could not start API server: ${formatError(apiErr)}`;
3099
+ console.error(apiErrMsg);
3100
+ logger.warn(apiErrMsg);
3101
+ // In server-only mode (Electrobun desktop), a missing API server is fatal
3102
+ // — nothing else can serve requests. Exit so the parent process sees a
3103
+ // non-zero exit code instead of the misleading "Server running" message.
3104
+ if (opts?.serverOnly) {
3105
+ console.error("[eliza] Exiting: API server is required in server-only mode.");
3106
+ process.exit(1);
3107
+ }
3108
+ // Non-fatal in CLI mode — the interactive chat loop still works.
3109
+ }
3110
+ // ── Server-only mode — keep running without chat loop ────────────────────
3111
+ if (opts?.serverOnly) {
3112
+ logger.info("[eliza] Running in server-only mode (no interactive chat)");
3113
+ console.log("[eliza] Server running. Press Ctrl+C to stop.");
3114
+ // Keep process alive — the API server handles all interaction
3115
+ const keepAlive = setInterval(() => { }, 1 << 30); // ~12 days
3116
+ registerSignalShutdownHandlers({
3117
+ getRuntime: () => runtime,
3118
+ getSandboxManager: () => sandboxManager,
3119
+ beforeShutdown: () => {
3120
+ clearInterval(keepAlive);
3121
+ },
3122
+ });
3123
+ return runtime;
3124
+ }
3125
+ // ── Interactive chat loop ────────────────────────────────────────────────
3126
+ const agentName = character.name ?? "Eliza";
3127
+ const userId = crypto.randomUUID();
3128
+ // Use `let` so the fallback path can reassign to fresh IDs.
3129
+ let roomId = stringToUuid(`${agentName}-chat-room`);
3130
+ try {
3131
+ const worldId = stringToUuid(`${agentName}-chat-world`);
3132
+ // Use a deterministic messageServerId so the settings provider
3133
+ // can reference the world by serverId after it is found.
3134
+ const messageServerId = stringToUuid(`${agentName}-cli-server`);
3135
+ await runtime.ensureConnection({
3136
+ entityId: userId,
3137
+ roomId,
3138
+ worldId,
3139
+ userName: "User",
3140
+ source: "cli",
3141
+ channelId: `${agentName}-chat`,
3142
+ type: ChannelType.DM,
3143
+ messageServerId,
3144
+ metadata: { ownership: { ownerId: userId } },
3145
+ });
3146
+ // Ensure the world has ownership metadata so the settings
3147
+ // provider can locate it via findWorldsForOwner during onboarding.
3148
+ // This also handles worlds that already exist from a prior session
3149
+ // but were created without ownership metadata.
3150
+ const world = await runtime.getWorld(worldId);
3151
+ if (world) {
3152
+ let needsUpdate = false;
3153
+ if (!world.metadata) {
3154
+ world.metadata = {};
3155
+ needsUpdate = true;
3156
+ }
3157
+ if (!world.metadata.ownership ||
3158
+ typeof world.metadata.ownership !== "object" ||
3159
+ world.metadata.ownership.ownerId !== userId) {
3160
+ world.metadata.ownership = { ownerId: userId };
3161
+ needsUpdate = true;
3162
+ }
3163
+ if (needsUpdate) {
3164
+ await runtime.updateWorld(world);
3165
+ }
3166
+ }
3167
+ }
3168
+ catch (err) {
3169
+ logger.warn(`[eliza] Could not establish chat room, retrying with fresh IDs: ${formatError(err)}`);
3170
+ // Fall back to unique IDs if deterministic ones conflict with stale data.
3171
+ // IMPORTANT: reassign roomId so the message loop below uses the same room.
3172
+ roomId = crypto.randomUUID();
3173
+ const freshWorldId = crypto.randomUUID();
3174
+ const freshServerId = crypto.randomUUID();
3175
+ try {
3176
+ await runtime.ensureConnection({
3177
+ entityId: userId,
3178
+ roomId,
3179
+ worldId: freshWorldId,
3180
+ userName: "User",
3181
+ source: "cli",
3182
+ channelId: `${agentName}-chat`,
3183
+ type: ChannelType.DM,
3184
+ messageServerId: freshServerId,
3185
+ metadata: { ownership: { ownerId: userId } },
3186
+ });
3187
+ // Same ownership metadata fix for the fallback world.
3188
+ const fallbackWorld = await runtime.getWorld(freshWorldId);
3189
+ if (fallbackWorld) {
3190
+ let needsUpdate = false;
3191
+ if (!fallbackWorld.metadata) {
3192
+ fallbackWorld.metadata = {};
3193
+ needsUpdate = true;
3194
+ }
3195
+ if (!fallbackWorld.metadata.ownership ||
3196
+ typeof fallbackWorld.metadata.ownership !== "object" ||
3197
+ fallbackWorld.metadata.ownership.ownerId !==
3198
+ userId) {
3199
+ fallbackWorld.metadata.ownership = { ownerId: userId };
3200
+ needsUpdate = true;
3201
+ }
3202
+ if (needsUpdate) {
3203
+ await runtime.updateWorld(fallbackWorld);
3204
+ }
3205
+ }
3206
+ }
3207
+ catch (retryErr) {
3208
+ logger.error(`[eliza] Chat room setup failed after retry: ${formatError(retryErr)}`);
3209
+ throw retryErr;
3210
+ }
3211
+ }
3212
+ const rl = readline.createInterface({
3213
+ input: process.stdin,
3214
+ output: process.stdout,
3215
+ });
3216
+ console.log(`\n💬 Chat with ${agentName} (type 'exit' to quit)\n`);
3217
+ const prompt = () => {
3218
+ rl.question("You: ", async (input) => {
3219
+ const text = input.trim();
3220
+ if (text.toLowerCase() === "exit" || text.toLowerCase() === "quit") {
3221
+ console.log("\nGoodbye!");
3222
+ rl.close();
3223
+ try {
3224
+ await shutdownRuntime(runtime, "cli shutdown");
3225
+ }
3226
+ catch (err) {
3227
+ logger.warn(`[eliza] Error stopping runtime: ${formatError(err)}`);
3228
+ }
3229
+ process.exit(0);
3230
+ }
3231
+ if (!text) {
3232
+ prompt();
3233
+ return;
3234
+ }
3235
+ try {
3236
+ const message = createMessageMemory({
3237
+ id: crypto.randomUUID(),
3238
+ entityId: userId,
3239
+ roomId,
3240
+ content: {
3241
+ text,
3242
+ source: "client_chat",
3243
+ channelType: ChannelType.DM,
3244
+ },
3245
+ });
3246
+ process.stdout.write(`${agentName}: `);
3247
+ if (!runtime.messageService) {
3248
+ logger.error("[eliza] runtime.messageService is not available — cannot process messages");
3249
+ console.log("[Error: message service unavailable]\n");
3250
+ prompt();
3251
+ return;
3252
+ }
3253
+ await runtime.messageService.handleMessage(runtime, message, async (content) => {
3254
+ if (content?.text) {
3255
+ process.stdout.write(content.text);
3256
+ }
3257
+ return [];
3258
+ });
3259
+ console.log("\n");
3260
+ }
3261
+ catch (err) {
3262
+ // Log the error and continue the prompt loop — don't let a single
3263
+ // failed message kill the interactive session.
3264
+ console.log(`\n[Error: ${formatError(err)}]\n`);
3265
+ logger.error(`[eliza] Chat message handling failed: ${formatError(err)}`);
3266
+ }
3267
+ prompt();
3268
+ });
3269
+ };
3270
+ prompt();
3271
+ }
3272
+ export async function startInCloudMode(config, agentId, opts) {
3273
+ // Cloud mode does not run a local AgentRuntime, but the registry must still
3274
+ // be populated for any code path that touches `STATIC_ELIZA_PLUGINS` while
3275
+ // the cloud proxy is active.
3276
+ await ensureCoreStaticPluginsRegistered();
3277
+ const { CloudManager } = await import("@elizaos/plugin-elizacloud");
3278
+ const cloudConfig = config.cloud;
3279
+ if (!cloudConfig) {
3280
+ throw new Error("Cloud mode requires a cloud configuration block in the config");
3281
+ }
3282
+ logger.info(`[eliza] Starting in cloud mode (agentId=${agentId}, baseUrl=${cloudConfig.baseUrl ?? "(default)"})`);
3283
+ const manager = new CloudManager(cloudConfig, {
3284
+ onStatusChange: (status) => {
3285
+ logger.info(`[eliza] Cloud connection: ${status}`);
3286
+ },
3287
+ });
3288
+ try {
3289
+ await manager.init();
3290
+ const proxy = (await manager.connect(agentId));
3291
+ if (opts?.headless || opts?.serverOnly) {
3292
+ // In headless/server mode, start the API server with the cloud proxy.
3293
+ // The proxy exposes the same interface the API server needs.
3294
+ logger.info(`[eliza] Cloud agent connected (headless). Agent: ${proxy.agentName}`);
3295
+ // Return undefined here; GUI cloud mode is handled through the
3296
+ // dedicated cloud proxy routes instead of a local AgentRuntime.
3297
+ return undefined;
3298
+ }
3299
+ // Interactive CLI mode — simple chat loop against the cloud agent
3300
+ console.log(`\n☁️ Connected to cloud agent "${proxy.agentName}" (${agentId})\n`);
3301
+ console.log("Type a message to chat, or Ctrl+C to quit.\n");
3302
+ const rl = (await import("node:readline")).createInterface({
3303
+ input: process.stdin,
3304
+ output: process.stdout,
3305
+ });
3306
+ const prompt = () => {
3307
+ rl.question("You: ", async (input) => {
3308
+ const text = input.trim();
3309
+ if (!text) {
3310
+ prompt();
3311
+ return;
3312
+ }
3313
+ try {
3314
+ // Use streaming if available
3315
+ let response = "";
3316
+ process.stdout.write(`${proxy.agentName}: `);
3317
+ for await (const chunk of proxy.handleChatMessageStream(text)) {
3318
+ process.stdout.write(chunk);
3319
+ response += chunk;
3320
+ }
3321
+ if (!response) {
3322
+ // Fallback to non-streaming
3323
+ response = await proxy.handleChatMessage(text);
3324
+ process.stdout.write(response);
3325
+ }
3326
+ console.log("\n");
3327
+ }
3328
+ catch (err) {
3329
+ const msg = err instanceof Error ? err.message : String(err);
3330
+ console.error(`\n[error] ${msg}\n`);
3331
+ }
3332
+ prompt();
3333
+ });
3334
+ };
3335
+ rl.on("close", async () => {
3336
+ console.log("\nDisconnecting from cloud agent...");
3337
+ await manager.disconnect();
3338
+ process.exit(0);
3339
+ });
3340
+ prompt();
3341
+ // Keep the process alive
3342
+ return undefined;
3343
+ }
3344
+ catch (err) {
3345
+ const msg = err instanceof Error ? err.message : String(err);
3346
+ logger.error(`[eliza] Failed to connect to cloud agent: ${msg}`);
3347
+ throw new Error(`Failed to connect to cloud agent: ${msg}\n` +
3348
+ "You can retry with `eliza start`, or switch to local mode by setting `deploymentTarget.runtime` to `local`");
3349
+ }
3350
+ }
3351
+ const isDirectRun = (() => {
3352
+ // Mobile (bundled) builds set ELIZA_DISABLE_DIRECT_RUN=1 via Bun's
3353
+ // `--define`. After bundling, `import.meta.url` and `process.argv[1]`
3354
+ // collapse to the same bundle path, so this check spuriously matches and
3355
+ // the runtime self-invokes a SECOND `startEliza()` alongside the CLI's
3356
+ // primary one. The second invocation lacks `{ serverOnly: true }` and
3357
+ // drops into the readline chat loop, which closes on stdin EOF and tears
3358
+ // the whole process down.
3359
+ if (process.env.ELIZA_DISABLE_DIRECT_RUN === "1")
3360
+ return false;
3361
+ const scriptArg = process.argv[1];
3362
+ if (!scriptArg)
3363
+ return false;
3364
+ const normalised = path.resolve(scriptArg);
3365
+ return import.meta.url === pathToFileURL(normalised).href;
3366
+ })();
3367
+ if (isDirectRun) {
3368
+ startEliza().catch((err) => {
3369
+ console.error("[eliza] Fatal error:", err instanceof Error ? (err.stack ?? err.message) : err);
3370
+ process.exit(1);
3371
+ });
3372
+ }