@elizaos/agent 2.0.3-beta.2 → 2.0.3-beta.4

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 (381) hide show
  1. package/__tests__/view-user-journeys.d.ts.map +1 -1
  2. package/__tests__/view-user-journeys.js +52 -41
  3. package/actions/context-signal.d.ts +2 -2
  4. package/actions/files.d.ts +9 -0
  5. package/actions/files.d.ts.map +1 -0
  6. package/actions/files.js +183 -0
  7. package/actions/index.d.ts +17 -17
  8. package/api/accounts-routes.d.ts +1 -1
  9. package/api/accounts-routes.js +1 -1
  10. package/api/agent-admin-routes.d.ts +1 -1
  11. package/api/agent-admin-routes.js +2 -2
  12. package/api/agent-model.d.ts +1 -1
  13. package/api/agent-status-routes.d.ts +1 -3
  14. package/api/agent-status-routes.d.ts.map +1 -1
  15. package/api/agent-status-routes.js +0 -2
  16. package/api/approval-routes.d.ts +38 -0
  17. package/api/approval-routes.d.ts.map +1 -0
  18. package/api/approval-routes.js +223 -0
  19. package/api/background-routes.d.ts +13 -0
  20. package/api/background-routes.d.ts.map +1 -0
  21. package/api/background-routes.js +91 -0
  22. package/api/binance-skill-helpers.d.ts +2 -2
  23. package/api/binance-skill-helpers.js +2 -2
  24. package/api/builtin-views.d.ts.map +1 -1
  25. package/api/builtin-views.js +44 -4
  26. package/api/character-routes.d.ts +1 -1
  27. package/api/chat-augmentation.d.ts.map +1 -1
  28. package/api/chat-augmentation.js +17 -0
  29. package/api/chat-routes.d.ts +29 -2
  30. package/api/chat-routes.d.ts.map +1 -1
  31. package/api/chat-routes.js +76 -1
  32. package/api/commands-routes.d.ts +10 -8
  33. package/api/commands-routes.d.ts.map +1 -1
  34. package/api/commands-routes.js +17 -59
  35. package/api/config-routes.d.ts +1 -1
  36. package/api/config-routes.d.ts.map +1 -1
  37. package/api/config-routes.js +0 -2
  38. package/api/connector-routes.d.ts +1 -1
  39. package/api/conversation-metadata.d.ts +1 -1
  40. package/api/conversation-metadata.d.ts.map +1 -1
  41. package/api/conversation-metadata.js +0 -1
  42. package/api/conversation-routes.d.ts +4 -3
  43. package/api/conversation-routes.d.ts.map +1 -1
  44. package/api/conversation-routes.js +34 -1
  45. package/api/documents-service-loader.d.ts +0 -4
  46. package/api/documents-service-loader.d.ts.map +1 -1
  47. package/api/documents-service-loader.js +0 -2
  48. package/api/files-routes.d.ts +14 -0
  49. package/api/files-routes.d.ts.map +1 -0
  50. package/api/files-routes.js +47 -0
  51. package/api/first-run-routes.d.ts +1 -1
  52. package/api/health-routes.d.ts +2 -2
  53. package/api/index.d.ts +40 -39
  54. package/api/index.d.ts.map +1 -1
  55. package/api/index.js +1 -0
  56. package/api/interactions-routes.d.ts +33 -0
  57. package/api/interactions-routes.d.ts.map +1 -0
  58. package/api/interactions-routes.js +63 -0
  59. package/api/media-runtime.d.ts +2 -1
  60. package/api/media-runtime.d.ts.map +1 -1
  61. package/api/media-runtime.js +64 -7
  62. package/api/media-store.d.ts +36 -0
  63. package/api/media-store.d.ts.map +1 -1
  64. package/api/media-store.js +141 -2
  65. package/api/memory-bounds.d.ts +0 -1
  66. package/api/memory-bounds.d.ts.map +1 -1
  67. package/api/memory-bounds.js +0 -1
  68. package/api/misc-routes.d.ts +1 -1
  69. package/api/model-provider-helpers.d.ts +2 -2
  70. package/api/model-provider-helpers.js +2 -2
  71. package/api/permissions-routes-extra.d.ts +1 -1
  72. package/api/permissions-routes.d.ts +1 -1
  73. package/api/permissions-routes.d.ts.map +1 -1
  74. package/api/permissions-routes.js +8 -7
  75. package/api/plugin-discovery-helpers.d.ts +5 -6
  76. package/api/plugin-discovery-helpers.d.ts.map +1 -1
  77. package/api/plugin-discovery-helpers.js +3 -4
  78. package/api/plugin-runtime-apply.d.ts +2 -2
  79. package/api/plugin-runtime-apply.d.ts.map +1 -1
  80. package/api/plugin-runtime-apply.js +74 -0
  81. package/api/provider-switch-config.d.ts +1 -1
  82. package/api/provider-switch-routes.d.ts +2 -2
  83. package/api/registry-routes.d.ts +1 -1
  84. package/api/registry-service.d.ts +1 -1
  85. package/api/remote-capability-routes.d.ts +2 -2
  86. package/api/remote-capability-routes.d.ts.map +1 -1
  87. package/api/remote-capability-routes.js +19 -0
  88. package/api/server-autonomy-helpers.d.ts +2 -2
  89. package/api/server-helpers-auth.d.ts +10 -0
  90. package/api/server-helpers-auth.d.ts.map +1 -1
  91. package/api/server-helpers-auth.js +16 -210
  92. package/api/server-helpers-config.d.ts +1 -1
  93. package/api/server-helpers-mcp.d.ts +2 -2
  94. package/api/server-helpers-plugin.d.ts +1 -1
  95. package/api/server-helpers-swarm.d.ts +3 -3
  96. package/api/server-helpers-swarm.d.ts.map +1 -1
  97. package/api/server-helpers-swarm.js +15 -5
  98. package/api/server-helpers-wallet.d.ts +1 -1
  99. package/api/server-helpers.d.ts +4 -4
  100. package/api/server-lazy-routes.d.ts +40 -38
  101. package/api/server-lazy-routes.d.ts.map +1 -1
  102. package/api/server-lazy-routes.js +7 -0
  103. package/api/server-route-dispatch.d.ts +2 -2
  104. package/api/server-route-dispatch.d.ts.map +1 -1
  105. package/api/server-route-dispatch.js +7 -0
  106. package/api/server-types.d.ts +9 -7
  107. package/api/server-types.d.ts.map +1 -1
  108. package/api/server.d.ts +19 -19
  109. package/api/server.d.ts.map +1 -1
  110. package/api/server.js +111 -17
  111. package/api/static-file-server.d.ts +2 -2
  112. package/api/static-file-server.js +2 -2
  113. package/api/subscription-routes.d.ts +4 -4
  114. package/api/subscription-routes.js +3 -4
  115. package/api/suggestions-routes.d.ts +1 -1
  116. package/api/suggestions-routes.d.ts.map +1 -1
  117. package/api/suggestions-routes.js +2 -3
  118. package/api/terminal-execution-routing.d.ts +1 -1
  119. package/api/training-service-like.d.ts +1 -1
  120. package/api/trajectory-fallback-routes.d.ts.map +1 -1
  121. package/api/trajectory-fallback-routes.js +21 -1
  122. package/api/update-routes.d.ts +1 -1
  123. package/api/view-registry-types.d.ts +1 -1
  124. package/api/views-registry.d.ts +14 -4
  125. package/api/views-registry.d.ts.map +1 -1
  126. package/api/views-registry.js +107 -72
  127. package/api/views-routes.d.ts +1 -1
  128. package/api/views-routes.d.ts.map +1 -1
  129. package/api/views-routes.js +131 -14
  130. package/api/views-search-index.d.ts +1 -1
  131. package/api/wallet-capability.d.ts +3 -3
  132. package/api/wallet-rpc.d.ts +1 -1
  133. package/api/wallet.d.ts +3 -3
  134. package/api/wallet.d.ts.map +1 -1
  135. package/api/wallet.js +4 -3
  136. package/api/workbench-context.d.ts +1 -1
  137. package/api/workbench-helpers.d.ts +3 -3
  138. package/api/workbench-helpers.js +3 -3
  139. package/api/workbench-routes.d.ts +2 -2
  140. package/api/workbench-vfs-routes.d.ts +1 -1
  141. package/api/ws-event-replay.d.ts +1 -2
  142. package/api/ws-event-replay.d.ts.map +1 -1
  143. package/api/ws-event-replay.js +1 -2
  144. package/api/x-relay-routes.d.ts +2 -2
  145. package/api/x402-route-validation.d.ts +4 -0
  146. package/api/x402-route-validation.d.ts.map +1 -0
  147. package/api/x402-route-validation.js +6 -0
  148. package/assets/view-heroes/background.png +0 -0
  149. package/auth/account-storage.d.ts +1 -1
  150. package/auth/anthropic.d.ts +1 -1
  151. package/auth/credentials.d.ts +2 -2
  152. package/auth/index.d.ts +7 -7
  153. package/auth/oauth-flow.d.ts +2 -2
  154. package/auth/openai-codex.d.ts +1 -1
  155. package/awareness/index.d.ts +1 -1
  156. package/config/config.js +0 -1
  157. package/config/env-vars.d.ts +1 -1
  158. package/config/env-vars.d.ts.map +1 -1
  159. package/config/env-vars.js +0 -1
  160. package/config/index.d.ts +10 -10
  161. package/config/model-metadata.d.ts +1 -1
  162. package/config/owner-contacts.d.ts +1 -1
  163. package/config/schema.d.ts +1 -1
  164. package/hooks/discovery.d.ts +1 -1
  165. package/hooks/eligibility.d.ts +2 -2
  166. package/hooks/index.d.ts +2 -2
  167. package/hooks/loader.d.ts +2 -2
  168. package/hooks/registry.d.ts +1 -1
  169. package/index.d.ts +87 -85
  170. package/index.d.ts.map +1 -1
  171. package/index.js +11 -3
  172. package/package.json +54 -44
  173. package/providers/media-provider.d.ts +1 -1
  174. package/providers/page-scoped-context.d.ts.map +1 -1
  175. package/providers/page-scoped-context.js +1 -70
  176. package/providers/relevant-conversations.d.ts.map +1 -1
  177. package/providers/relevant-conversations.js +8 -9
  178. package/providers/workspace.d.ts +1 -1
  179. package/runtime/actions/web-fetch.d.ts.map +1 -1
  180. package/runtime/actions/web-fetch.js +23 -3
  181. package/runtime/actions/web-search.d.ts +32 -0
  182. package/runtime/actions/web-search.d.ts.map +1 -0
  183. package/runtime/actions/web-search.js +245 -0
  184. package/runtime/advanced-capabilities-config.d.ts +1 -1
  185. package/runtime/boot-telemetry.d.ts +1 -1
  186. package/runtime/conversation-compactor-runtime.d.ts +1 -1
  187. package/runtime/conversation-compactor-runtime.js +1 -1
  188. package/runtime/conversation-compactor.d.ts +1 -1
  189. package/runtime/core-plugins.d.ts.map +1 -1
  190. package/runtime/core-plugins.js +9 -0
  191. package/runtime/custom-actions.d.ts +18 -9
  192. package/runtime/custom-actions.d.ts.map +1 -1
  193. package/runtime/custom-actions.js +85 -23
  194. package/runtime/eliza-plugin.d.ts.map +1 -1
  195. package/runtime/eliza-plugin.js +15 -1
  196. package/runtime/eliza.d.ts +9 -7
  197. package/runtime/eliza.d.ts.map +1 -1
  198. package/runtime/eliza.js +86 -23
  199. package/runtime/first-time-setup.d.ts +1 -3
  200. package/runtime/first-time-setup.d.ts.map +1 -1
  201. package/runtime/first-time-setup.js +0 -2
  202. package/runtime/index.d.ts +18 -18
  203. package/runtime/load-plugin-from-vfs.d.ts +2 -2
  204. package/runtime/mobile-dns.d.ts.map +1 -1
  205. package/runtime/mobile-dns.js +2 -5
  206. package/runtime/operations/classifier.d.ts +1 -1
  207. package/runtime/operations/cold-strategy.d.ts +1 -1
  208. package/runtime/operations/health-checks.d.ts +1 -1
  209. package/runtime/operations/health.d.ts +1 -1
  210. package/runtime/operations/index.d.ts +10 -10
  211. package/runtime/operations/manager.d.ts +3 -3
  212. package/runtime/operations/reload-hot.d.ts +1 -1
  213. package/runtime/operations/repository.d.ts +1 -1
  214. package/runtime/operations/vault-bridge.d.ts +1 -1
  215. package/runtime/plugin-collector.d.ts +6 -1
  216. package/runtime/plugin-collector.d.ts.map +1 -1
  217. package/runtime/plugin-collector.js +11 -28
  218. package/runtime/plugin-lifecycle.d.ts.map +1 -1
  219. package/runtime/plugin-lifecycle.js +1 -0
  220. package/runtime/plugin-resolver.d.ts +2 -2
  221. package/runtime/plugin-resolver.d.ts.map +1 -1
  222. package/runtime/plugin-resolver.js +113 -65
  223. package/runtime/plugin-types.d.ts +1 -1
  224. package/runtime/prompt-optimization.d.ts +4 -4
  225. package/runtime/remote-coding-runner-gate.d.ts +7 -0
  226. package/runtime/remote-coding-runner-gate.d.ts.map +1 -0
  227. package/runtime/remote-coding-runner-gate.js +36 -0
  228. package/runtime/roles/src/index.d.ts +4 -4
  229. package/runtime/roles.d.ts +2 -2
  230. package/runtime/sandbox-character.d.ts +1 -1
  231. package/runtime/tool-call-cache/cache.d.ts +1 -1
  232. package/runtime/tool-call-cache/disk-store.d.ts +1 -1
  233. package/runtime/tool-call-cache/index.d.ts +6 -6
  234. package/runtime/tool-call-cache/key.d.ts +1 -1
  235. package/runtime/tool-call-cache/redact.d.ts +1 -1
  236. package/runtime/tool-call-cache/registry.d.ts +1 -1
  237. package/runtime/tool-call-cache-wrapper.d.ts +7 -9
  238. package/runtime/tool-call-cache-wrapper.d.ts.map +1 -1
  239. package/runtime/tool-call-cache-wrapper.js +6 -11
  240. package/runtime/trajectory-export.d.ts +3 -3
  241. package/runtime/trajectory-internals.d.ts +2 -1
  242. package/runtime/trajectory-internals.d.ts.map +1 -1
  243. package/runtime/trajectory-persistence.d.ts +5 -5
  244. package/runtime/trajectory-steps-reader.d.ts +1 -1
  245. package/runtime/trajectory-steps-writer.d.ts +1 -1
  246. package/runtime/trajectory-storage.d.ts +4 -4
  247. package/runtime/view-action-affinity.d.ts +18 -15
  248. package/runtime/view-action-affinity.d.ts.map +1 -1
  249. package/runtime/view-action-affinity.js +26 -29
  250. package/runtime/web-search-tools.d.ts +4 -1
  251. package/runtime/web-search-tools.d.ts.map +1 -1
  252. package/runtime/web-search-tools.js +37 -9
  253. package/security/index.d.ts +3 -3
  254. package/services/approval/index.d.ts +9 -0
  255. package/services/approval/index.d.ts.map +1 -0
  256. package/services/approval/index.js +8 -0
  257. package/services/approval/service.d.ts +35 -0
  258. package/services/approval/service.d.ts.map +1 -0
  259. package/services/approval/service.js +40 -0
  260. package/services/approval/sql.d.ts +18 -0
  261. package/services/approval/sql.d.ts.map +1 -0
  262. package/services/approval/sql.js +104 -0
  263. package/services/approval/store.d.ts +39 -0
  264. package/services/approval/store.d.ts.map +1 -0
  265. package/services/approval/store.js +534 -0
  266. package/services/approval/types.d.ts +207 -0
  267. package/services/approval/types.d.ts.map +1 -0
  268. package/services/approval/types.js +34 -0
  269. package/services/character-persistence.d.ts +2 -2
  270. package/services/client-chat-sender.d.ts +1 -1
  271. package/services/config-plugin-manager.d.ts +2 -2
  272. package/services/connector-setup-service.d.ts +1 -1
  273. package/services/cove-quote-x509.d.ts +1 -1
  274. package/services/cove-quote.d.ts +2 -2
  275. package/services/dstack-tee-provider.d.ts +1 -1
  276. package/services/file-storage.d.ts +20 -0
  277. package/services/file-storage.d.ts.map +1 -0
  278. package/services/file-storage.js +70 -0
  279. package/services/global-pause/index.d.ts +8 -0
  280. package/services/global-pause/index.d.ts.map +1 -0
  281. package/services/global-pause/index.js +7 -0
  282. package/services/global-pause/service.d.ts +29 -0
  283. package/services/global-pause/service.d.ts.map +1 -0
  284. package/services/global-pause/service.js +34 -0
  285. package/services/global-pause/store.d.ts +31 -0
  286. package/services/global-pause/store.d.ts.map +1 -0
  287. package/services/global-pause/store.js +83 -0
  288. package/services/handoff/index.d.ts +8 -0
  289. package/services/handoff/index.d.ts.map +1 -0
  290. package/services/handoff/index.js +7 -0
  291. package/services/handoff/service.d.ts +29 -0
  292. package/services/handoff/service.d.ts.map +1 -0
  293. package/services/handoff/service.js +34 -0
  294. package/services/handoff/store.d.ts +76 -0
  295. package/services/handoff/store.d.ts.map +1 -0
  296. package/services/handoff/store.js +148 -0
  297. package/services/index.d.ts +30 -31
  298. package/services/index.d.ts.map +1 -1
  299. package/services/index.js +0 -6
  300. package/services/js-runtime-bridge.d.ts.map +1 -1
  301. package/services/js-runtime-bridge.js +8 -2
  302. package/services/knowledge-graph/index.d.ts +4 -4
  303. package/services/knowledge-graph/service.d.ts +2 -2
  304. package/services/pending-prompts/index.d.ts +8 -0
  305. package/services/pending-prompts/index.d.ts.map +1 -0
  306. package/services/pending-prompts/index.js +7 -0
  307. package/services/pending-prompts/service.d.ts +34 -0
  308. package/services/pending-prompts/service.d.ts.map +1 -0
  309. package/services/pending-prompts/service.js +68 -0
  310. package/services/pending-prompts/store.d.ts +70 -0
  311. package/services/pending-prompts/store.d.ts.map +1 -0
  312. package/services/pending-prompts/store.js +191 -0
  313. package/services/plugin-compiler.d.ts +1 -1
  314. package/services/plugin-installer.d.ts.map +1 -1
  315. package/services/plugin-installer.js +21 -11
  316. package/services/plugin-manager-types.d.ts +1 -1
  317. package/services/proactive-interaction-decider.d.ts +62 -11
  318. package/services/proactive-interaction-decider.d.ts.map +1 -1
  319. package/services/proactive-interaction-decider.js +223 -35
  320. package/services/push/apns-provider.d.ts +1 -1
  321. package/services/push/fcm-provider.d.ts +1 -1
  322. package/services/push/notification-push-service.d.ts +2 -2
  323. package/services/registry-client-app-meta.d.ts +1 -1
  324. package/services/registry-client-endpoints.d.ts +2 -2
  325. package/services/registry-client-local.d.ts +1 -1
  326. package/services/registry-client-network.d.ts +1 -1
  327. package/services/registry-client-queries.d.ts +1 -1
  328. package/services/registry-client.d.ts +3 -3
  329. package/services/relationships-graph.d.ts +1 -1
  330. package/services/remote-capability-cloud-sandbox.d.ts +3 -3
  331. package/services/remote-capability-endpoint-conformance.d.ts +1 -1
  332. package/services/remote-capability-endpoint-provider.d.ts +4 -4
  333. package/services/remote-capability-url-endpoint-providers.d.ts +1 -1
  334. package/services/remote-plugin-adapter.d.ts.map +1 -1
  335. package/services/remote-plugin-adapter.js +3 -0
  336. package/services/remote-plugin-bridge.d.ts.map +1 -1
  337. package/services/remote-plugin-bridge.js +97 -26
  338. package/services/remote-signing-service.d.ts +4 -4
  339. package/services/research-task-executor.d.ts +1 -1
  340. package/services/sandbox-manager.d.ts +1 -1
  341. package/services/self-updater.d.ts +1 -1
  342. package/services/self-updater.d.ts.map +1 -1
  343. package/services/self-updater.js +23 -9
  344. package/services/shell-execution-router.d.ts +1 -1
  345. package/services/shell-execution-router.d.ts.map +1 -1
  346. package/services/shell-execution-router.js +19 -2
  347. package/services/tee-boot-gate-state.d.ts +1 -1
  348. package/services/tee-boot-gate.d.ts +4 -4
  349. package/services/tee-confidential-inference.d.ts +3 -3
  350. package/services/tee-key-release.d.ts +2 -2
  351. package/services/tee-model-key-boot.d.ts +4 -4
  352. package/services/tee-policy.d.ts +1 -1
  353. package/services/tee-production-profile.d.ts +1 -1
  354. package/services/tee-release-policy.d.ts +1 -1
  355. package/services/tee-revocation.d.ts +2 -2
  356. package/services/tee-runtime-config.d.ts +1 -1
  357. package/services/tee-sealed-volume.d.ts +3 -3
  358. package/services/tee-signer-backend.d.ts +3 -3
  359. package/services/update-checker.d.ts +1 -1
  360. package/services/vault-signer-backend.d.ts +1 -1
  361. package/services/vfs-git.d.ts +1 -1
  362. package/test-support/index.d.ts +3 -3
  363. package/triggers/runtime.d.ts +1 -1
  364. package/triggers/scheduling.d.ts +3 -22
  365. package/triggers/scheduling.d.ts.map +1 -1
  366. package/triggers/scheduling.js +2 -214
  367. package/tui/agent-terminal-tui.d.ts.map +1 -1
  368. package/tui/agent-terminal-tui.js +174 -72
  369. package/types/index.d.ts +3 -3
  370. package/api/nfa-routes.d.ts +0 -6
  371. package/api/nfa-routes.d.ts.map +0 -1
  372. package/api/nfa-routes.js +0 -125
  373. package/api/server-auth.d.ts +0 -46
  374. package/api/server-auth.d.ts.map +0 -1
  375. package/api/server-auth.js +0 -504
  376. package/runtime/restart.d.ts +0 -9
  377. package/runtime/restart.d.ts.map +0 -1
  378. package/runtime/restart.js +0 -8
  379. package/test-utils/sqlite-compat.d.ts +0 -23
  380. package/test-utils/sqlite-compat.d.ts.map +0 -1
  381. package/test-utils/sqlite-compat.js +0 -214
@@ -13,7 +13,7 @@
13
13
  * - the trailing N messages (default 6) verbatim
14
14
  * - tool_call / tool_result pairing across the boundary
15
15
  */
16
- import { type Compactor, type CompactorMessage } from "./conversation-compactor.types.ts";
16
+ import { type Compactor, type CompactorMessage } from "./conversation-compactor.types.js";
17
17
  /**
18
18
  * Identify the index that splits compacted-region (indices < boundary) from
19
19
  * preserved-tail (indices >= boundary), shifting the boundary outward (toward
@@ -1 +1 @@
1
- {"version":3,"file":"core-plugins.d.ts","sourceRoot":"","sources":["../../src/runtime/core-plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAGjD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAIhD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAahD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAIzD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAI7D,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAqBzC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAQ9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EA4BvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAElD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EA4BlD,CAAC"}
1
+ {"version":3,"file":"core-plugins.d.ts","sourceRoot":"","sources":["../../src/runtime/core-plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAGjD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAahD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAahD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAIzD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAI7D,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAqBzC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAQ9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EA4BvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAElD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EA4BlD,CAAC"}
@@ -38,6 +38,15 @@ export const MOBILE_CORE_PLUGINS = [
38
38
  "@elizaos/plugin-sql",
39
39
  "@elizaos/plugin-background-runner",
40
40
  "@elizaos/plugin-device-filesystem",
41
+ // Screen understanding on mobile (EPIC #9105): the GET_SCREEN op + the
42
+ // renderer-pulled screen-capture bridge + the IMAGE_DESCRIPTION describe
43
+ // path. plugin-vision is now mobile-safe — `sharp` is lazy-loaded with a
44
+ // pure-JS fallback and the native YOLO/face detectors are dynamic-imported,
45
+ // so module-eval no longer pulls a native addon. VisionService degrades
46
+ // gracefully on a phone (camera mode finds no capture tool → warns, never
47
+ // starts a processing loop), and its computeruse OCR/set-of-marks bridges
48
+ // are best-effort dynamic imports that no-op without plugin-computeruse.
49
+ "@elizaos/plugin-vision",
41
50
  ];
42
51
  /**
43
52
  * View-providing plugins that must register their `/api/views` entries on EVERY
@@ -7,7 +7,7 @@
7
7
  * @module runtime/custom-actions
8
8
  */
9
9
  import { type Action, type IAgentRuntime } from "@elizaos/core";
10
- import type { CustomActionDef } from "../config/types.eliza.ts";
10
+ import type { CustomActionDef } from "../config/types.eliza.js";
11
11
  /**
12
12
  * Store the runtime reference so we can hot-register actions later.
13
13
  * Called once from plugin.init().
@@ -33,7 +33,14 @@ type PinnedFetchInput = {
33
33
  timeoutMs: number;
34
34
  };
35
35
  type PinnedFetchImpl = (input: PinnedFetchInput) => Promise<Response>;
36
+ type DnsLookupRecord = {
37
+ address?: unknown;
38
+ } | string;
39
+ type DnsLookupAllFn = (hostname: string, options: {
40
+ all: true;
41
+ }) => Promise<DnsLookupRecord[] | DnsLookupRecord>;
36
42
  export declare function __setPinnedFetchImplForTests(impl: PinnedFetchImpl | null): void;
43
+ export declare function __setDnsLookupImplForTests(impl: DnsLookupAllFn | null): void;
37
44
  export interface GuardedHttpGetOptions {
38
45
  /** Request timeout in milliseconds. Defaults to the custom-action cap. */
39
46
  timeoutMs?: number;
@@ -52,16 +59,18 @@ export interface GuardedHttpGetResult {
52
59
  /** True when the URL was rejected by the SSRF / scheme guard. */
53
60
  blocked: boolean;
54
61
  }
62
+ export interface GuardedHttpPostOptions extends GuardedHttpGetOptions {
63
+ /** Request body. Sent as `application/json` unless `Content-Type` is set. */
64
+ body: string;
65
+ }
66
+ /** SSRF-guarded https-only GET (custom actions + the built-in WEB_FETCH action). */
67
+ export declare function performGuardedHttpGet(url: string, opts?: GuardedHttpGetOptions): Promise<GuardedHttpGetResult>;
55
68
  /**
56
- * SSRF-guarded, https-only, GET-only HTTP fetch shared by custom actions and
57
- * the built-in WEB_FETCH action.
58
- *
59
- * Reuses {@link resolveUrlSafety} (DNS-pinned private/link-local IP blocking via
60
- * the security network policy) and {@link fetchWithPinnedTarget}. Enforces an
61
- * https scheme, rejects redirects, and caps both the timeout and the number of
62
- * body bytes read.
69
+ * SSRF-guarded HTTPS POST with a body (default `application/json`) used by
70
+ * inline actions that call a public JSON/MCP endpoint (e.g. the keyless
71
+ * web-search MCP). Same guard as {@link performGuardedHttpGet}.
63
72
  */
64
- export declare function performGuardedHttpGet(url: string, opts?: GuardedHttpGetOptions): Promise<GuardedHttpGetResult>;
73
+ export declare function performGuardedHttpPost(url: string, opts: GuardedHttpPostOptions): Promise<GuardedHttpGetResult>;
65
74
  export declare function loadCustomActions(): Action[];
66
75
  export declare function buildTestHandler(def: CustomActionDef): (params: Record<string, string>) => Promise<{
67
76
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"custom-actions.d.ts","sourceRoot":"","sources":["../../src/runtime/custom-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,aAAa,EAEnB,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AASlC;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEpE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAK5E;AA2BD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAoRtE,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,eAAe,GAAG,IAAI,GAC3B,IAAI,CAEN;AA8JD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,EAAE,EAAE,OAAO,CAAC;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAwC/B;AAkMD,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAa5C;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,GACnB,CACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAE5C"}
1
+ {"version":3,"file":"custom-actions.d.ts","sourceRoot":"","sources":["../../src/runtime/custom-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,aAAa,EAEnB,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AASlC;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEpE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAK5E;AA2BD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtE,KAAK,eAAe,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC;AACtD,KAAK,cAAc,GAAG,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,KACnB,OAAO,CAAC,eAAe,EAAE,GAAG,eAAe,CAAC,CAAC;AAgTlD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,eAAe,GAAG,IAAI,GAC3B,IAAI,CAEN;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAE5E;AAmKD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,EAAE,EAAE,OAAO,CAAC;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAgBD,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAmED,oFAAoF;AACpF,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAkMD,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAa5C;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,GACnB,CACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAE5C"}
@@ -52,6 +52,7 @@ export class CustomActionTimeoutError extends Error {
52
52
  this.name = "CustomActionTimeoutError";
53
53
  }
54
54
  }
55
+ let dnsLookupImpl = dnsLookup;
55
56
  function getApiPort() {
56
57
  return String(resolveServerOnlyPort(process.env));
57
58
  }
@@ -143,6 +144,17 @@ function shellEscape(value) {
143
144
  function isBlockedIp(ip) {
144
145
  return isBlockedPrivateOrLinkLocalIp(ip);
145
146
  }
147
+ function normalizeDnsAddress(record) {
148
+ const raw = typeof record === "string"
149
+ ? record
150
+ : record && typeof record === "object"
151
+ ? record.address
152
+ : undefined;
153
+ if (typeof raw !== "string")
154
+ return null;
155
+ const trimmed = raw.trim();
156
+ return trimmed.length > 0 ? trimmed : null;
157
+ }
146
158
  function toRequestHeaders(headers) {
147
159
  const normalized = {};
148
160
  headers.forEach((value, key) => {
@@ -236,7 +248,20 @@ async function requestWithPinnedAddress(input) {
236
248
  method,
237
249
  path: `${url.pathname}${url.search}`,
238
250
  headers: toRequestHeaders(headers),
239
- lookup: (_hostname, _options, callback) => {
251
+ // Honor the `all` option: Node 20+ defaults autoSelectFamily=true and, for
252
+ // dual-stack hosts, calls lookup with `{ all: true }` expecting an ARRAY
253
+ // of `{ address, family }`. Returning the single-arg form there makes Node
254
+ // read the address string as an array (`addr[0].address` -> undefined) and
255
+ // throw "Invalid IP address: undefined", failing every pinned fetch to a
256
+ // dual-stack host (e.g. coingecko). Branch on the option to satisfy both.
257
+ lookup: (_hostname, options, callback) => {
258
+ const wantsAll = typeof options === "object" &&
259
+ options !== null &&
260
+ options.all === true;
261
+ if (wantsAll) {
262
+ callback(null, [{ address: target.pinnedAddress, family }]);
263
+ return;
264
+ }
240
265
  callback(null, target.pinnedAddress, family);
241
266
  },
242
267
  ...(url.protocol === "https:"
@@ -270,6 +295,9 @@ let pinnedFetchImpl = requestWithPinnedAddress;
270
295
  export function __setPinnedFetchImplForTests(impl) {
271
296
  pinnedFetchImpl = impl ?? requestWithPinnedAddress;
272
297
  }
298
+ export function __setDnsLookupImplForTests(impl) {
299
+ dnsLookupImpl = impl ?? dnsLookup;
300
+ }
273
301
  async function resolveUrlSafety(url) {
274
302
  try {
275
303
  const parsed = new URL(url);
@@ -304,10 +332,15 @@ async function resolveUrlSafety(url) {
304
332
  },
305
333
  };
306
334
  }
307
- const records = await dnsLookup(hostname, { all: true });
308
- const addresses = Array.isArray(records) ? records : [records];
309
- for (const entry of addresses) {
310
- if (isBlockedIp(entry.address)) {
335
+ const records = await dnsLookupImpl(hostname, { all: true });
336
+ const addresses = (Array.isArray(records) ? records : [records])
337
+ .map(normalizeDnsAddress)
338
+ .filter((address) => Boolean(address));
339
+ if (addresses.length === 0) {
340
+ return { blocked: true, target: null };
341
+ }
342
+ for (const address of addresses) {
343
+ if (isBlockedIp(address)) {
311
344
  return { blocked: true, target: null };
312
345
  }
313
346
  }
@@ -316,7 +349,7 @@ async function resolveUrlSafety(url) {
316
349
  target: {
317
350
  parsed,
318
351
  hostname,
319
- pinnedAddress: addresses[0]?.address ?? "",
352
+ pinnedAddress: addresses[0] ?? "",
320
353
  },
321
354
  };
322
355
  }
@@ -355,7 +388,7 @@ async function buildPinnedFetchInit(input, init) {
355
388
  };
356
389
  }
357
390
  async function fetchWithPinnedTarget(target, init, timeoutMs) {
358
- if (!target.pinnedAddress) {
391
+ if (!target.pinnedAddress || net.isIP(target.pinnedAddress) === 0) {
359
392
  throw new Error("Blocked: cannot make requests to internal network addresses");
360
393
  }
361
394
  return pinnedFetchImpl({
@@ -398,16 +431,27 @@ async function readBodyTextCapped(response, maxChars) {
398
431
  }
399
432
  return text;
400
433
  }
434
+ // Default User-Agent for guarded GETs. Many public REST/JSON APIs (crypto
435
+ // price, weather, news endpoints) reject undici's default `node` User-Agent - or
436
+ // a missing one - with HTTP 403, which silently broke every WEB_FETCH live-info
437
+ // lookup. A browser-like string is what these WAF-fronted endpoints accept; it
438
+ // is overridable via ELIZA_WEB_FETCH_USER_AGENT so operators can refresh it
439
+ // without a code change, and any caller-supplied User-Agent header still wins.
440
+ const GUARDED_GET_DEFAULT_USER_AGENT = process.env.ELIZA_WEB_FETCH_USER_AGENT?.trim() ||
441
+ [
442
+ "Mozilla/5.0 (X11; Linux x86_64)",
443
+ "AppleWebKit/537.36 (KHTML, like Gecko)",
444
+ "Chrome/124.0.0.0 Safari/537.36",
445
+ ].join(" ");
401
446
  /**
402
- * SSRF-guarded, https-only, GET-only HTTP fetch shared by custom actions and
403
- * the built-in WEB_FETCH action.
404
- *
405
- * Reuses {@link resolveUrlSafety} (DNS-pinned private/link-local IP blocking via
406
- * the security network policy) and {@link fetchWithPinnedTarget}. Enforces an
407
- * https scheme, rejects redirects, and caps both the timeout and the number of
408
- * body bytes read.
447
+ * Single SSRF-guarded, https-only HTTP request used by both the GET and POST
448
+ * wrappers below — keeping the guard (DNS-pinned private/link-local blocking via
449
+ * {@link resolveUrlSafety} + {@link fetchWithPinnedTarget}, https-only scheme,
450
+ * redirect rejection, timeout + body cap) in ONE place so a future safety fix
451
+ * never has to be made twice. Public callers use {@link performGuardedHttpGet} /
452
+ * {@link performGuardedHttpPost}.
409
453
  */
410
- export async function performGuardedHttpGet(url, opts = {}) {
454
+ async function performGuardedHttpRequest(url, opts) {
411
455
  const timeoutMs = opts.timeoutMs ?? CUSTOM_ACTION_FETCH_TIMEOUT_MS;
412
456
  const maxChars = opts.maxChars ?? GUARDED_GET_MAX_BYTES;
413
457
  let parsed;
@@ -424,10 +468,21 @@ export async function performGuardedHttpGet(url, opts = {}) {
424
468
  if (safety.blocked) {
425
469
  return { ok: false, status: 0, text: "", blocked: true };
426
470
  }
471
+ // Build headers via the Headers API so a caller-supplied header (in any
472
+ // casing) cleanly overrides the default rather than being comma-joined onto it.
473
+ const headers = new Headers({ "User-Agent": GUARDED_GET_DEFAULT_USER_AGENT });
474
+ if (opts.body !== undefined)
475
+ headers.set("Content-Type", "application/json");
476
+ if (opts.headers) {
477
+ for (const [key, value] of Object.entries(opts.headers)) {
478
+ headers.set(key, value);
479
+ }
480
+ }
427
481
  const fetchOpts = {
428
- method: "GET",
429
- headers: opts.headers,
482
+ method: opts.method,
483
+ headers,
430
484
  redirect: "manual",
485
+ ...(opts.body !== undefined ? { body: opts.body } : {}),
431
486
  };
432
487
  const response = safety.target
433
488
  ? await fetchWithPinnedTarget(safety.target, fetchOpts, timeoutMs)
@@ -436,12 +491,19 @@ export async function performGuardedHttpGet(url, opts = {}) {
436
491
  return { ok: false, status: response.status, text: "", blocked: true };
437
492
  }
438
493
  const text = await readBodyTextCapped(response, maxChars);
439
- return {
440
- ok: response.ok,
441
- status: response.status,
442
- text,
443
- blocked: false,
444
- };
494
+ return { ok: response.ok, status: response.status, text, blocked: false };
495
+ }
496
+ /** SSRF-guarded https-only GET (custom actions + the built-in WEB_FETCH action). */
497
+ export async function performGuardedHttpGet(url, opts = {}) {
498
+ return performGuardedHttpRequest(url, { ...opts, method: "GET" });
499
+ }
500
+ /**
501
+ * SSRF-guarded HTTPS POST with a body (default `application/json`) — used by
502
+ * inline actions that call a public JSON/MCP endpoint (e.g. the keyless
503
+ * web-search MCP). Same guard as {@link performGuardedHttpGet}.
504
+ */
505
+ export async function performGuardedHttpPost(url, opts) {
506
+ return performGuardedHttpRequest(url, { ...opts, method: "POST" });
445
507
  }
446
508
  function buildHandler(handler, paramDefs) {
447
509
  if (!VALID_HANDLER_TYPES.has(handler.type)) {
@@ -1 +1 @@
1
- {"version":3,"file":"eliza-plugin.d.ts","sourceRoot":"","sources":["../../src/runtime/eliza-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAiB,MAAM,EAAgB,MAAM,eAAe,CAAC;AA0DzE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAmBF,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA+KpE"}
1
+ {"version":3,"file":"eliza-plugin.d.ts","sourceRoot":"","sources":["../../src/runtime/eliza-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAiB,MAAM,EAAgB,MAAM,eAAe,CAAC;AAkEzE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAmBF,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAqLpE"}
@@ -9,6 +9,7 @@ import { AgentEventService, logger, NotificationService, promoteSubactionsToActi
9
9
  import { compactConversationAction } from "../actions/compact-conversation.js";
10
10
  import { contactAction } from "../actions/contact.js";
11
11
  import { databaseAction } from "../actions/database.js";
12
+ import { filesAction } from "../actions/files.js";
12
13
  import { logsAction } from "../actions/logs.js";
13
14
  import { memoryAction } from "../actions/memories.js";
14
15
  import { notifyAction } from "../actions/notify.js";
@@ -18,6 +19,8 @@ import { runtimeAction } from "../actions/runtime.js";
18
19
  import { settingsAction } from "../actions/settings-actions.js";
19
20
  import { terminalAction } from "../actions/terminal.js";
20
21
  import { triggerAction } from "../actions/trigger.js";
22
+ import { backgroundGenerateImageRoute } from "../api/background-routes.js";
23
+ import { filesRoutes } from "../api/files-routes.js";
21
24
  import { mediaFileRoute, registerMediaGcTask, registerMediaPipelineHook, } from "../api/media-runtime.js";
22
25
  import { adminPanelProvider } from "../providers/admin-panel.js";
23
26
  import { adminTrustProvider } from "../providers/admin-trust.js";
@@ -36,9 +39,14 @@ import { createOngoingTasksProvider } from "../providers/tasks.js";
36
39
  import { uiCatalogProvider } from "../providers/ui-catalog.js";
37
40
  import { createUserNameProvider } from "../providers/user-name.js";
38
41
  import { createWorkspaceProvider } from "../providers/workspace-provider.js";
42
+ import { ApprovalService } from "../services/approval/index.js";
39
43
  import { ElizaCharacterPersistenceService } from "../services/character-persistence.js";
44
+ import { LocalFileStorageService } from "../services/file-storage.js";
45
+ import { GlobalPauseService } from "../services/global-pause/index.js";
46
+ import { HandoffService } from "../services/handoff/index.js";
40
47
  import { KnowledgeGraphService, knowledgeGraphSchema, } from "../services/knowledge-graph/index.js";
41
48
  import { AgentMediaGenerationService } from "../services/media-generation.js";
49
+ import { PendingPromptsService } from "../services/pending-prompts/index.js";
42
50
  import { PermissionRegistry } from "../services/permissions-registry.js";
43
51
  import { NotificationPushService } from "../services/push/notification-push-service.js";
44
52
  import { resolveDefaultAgentWorkspaceDir } from "../shared/workspace-resolution.js";
@@ -82,8 +90,13 @@ export function createElizaPlugin(config) {
82
90
  NotificationPushService,
83
91
  ElizaCharacterPersistenceService,
84
92
  AgentMediaGenerationService,
93
+ LocalFileStorageService,
85
94
  PermissionRegistry,
86
95
  KnowledgeGraphService,
96
+ PendingPromptsService,
97
+ GlobalPauseService,
98
+ HandoffService,
99
+ ApprovalService,
87
100
  ],
88
101
  init: async (_pluginConfig, runtime) => {
89
102
  registerTriggerTaskWorker(runtime);
@@ -165,7 +178,7 @@ export function createElizaPlugin(config) {
165
178
  ],
166
179
  // Public media route — only reached on iOS (in-process dispatch, no HTTP
167
180
  // server). HTTP platforms serve media via the pre-auth handler in server.ts.
168
- routes: [mediaFileRoute],
181
+ routes: [mediaFileRoute, backgroundGenerateImageRoute, ...filesRoutes],
169
182
  actions: [
170
183
  terminalAction,
171
184
  ...promoteSubactionsToActions(triggerAction),
@@ -180,6 +193,7 @@ export function createElizaPlugin(config) {
180
193
  compactConversationAction,
181
194
  notifyAction,
182
195
  ...promoteSubactionsToActions(memoryAction),
196
+ filesAction,
183
197
  // SCHEDULE_FOLLOW_UP is now the `followup` op on contactAction.
184
198
  // ARCHIVE_CODING_TASK / REOPEN_CODING_TASK live as ops on the TASKS
185
199
  // parent in @elizaos/plugin-agent-orchestrator (also surfaced via the
@@ -1,10 +1,10 @@
1
- export { CHANNEL_PLUGIN_MAP, collectPluginNames, OPTIONAL_PLUGIN_MAP, PROVIDER_PLUGIN_MAP, } from "./plugin-collector.ts";
2
- export { CUSTOM_PLUGINS_DIRNAME, EJECTED_PLUGINS_DIRNAME, ensureBrowserServerLink, findPluginBrowserStagehandDir, findRuntimePluginExport, mergeDropInPlugins, type PluginModuleShape, type ResolvedPlugin, repairBrokenInstallRecord, resolveElizaPluginImportSpecifier, resolvePackageEntry, STATIC_ELIZA_PLUGINS, scanDropInPlugins, } from "./plugin-types.ts";
1
+ export { CHANNEL_PLUGIN_MAP, collectPluginNames, OPTIONAL_PLUGIN_MAP, PROVIDER_PLUGIN_MAP, } from "./plugin-collector.js";
2
+ export { CUSTOM_PLUGINS_DIRNAME, EJECTED_PLUGINS_DIRNAME, ensureBrowserServerLink, findPluginBrowserStagehandDir, findRuntimePluginExport, mergeDropInPlugins, type PluginModuleShape, type ResolvedPlugin, repairBrokenInstallRecord, resolveElizaPluginImportSpecifier, resolvePackageEntry, STATIC_ELIZA_PLUGINS, scanDropInPlugins, } from "./plugin-types.js";
3
3
  import { AgentRuntime, type LogEntry, type Plugin } from "@elizaos/core";
4
- import { buildCharacterFromConfig } from "./build-character-config.ts";
5
- import { resolvePreferredProviderId, resolvePreferredProviderPluginName, resolvePrimaryModel } from "./model-resolution.ts";
6
- import { type ElizaConfig } from "../config/config.ts";
7
- import { BLOCKING_CORE_PLUGINS, CORE_PLUGINS, DEFERRED_CORE_PLUGINS, LEAN_CHAT_PLUGINS, OPTIONAL_CORE_PLUGINS } from "./core-plugins.ts";
4
+ import { buildCharacterFromConfig } from "./build-character-config.js";
5
+ import { resolvePreferredProviderId, resolvePreferredProviderPluginName, resolvePrimaryModel } from "./model-resolution.js";
6
+ import { type ElizaConfig } from "../config/config.js";
7
+ import { BLOCKING_CORE_PLUGINS, CORE_PLUGINS, DEFERRED_CORE_PLUGINS, LEAN_CHAT_PLUGINS, OPTIONAL_CORE_PLUGINS } from "./core-plugins.js";
8
8
  export declare function ensureDeferredCoreStaticPluginsRegistered(): Promise<void>;
9
9
  /**
10
10
  * Static-plugin registration for the CLOUD-HOSTED topology only (the agent runs
@@ -54,7 +54,9 @@ export declare function configureLocalEmbeddingPlugin(_plugin: Plugin, config?:
54
54
  * PGlite manager, so restarts must close the adapter or the next runtime can
55
55
  * silently reuse the same broken manager instance.
56
56
  */
57
- export declare function shutdownRuntime(runtime: AgentRuntime | null | undefined, context: string): Promise<void>;
57
+ export declare function shutdownRuntime(runtime: AgentRuntime | null | undefined, context: string, options?: {
58
+ fast?: boolean;
59
+ }): Promise<void>;
58
60
  /**
59
61
  * Remove duplicate actions across an ordered list of plugins.
60
62
  *
@@ -1 +1 @@
1
- {"version":3,"file":"eliza.d.ts","sourceRoot":"","sources":["../../src/runtime/eliza.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eliza.d.ts","sourceRoot":"","sources":["../../src/runtime/eliza.ts"],"names":[],"mappings":"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"}
package/runtime/eliza.js CHANGED
@@ -32,6 +32,7 @@ import { runFirstTimeSetup } from "./first-time-setup.js";
32
32
  import { resolveConfigEnvForProcess } from "./operations/vault-bridge.js";
33
33
  import { resolvePlugins, } from "./plugin-resolver.js";
34
34
  import { CUSTOM_PLUGINS_DIRNAME as CUSTOM_RUNTIME_PLUGINS_DIRNAME, STATIC_ELIZA_PLUGINS, } from "./plugin-types.js";
35
+ import { shouldLoadRemoteCodingRunnerForBoot } from "./remote-coding-runner-gate.js";
35
36
  export { CHANNEL_PLUGIN_MAP, collectPluginNames, OPTIONAL_PLUGIN_MAP, PROVIDER_PLUGIN_MAP, } from "./plugin-collector.js";
36
37
  export { CUSTOM_PLUGINS_DIRNAME, EJECTED_PLUGINS_DIRNAME, ensureBrowserServerLink, findPluginBrowserStagehandDir, findRuntimePluginExport, mergeDropInPlugins, repairBrokenInstallRecord, resolveElizaPluginImportSpecifier, resolvePackageEntry, STATIC_ELIZA_PLUGINS, scanDropInPlugins, } from "./plugin-types.js";
37
38
  // resolvePlugins is re-exported via index.ts from ./plugin-resolver
@@ -90,6 +91,7 @@ async function loadE2BCapabilityRouterModule() {
90
91
  /* @vite-ignore */ moduleId)));
91
92
  }
92
93
  import { debugLogResolvedContext, validateRuntimeContext, } from "../api/plugin-validation.js";
94
+ import { listViews } from "../api/views-registry.js";
93
95
  import { getWalletAddresses, syncSolanaPublicKeyEnv } from "../api/wallet.js";
94
96
  import { configFileExists, loadElizaConfig, } from "../config/config.js";
95
97
  import { CONNECTOR_ENV_MAP, collectConfigEnvVars, collectConnectorEnvVars, } from "../config/env-vars.js";
@@ -111,7 +113,8 @@ import { createPgliteInitError, getPgliteErrorCode, PGLITE_ERROR_CODES, } from "
111
113
  import { installRuntimePluginLifecycle } from "./plugin-lifecycle.js";
112
114
  import { validateIntentActionMap } from "./prompt-compaction.js";
113
115
  import rolesPlugin from "./roles.js";
114
- import { shouldEnableTrajectoryLoggingByDefault } from "./trajectory-persistence.js";
116
+ import { installDatabaseTrajectoryLogger, shouldEnableTrajectoryLoggingByDefault, } from "./trajectory-persistence.js";
117
+ import { validateViewActionMap, validateViewCoverage, } from "./view-action-affinity.js";
115
118
  function isPluginSqlResolutionError(err) {
116
119
  const message = err instanceof Error ? err.message : String(err);
117
120
  return (message.includes("Cannot find module '@elizaos/plugin-sql'") ||
@@ -343,7 +346,12 @@ const CORE_STATIC_PLUGIN_REGISTRATIONS = [
343
346
  packageName: "@elizaos/plugin-gitpathologist",
344
347
  phase: "deferred",
345
348
  required: false,
346
- load: () => getOptionalPlugin("@elizaos/plugin-gitpathologist"),
349
+ // Not in the mobile bundle — attempting the import there hangs the full
350
+ // 30s deferred-plugin timeout before being skipped. Skip it up front on
351
+ // android/ios (it's a desktop dev tool, already gated in plugin-collector).
352
+ load: () => isMobilePlatform()
353
+ ? Promise.resolve(null)
354
+ : getOptionalPlugin("@elizaos/plugin-gitpathologist"),
347
355
  },
348
356
  ];
349
357
  let _blockingStaticPluginsRegistered = false;
@@ -560,7 +568,10 @@ function registerSignalShutdownHandlers(context) {
560
568
  try {
561
569
  const runtime = current?.getRuntime();
562
570
  if (runtime) {
563
- await shutdownRuntime(runtime, "signal shutdown");
571
+ // SIGINT/SIGTERM is an interactive/dev teardown — use the capped fast
572
+ // path so the process exits promptly instead of waiting on in-flight
573
+ // deferred service starts or an embedding-queue flush (#9605).
574
+ await shutdownRuntime(runtime, "signal shutdown", { fast: true });
564
575
  }
565
576
  }
566
577
  catch (err) {
@@ -622,7 +633,7 @@ export async function configureLocalEmbeddingPlugin(_plugin, config) {
622
633
  const { detectEmbeddingPreset } = await import("@elizaos/plugin-local-inference/runtime/embedding-presets");
623
634
  const detectedPreset = detectEmbeddingPreset();
624
635
  const SQL_COMPATIBLE_EMBEDDING_DIMENSIONS = new Set([
625
- 384, 512, 768, 1024, 1536, 3072,
636
+ 384, 512, 768, 1024, 1536, 2048, 3072,
626
637
  ]);
627
638
  const normalizeEmbeddingDimensions = (rawValue) => {
628
639
  if (!rawValue)
@@ -911,13 +922,15 @@ function _redactUserSegments(filepath) {
911
922
  * PGlite manager, so restarts must close the adapter or the next runtime can
912
923
  * silently reuse the same broken manager instance.
913
924
  */
914
- export async function shutdownRuntime(runtime, context) {
925
+ export async function shutdownRuntime(runtime, context, options = {}) {
915
926
  if (!runtime)
916
927
  return;
917
928
  const adapter = runtime.adapter;
918
929
  let firstError = null;
919
930
  try {
920
- await runtime.stop();
931
+ // Interactive/signal teardown asks for the capped fast path so Ctrl-C does
932
+ // not block on a slow deferred service start or a long embedding drain.
933
+ await runtime.stop(options.fast ? { fast: true } : undefined);
921
934
  }
922
935
  catch (err) {
923
936
  firstError = err;
@@ -1055,6 +1068,18 @@ async function installPromptOptimizationLayer(runtime, context, config) {
1055
1068
  async function prepareRuntimeForTrajectoryCapture(runtime, context, config) {
1056
1069
  await waitForTrajectoriesService(runtime, context);
1057
1070
  ensureTrajectoryLoggerEnabled(runtime, context);
1071
+ // Bridge the in-memory "trajectories" service to the SQL trajectory_steps
1072
+ // tables that the viewer + collection read. Without this the core service
1073
+ // captures LLM calls only into its own trajectory_step_index store, so every
1074
+ // platform without the plugin-training log-backfill (mobile, cloud) shows a
1075
+ // trajectory with zero recorded LLM calls. Patching here makes capture land
1076
+ // in trajectory_steps universally (local + cloud + mobile).
1077
+ try {
1078
+ await installDatabaseTrajectoryLogger(runtime);
1079
+ }
1080
+ catch (err) {
1081
+ logger.warn(`[eliza] Failed to install database trajectory logger (${context}): ${err instanceof Error ? err.message : err}`);
1082
+ }
1058
1083
  await installPromptOptimizationLayer(runtime, context, config);
1059
1084
  }
1060
1085
  // ---------------------------------------------------------------------------
@@ -3068,7 +3093,7 @@ export async function startEliza(opts) {
3068
3093
  }
3069
3094
  else if (process.env.ELIZA_DEVICE_BRIDGE_ENABLED?.trim() === "1") {
3070
3095
  try {
3071
- const { ensureMobileDeviceBridgeInferenceHandlers } = await import("@elizaos/plugin-capacitor-bridge");
3096
+ const { ensureMobileDeviceBridgeInferenceHandlers } = await import("@elizaos/plugin-capacitor-bridge/mobile-device-bridge-bootstrap");
3072
3097
  await ensureMobileDeviceBridgeInferenceHandlers(runtime);
3073
3098
  }
3074
3099
  catch (err) {
@@ -3106,6 +3131,7 @@ export async function startEliza(opts) {
3106
3131
  catch (err) {
3107
3132
  logger.warn(`[eliza] Roles capability pre-registration failed: ${formatError(err)}`);
3108
3133
  }
3134
+ bootTimer.lap("svc:roles-register");
3109
3135
  const warmAgentSkillsService = async () => {
3110
3136
  // Let runtime startup complete first; this warm-up runs asynchronously
3111
3137
  // so API + agent come online immediately.
@@ -3174,6 +3200,8 @@ export async function startEliza(opts) {
3174
3200
  const registerRemoteCodingRunner = async () => {
3175
3201
  if (isBundledMobileRuntime())
3176
3202
  return;
3203
+ if (!shouldLoadRemoteCodingRunnerForBoot(runtime))
3204
+ return;
3177
3205
  try {
3178
3206
  const { registerE2BRemoteCapabilityRouterIfEnabled } = await loadE2BCapabilityRouterModule();
3179
3207
  const result = await registerE2BRemoteCapabilityRouterIfEnabled(runtime);
@@ -3355,6 +3383,20 @@ export async function startEliza(opts) {
3355
3383
  logger.debug(`[eliza] WEB_FETCH action registration skipped: ${formatError(err)}`);
3356
3384
  }
3357
3385
  };
3386
+ const registerWebSearchActionIfEnabled = async () => {
3387
+ try {
3388
+ const { webSearch, isWebSearchEnabled } = await import("./actions/web-search.js");
3389
+ if (!isWebSearchEnabled()) {
3390
+ logger.info("[eliza] WEB_SEARCH action disabled; set ELIZA_INLINE_WEB_SEARCH=1 to force inline search, or unset ELIZA_SERVER_WEB_SEARCH when using the default inline surface");
3391
+ return;
3392
+ }
3393
+ runtime.registerAction(webSearch);
3394
+ logger.info("[eliza] Registered keyless WEB_SEARCH action");
3395
+ }
3396
+ catch (err) {
3397
+ logger.debug(`[eliza] WEB_SEARCH action registration skipped: ${formatError(err)}`);
3398
+ }
3399
+ };
3358
3400
  const isAutonomyEnabled = () => ["true", "1"].includes((process.env.ENABLE_AUTONOMY ?? "").toLowerCase());
3359
3401
  const startAutonomyServiceIfEnabled = async (autonomyEnabled) => {
3360
3402
  if (autonomyEnabled && !runtime.getService("AUTONOMY")) {
@@ -3497,7 +3539,9 @@ export async function startEliza(opts) {
3497
3539
  // requested). The runtime is reported ready as soon as this resolves.
3498
3540
  const initializeRuntimeServices = async () => {
3499
3541
  await runStewardEvmPreBoot();
3542
+ bootTimer.lap("svc:steward-evm");
3500
3543
  await registerConnectorSetupService();
3544
+ bootTimer.lap("svc:connector-setup");
3501
3545
  await registerRemoteCodingRunner();
3502
3546
  bootTimer.lap("svc:pre-init");
3503
3547
  if (blockDeferredPluginImports) {
@@ -3632,31 +3676,36 @@ export async function startEliza(opts) {
3632
3676
  await syncRemoteCapabilityPluginsIfAvailable();
3633
3677
  await applyPluginRoleGatingIfAvailable();
3634
3678
  await registerConversationProximityProvider();
3679
+ // Probe the embedding dimension BEFORE seeding bundled documents (#8769).
3680
+ // The deferred plugin waves above register the cloud TEXT_EMBEDDING handler
3681
+ // (plugin-elizacloud, 1536-dim); the probe in runtime.initialize() ran ~38s
3682
+ // earlier, before that handler existed, so the SQL adapter kept its
3683
+ // hardcoded dim384 default. seedBundledDocumentsIfEnabled() embeds its docs
3684
+ // at 1536 via the cloud handler, so if the column is still dim384 every
3685
+ // bundled-doc vector is dropped on a "dimension mismatch with configured
3686
+ // column (dim384)" and the agent boots with no recall memory. Snapping the
3687
+ // column to dim1536 here — after the handler is registered, before the seed
3688
+ // writes — lets those embeddings (and all later memory) persist.
3689
+ // ensureEmbeddingDimension() is public, idempotent, and self-guarding (it
3690
+ // no-ops when no TEXT_EMBEDDING handler is registered, e.g. cloud-proxied
3691
+ // agents), so this is safe on every boot path.
3692
+ try {
3693
+ await runtime.ensureEmbeddingDimension();
3694
+ }
3695
+ catch (err) {
3696
+ logger.warn(`[eliza] deferred embedding-dimension re-probe failed: ${err instanceof Error ? err.message : String(err)}`);
3697
+ }
3635
3698
  await seedBundledDocumentsIfEnabled();
3636
3699
  await runStewardEvmPostBoot();
3637
3700
  await installServerSideWebSearchIfAvailable();
3638
3701
  await registerWebFetchActionIfEnabled();
3702
+ await registerWebSearchActionIfEnabled();
3639
3703
  bootTimer.lap("deferred:post-init");
3640
3704
  const autonomyLoopEnabled = isAutonomyEnabled();
3641
3705
  await startAutonomyServiceIfEnabled(true);
3642
3706
  await enableAutonomyLoopIfAvailable(autonomyLoopEnabled);
3643
3707
  startAgentSkillsWarmup();
3644
3708
  startEmbeddingWarmup();
3645
- // Re-probe the embedding dimension now that the deferred plugin waves have
3646
- // registered the cloud TEXT_EMBEDDING handler (plugin-elizacloud). The probe
3647
- // in runtime.initialize() runs ~38s earlier — before that deferred handler
3648
- // exists — so on a cloud agent it finds no TEXT_EMBEDDING model and the SQL
3649
- // adapter keeps its hardcoded dim384 default; every 1536-dim cloud vector is
3650
- // then dropped on a "dimension mismatch with configured column (dim384)".
3651
- // ensureEmbeddingDimension() is public, idempotent, and self-guarding (it
3652
- // no-ops when no handler is registered, e.g. cloud-proxied agents), so this
3653
- // safely snaps the column to dim1536 and lets memory embeddings persist.
3654
- try {
3655
- await runtime.ensureEmbeddingDimension();
3656
- }
3657
- catch (err) {
3658
- logger.warn(`[eliza] deferred embedding-dimension re-probe failed: ${err instanceof Error ? err.message : String(err)}`);
3659
- }
3660
3709
  // Trigger the lazy wallet singleton fire-and-forget. This is a safety net
3661
3710
  // — if no wallet route or signing flow triggers it earlier, wallets are
3662
3711
  // still generated here. The singleton keeps this harmless if already
@@ -3672,9 +3721,22 @@ export async function startEliza(opts) {
3672
3721
  // actions like TASKS (agent-orchestrator) and PLAY_EMOTE (companion) that
3673
3722
  // simply hadn't loaded yet.
3674
3723
  validateIntentActionMap(runtime.actions.map((a) => a.name), runtime.logger);
3724
+ // Same timing: turn the (previously dead-but-tested) view-coverage validators
3725
+ // into a live drift guard now that all plugins/views are registered (#8798).
3726
+ // Warns when a VIEW_ACTION_MAP entry names an unregistered action, or a
3727
+ // registered view has neither an affinity entry nor a declared ViewCapability.
3728
+ const developerViews = listViews({ developerMode: true });
3729
+ validateViewActionMap(runtime.actions.map((a) => a.name), runtime.logger);
3730
+ validateViewCoverage(developerViews.map((v) => v.id), developerViews.filter((v) => v.capabilities?.length).map((v) => v.id), runtime.logger);
3675
3731
  bootTimer.lap("deferred:complete");
3676
3732
  };
3677
3733
  try {
3734
+ // Time from the register-sql lap up to entering service init (roles
3735
+ // capability registration + any blocking pre-init work). Split out so a
3736
+ // device boot can attribute the dominant cost instead of lumping it into
3737
+ // svc:pre-init (issue #9565): on a bundled mobile runtime the three hooks
3738
+ // below are each fast/no-op, yet svc:pre-init was ~15s of a 16s cold boot.
3739
+ bootTimer.lap("svc:boot-prep");
3678
3740
  await initializeRuntimeServices();
3679
3741
  }
3680
3742
  catch (err) {
@@ -3941,7 +4003,8 @@ export async function startEliza(opts) {
3941
4003
  catch {
3942
4004
  // non-fatal
3943
4005
  }
3944
- if (!isBundledMobileRuntime()) {
4006
+ if (!isBundledMobileRuntime() &&
4007
+ shouldLoadRemoteCodingRunnerForBoot(newRuntime)) {
3945
4008
  try {
3946
4009
  const { registerE2BRemoteCapabilityRouterIfEnabled } = await loadE2BCapabilityRouterModule();
3947
4010
  await registerE2BRemoteCapabilityRouterIfEnabled(newRuntime);
@@ -14,11 +14,9 @@
14
14
  * 7. GitHub access (local runtime only)
15
15
  * 8. Persist agent + style + provider + embedding config
16
16
  *
17
- * Extracted from eliza.ts to reduce file size.
18
- *
19
17
  * @module first-time-setup
20
18
  */
21
- import { type ElizaConfig } from "../config/config.ts";
19
+ import { type ElizaConfig } from "../config/config.js";
22
20
  type FirstTimeSetupCloudResult = CloudFirstRunResult;
23
21
  interface CloudFirstRunResult {
24
22
  apiKey: string;