@elizaos/agent 0.25.8 → 2.0.0-alpha.83

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 (607) hide show
  1. package/LICENSE +1 -1
  2. package/package.json +994 -34
  3. package/packages/agent/src/actions/emote.d.ts +14 -0
  4. package/packages/agent/src/actions/emote.d.ts.map +1 -0
  5. package/packages/agent/src/actions/emote.js +91 -0
  6. package/packages/agent/src/actions/restart.d.ts +19 -0
  7. package/packages/agent/src/actions/restart.d.ts.map +1 -0
  8. package/packages/agent/src/actions/restart.js +86 -0
  9. package/packages/agent/src/actions/send-message.d.ts +3 -0
  10. package/packages/agent/src/actions/send-message.d.ts.map +1 -0
  11. package/packages/agent/src/actions/send-message.js +144 -0
  12. package/packages/agent/src/actions/stream-control.d.ts +15 -0
  13. package/packages/agent/src/actions/stream-control.d.ts.map +1 -0
  14. package/packages/agent/src/actions/stream-control.js +357 -0
  15. package/packages/agent/src/actions/switch-stream-source.d.ts +16 -0
  16. package/packages/agent/src/actions/switch-stream-source.d.ts.map +1 -0
  17. package/packages/agent/src/actions/switch-stream-source.js +94 -0
  18. package/packages/agent/src/actions/terminal.d.ts +14 -0
  19. package/packages/agent/src/actions/terminal.d.ts.map +1 -0
  20. package/packages/agent/src/actions/terminal.js +154 -0
  21. package/packages/agent/src/api/agent-admin-routes.d.ts +38 -0
  22. package/packages/agent/src/api/agent-admin-routes.d.ts.map +1 -0
  23. package/packages/agent/src/api/agent-admin-routes.js +93 -0
  24. package/packages/agent/src/api/agent-lifecycle-routes.d.ts +16 -0
  25. package/packages/agent/src/api/agent-lifecycle-routes.d.ts.map +1 -0
  26. package/packages/agent/src/api/agent-lifecycle-routes.js +80 -0
  27. package/packages/agent/src/api/agent-model.d.ts +12 -0
  28. package/packages/agent/src/api/agent-model.d.ts.map +1 -0
  29. package/packages/agent/src/api/agent-model.js +123 -0
  30. package/packages/agent/src/api/agent-transfer-routes.d.ts +16 -0
  31. package/packages/agent/src/api/agent-transfer-routes.d.ts.map +1 -0
  32. package/packages/agent/src/api/agent-transfer-routes.js +124 -0
  33. package/packages/agent/src/api/apps-routes.d.ts +19 -0
  34. package/packages/agent/src/api/apps-routes.d.ts.map +1 -0
  35. package/packages/agent/src/api/apps-routes.js +128 -0
  36. package/packages/agent/src/api/auth-routes.d.ts +11 -0
  37. package/packages/agent/src/api/auth-routes.d.ts.map +1 -0
  38. package/packages/agent/src/api/auth-routes.js +54 -0
  39. package/packages/agent/src/api/bsc-trade.d.ts +34 -0
  40. package/packages/agent/src/api/bsc-trade.d.ts.map +1 -0
  41. package/packages/agent/src/api/bsc-trade.js +567 -0
  42. package/packages/agent/src/api/bug-report-routes.d.ts +7 -0
  43. package/packages/agent/src/api/bug-report-routes.d.ts.map +1 -0
  44. package/packages/agent/src/api/bug-report-routes.js +124 -0
  45. package/packages/agent/src/api/character-routes.d.ts +50 -0
  46. package/packages/agent/src/api/character-routes.d.ts.map +1 -0
  47. package/packages/agent/src/api/character-routes.js +302 -0
  48. package/packages/agent/src/api/cloud-billing-routes.d.ts +14 -0
  49. package/packages/agent/src/api/cloud-billing-routes.d.ts.map +1 -0
  50. package/packages/agent/src/api/cloud-billing-routes.js +400 -0
  51. package/packages/agent/src/api/cloud-compat-routes.d.ts +15 -0
  52. package/packages/agent/src/api/cloud-compat-routes.d.ts.map +1 -0
  53. package/packages/agent/src/api/cloud-compat-routes.js +131 -0
  54. package/packages/agent/src/api/cloud-routes.d.ts +62 -0
  55. package/packages/agent/src/api/cloud-routes.d.ts.map +1 -0
  56. package/packages/agent/src/api/cloud-routes.js +339 -0
  57. package/packages/agent/src/api/cloud-status-routes.d.ts +15 -0
  58. package/packages/agent/src/api/cloud-status-routes.d.ts.map +1 -0
  59. package/packages/agent/src/api/cloud-status-routes.js +165 -0
  60. package/packages/agent/src/api/compat-utils.d.ts +49 -0
  61. package/packages/agent/src/api/compat-utils.d.ts.map +1 -0
  62. package/packages/agent/src/api/compat-utils.js +126 -0
  63. package/packages/agent/src/api/connector-health.d.ts +34 -0
  64. package/packages/agent/src/api/connector-health.d.ts.map +1 -0
  65. package/packages/agent/src/api/connector-health.js +109 -0
  66. package/packages/agent/src/api/coordinator-wiring.d.ts +46 -0
  67. package/packages/agent/src/api/coordinator-wiring.d.ts.map +1 -0
  68. package/packages/agent/src/api/coordinator-wiring.js +101 -0
  69. package/packages/agent/src/api/credit-detection.d.ts +9 -0
  70. package/packages/agent/src/api/credit-detection.d.ts.map +1 -0
  71. package/packages/agent/src/api/credit-detection.js +41 -0
  72. package/packages/agent/src/api/database.d.ts +33 -0
  73. package/packages/agent/src/api/database.d.ts.map +1 -0
  74. package/packages/agent/src/api/database.js +1019 -0
  75. package/packages/agent/src/api/diagnostics-routes.d.ts +46 -0
  76. package/packages/agent/src/api/diagnostics-routes.d.ts.map +1 -0
  77. package/packages/agent/src/api/diagnostics-routes.js +241 -0
  78. package/packages/agent/src/api/drop-service.d.ts +26 -0
  79. package/packages/agent/src/api/drop-service.d.ts.map +1 -0
  80. package/packages/agent/src/api/drop-service.js +134 -0
  81. package/packages/agent/src/api/early-logs.d.ts +29 -0
  82. package/packages/agent/src/api/early-logs.d.ts.map +1 -0
  83. package/packages/agent/src/api/early-logs.js +96 -0
  84. package/packages/agent/src/api/http-helpers.d.ts +50 -0
  85. package/packages/agent/src/api/http-helpers.d.ts.map +1 -0
  86. package/packages/agent/src/api/http-helpers.js +145 -0
  87. package/packages/agent/src/api/index.d.ts +61 -0
  88. package/packages/agent/src/api/index.d.ts.map +1 -0
  89. package/packages/agent/src/api/index.js +59 -0
  90. package/packages/agent/src/api/knowledge-routes.d.ts +23 -0
  91. package/packages/agent/src/api/knowledge-routes.d.ts.map +1 -0
  92. package/packages/agent/src/api/knowledge-routes.js +931 -0
  93. package/packages/agent/src/api/knowledge-service-loader.d.ts +51 -0
  94. package/packages/agent/src/api/knowledge-service-loader.d.ts.map +1 -0
  95. package/packages/agent/src/api/knowledge-service-loader.js +34 -0
  96. package/packages/agent/src/api/memory-bounds.d.ts +51 -0
  97. package/packages/agent/src/api/memory-bounds.d.ts.map +1 -0
  98. package/packages/agent/src/api/memory-bounds.js +81 -0
  99. package/packages/agent/src/api/memory-routes.d.ts +9 -0
  100. package/packages/agent/src/api/memory-routes.d.ts.map +1 -0
  101. package/packages/agent/src/api/memory-routes.js +241 -0
  102. package/packages/agent/src/api/merkle-tree.d.ts +90 -0
  103. package/packages/agent/src/api/merkle-tree.d.ts.map +1 -0
  104. package/packages/agent/src/api/merkle-tree.js +174 -0
  105. package/packages/agent/src/api/models-routes.d.ts +14 -0
  106. package/packages/agent/src/api/models-routes.d.ts.map +1 -0
  107. package/packages/agent/src/api/models-routes.js +37 -0
  108. package/packages/agent/src/api/nfa-routes.d.ts +5 -0
  109. package/packages/agent/src/api/nfa-routes.d.ts.map +1 -0
  110. package/packages/agent/src/api/nfa-routes.js +125 -0
  111. package/packages/agent/src/api/og-tracker.d.ts +28 -0
  112. package/packages/agent/src/api/og-tracker.d.ts.map +1 -0
  113. package/packages/agent/src/api/og-tracker.js +60 -0
  114. package/packages/agent/src/api/parse-action-block.d.ts +36 -0
  115. package/packages/agent/src/api/parse-action-block.d.ts.map +1 -0
  116. package/packages/agent/src/api/parse-action-block.js +110 -0
  117. package/packages/agent/src/api/permissions-routes.d.ts +32 -0
  118. package/packages/agent/src/api/permissions-routes.d.ts.map +1 -0
  119. package/packages/agent/src/api/permissions-routes.js +149 -0
  120. package/packages/agent/src/api/plugin-validation.d.ts +86 -0
  121. package/packages/agent/src/api/plugin-validation.d.ts.map +1 -0
  122. package/packages/agent/src/api/plugin-validation.js +259 -0
  123. package/packages/agent/src/api/provider-switch-config.d.ts +37 -0
  124. package/packages/agent/src/api/provider-switch-config.d.ts.map +1 -0
  125. package/packages/agent/src/api/provider-switch-config.js +317 -0
  126. package/packages/agent/src/api/registry-routes.d.ts +26 -0
  127. package/packages/agent/src/api/registry-routes.d.ts.map +1 -0
  128. package/packages/agent/src/api/registry-routes.js +90 -0
  129. package/packages/agent/src/api/registry-service.d.ts +77 -0
  130. package/packages/agent/src/api/registry-service.d.ts.map +1 -0
  131. package/packages/agent/src/api/registry-service.js +190 -0
  132. package/packages/agent/src/api/route-helpers.d.ts +16 -0
  133. package/packages/agent/src/api/route-helpers.d.ts.map +1 -0
  134. package/packages/agent/src/api/route-helpers.js +1 -0
  135. package/packages/agent/src/api/sandbox-routes.d.ts +12 -0
  136. package/packages/agent/src/api/sandbox-routes.d.ts.map +1 -0
  137. package/packages/agent/src/api/sandbox-routes.js +1334 -0
  138. package/packages/agent/src/api/server.d.ts +418 -0
  139. package/packages/agent/src/api/server.d.ts.map +1 -0
  140. package/packages/agent/src/api/server.js +13614 -0
  141. package/packages/agent/src/api/signal-routes.d.ts +39 -0
  142. package/packages/agent/src/api/signal-routes.d.ts.map +1 -0
  143. package/packages/agent/src/api/signal-routes.js +168 -0
  144. package/packages/agent/src/api/stream-persistence.d.ts +64 -0
  145. package/packages/agent/src/api/stream-persistence.d.ts.map +1 -0
  146. package/packages/agent/src/api/stream-persistence.js +231 -0
  147. package/packages/agent/src/api/stream-route-state.d.ts +50 -0
  148. package/packages/agent/src/api/stream-route-state.d.ts.map +1 -0
  149. package/packages/agent/src/api/stream-route-state.js +1 -0
  150. package/packages/agent/src/api/stream-routes.d.ts +45 -0
  151. package/packages/agent/src/api/stream-routes.d.ts.map +1 -0
  152. package/packages/agent/src/api/stream-routes.js +809 -0
  153. package/packages/agent/src/api/stream-voice-routes.d.ts +36 -0
  154. package/packages/agent/src/api/stream-voice-routes.d.ts.map +1 -0
  155. package/packages/agent/src/api/stream-voice-routes.js +133 -0
  156. package/packages/agent/src/api/streaming-text.d.ts +9 -0
  157. package/packages/agent/src/api/streaming-text.d.ts.map +1 -0
  158. package/packages/agent/src/api/streaming-text.js +85 -0
  159. package/packages/agent/src/api/streaming-types.d.ts +30 -0
  160. package/packages/agent/src/api/streaming-types.d.ts.map +1 -0
  161. package/packages/agent/src/api/streaming-types.js +1 -0
  162. package/packages/agent/src/api/subscription-routes.d.ts +20 -0
  163. package/packages/agent/src/api/subscription-routes.d.ts.map +1 -0
  164. package/packages/agent/src/api/subscription-routes.js +191 -0
  165. package/packages/agent/src/api/terminal-run-limits.d.ts +5 -0
  166. package/packages/agent/src/api/terminal-run-limits.d.ts.map +1 -0
  167. package/packages/agent/src/api/terminal-run-limits.js +22 -0
  168. package/packages/agent/src/api/training-backend-check.d.ts +8 -0
  169. package/packages/agent/src/api/training-backend-check.d.ts.map +1 -0
  170. package/packages/agent/src/api/training-backend-check.js +28 -0
  171. package/packages/agent/src/api/training-routes.d.ts +44 -0
  172. package/packages/agent/src/api/training-routes.d.ts.map +1 -0
  173. package/packages/agent/src/api/training-routes.js +195 -0
  174. package/packages/agent/src/api/training-service-like.d.ts +38 -0
  175. package/packages/agent/src/api/training-service-like.d.ts.map +1 -0
  176. package/packages/agent/src/api/training-service-like.js +1 -0
  177. package/packages/agent/src/api/trajectory-routes.d.ts +17 -0
  178. package/packages/agent/src/api/trajectory-routes.d.ts.map +1 -0
  179. package/packages/agent/src/api/trajectory-routes.js +405 -0
  180. package/packages/agent/src/api/trigger-routes.d.ts +72 -0
  181. package/packages/agent/src/api/trigger-routes.d.ts.map +1 -0
  182. package/packages/agent/src/api/trigger-routes.js +268 -0
  183. package/packages/agent/src/api/twitter-verify.d.ts +25 -0
  184. package/packages/agent/src/api/twitter-verify.d.ts.map +1 -0
  185. package/packages/agent/src/api/twitter-verify.js +168 -0
  186. package/packages/agent/src/api/tx-service.d.ts +47 -0
  187. package/packages/agent/src/api/tx-service.d.ts.map +1 -0
  188. package/packages/agent/src/api/tx-service.js +156 -0
  189. package/packages/agent/src/api/wallet-dex-prices.d.ts +43 -0
  190. package/packages/agent/src/api/wallet-dex-prices.d.ts.map +1 -0
  191. package/packages/agent/src/api/wallet-dex-prices.js +149 -0
  192. package/packages/agent/src/api/wallet-evm-balance.d.ts +65 -0
  193. package/packages/agent/src/api/wallet-evm-balance.d.ts.map +1 -0
  194. package/packages/agent/src/api/wallet-evm-balance.js +663 -0
  195. package/packages/agent/src/api/wallet-routes.d.ts +33 -0
  196. package/packages/agent/src/api/wallet-routes.d.ts.map +1 -0
  197. package/packages/agent/src/api/wallet-routes.js +292 -0
  198. package/packages/agent/src/api/wallet-rpc.d.ts +61 -0
  199. package/packages/agent/src/api/wallet-rpc.d.ts.map +1 -0
  200. package/packages/agent/src/api/wallet-rpc.js +367 -0
  201. package/packages/agent/src/api/wallet-trading-profile.d.ts +51 -0
  202. package/packages/agent/src/api/wallet-trading-profile.d.ts.map +1 -0
  203. package/packages/agent/src/api/wallet-trading-profile.js +547 -0
  204. package/packages/agent/src/api/wallet.d.ts +31 -0
  205. package/packages/agent/src/api/wallet.d.ts.map +1 -0
  206. package/packages/agent/src/api/wallet.js +513 -0
  207. package/packages/agent/src/api/whatsapp-routes.d.ts +39 -0
  208. package/packages/agent/src/api/whatsapp-routes.d.ts.map +1 -0
  209. package/packages/agent/src/api/whatsapp-routes.js +182 -0
  210. package/packages/agent/src/api/zip-utils.d.ts +8 -0
  211. package/packages/agent/src/api/zip-utils.d.ts.map +1 -0
  212. package/packages/agent/src/api/zip-utils.js +115 -0
  213. package/packages/agent/src/auth/anthropic.d.ts +25 -0
  214. package/packages/agent/src/auth/anthropic.d.ts.map +1 -0
  215. package/packages/agent/src/auth/anthropic.js +40 -0
  216. package/packages/agent/src/auth/apply-stealth.d.ts +8 -0
  217. package/packages/agent/src/auth/apply-stealth.d.ts.map +1 -0
  218. package/packages/agent/src/auth/apply-stealth.js +35 -0
  219. package/packages/agent/src/auth/claude-code-stealth.d.ts +2 -0
  220. package/packages/agent/src/auth/claude-code-stealth.d.ts.map +1 -0
  221. package/packages/agent/src/auth/claude-code-stealth.js +104 -0
  222. package/packages/agent/src/auth/credentials.d.ts +55 -0
  223. package/packages/agent/src/auth/credentials.d.ts.map +1 -0
  224. package/packages/agent/src/auth/credentials.js +182 -0
  225. package/packages/agent/src/auth/index.d.ts +7 -0
  226. package/packages/agent/src/auth/index.d.ts.map +1 -0
  227. package/packages/agent/src/auth/index.js +3 -0
  228. package/packages/agent/src/auth/openai-codex.d.ts +27 -0
  229. package/packages/agent/src/auth/openai-codex.d.ts.map +1 -0
  230. package/packages/agent/src/auth/openai-codex.js +72 -0
  231. package/packages/agent/src/auth/types.d.ts +18 -0
  232. package/packages/agent/src/auth/types.d.ts.map +1 -0
  233. package/packages/agent/src/auth/types.js +8 -0
  234. package/packages/agent/src/awareness/registry.d.ts +27 -0
  235. package/packages/agent/src/awareness/registry.d.ts.map +1 -0
  236. package/packages/agent/src/awareness/registry.js +161 -0
  237. package/packages/agent/src/benchmark-server.d.ts +2 -0
  238. package/packages/agent/src/benchmark-server.d.ts.map +1 -0
  239. package/packages/agent/src/benchmark-server.js +773 -0
  240. package/packages/agent/src/bin.d.ts +3 -0
  241. package/packages/agent/src/bin.d.ts.map +1 -0
  242. package/packages/agent/src/bin.js +6 -0
  243. package/packages/agent/src/cli/index.d.ts +2 -0
  244. package/packages/agent/src/cli/index.d.ts.map +1 -0
  245. package/packages/agent/src/cli/index.js +40 -0
  246. package/packages/agent/src/cli/parse-duration.d.ts +5 -0
  247. package/packages/agent/src/cli/parse-duration.d.ts.map +1 -0
  248. package/packages/agent/src/cli/parse-duration.js +27 -0
  249. package/packages/agent/src/cloud/auth.d.ts +19 -0
  250. package/packages/agent/src/cloud/auth.d.ts.map +1 -0
  251. package/packages/agent/src/cloud/auth.js +107 -0
  252. package/packages/agent/src/cloud/backup.d.ts +18 -0
  253. package/packages/agent/src/cloud/backup.d.ts.map +1 -0
  254. package/packages/agent/src/cloud/backup.js +42 -0
  255. package/packages/agent/src/cloud/base-url.d.ts +3 -0
  256. package/packages/agent/src/cloud/base-url.d.ts.map +1 -0
  257. package/packages/agent/src/cloud/base-url.js +40 -0
  258. package/packages/agent/src/cloud/bridge-client.d.ts +56 -0
  259. package/packages/agent/src/cloud/bridge-client.d.ts.map +1 -0
  260. package/packages/agent/src/cloud/bridge-client.js +190 -0
  261. package/packages/agent/src/cloud/cloud-manager.d.ts +32 -0
  262. package/packages/agent/src/cloud/cloud-manager.d.ts.map +1 -0
  263. package/packages/agent/src/cloud/cloud-manager.js +119 -0
  264. package/packages/agent/src/cloud/cloud-proxy.d.ts +20 -0
  265. package/packages/agent/src/cloud/cloud-proxy.d.ts.map +1 -0
  266. package/packages/agent/src/cloud/cloud-proxy.js +34 -0
  267. package/packages/agent/src/cloud/index.d.ts +7 -0
  268. package/packages/agent/src/cloud/index.d.ts.map +1 -0
  269. package/packages/agent/src/cloud/index.js +6 -0
  270. package/packages/agent/src/cloud/reconnect.d.ts +26 -0
  271. package/packages/agent/src/cloud/reconnect.d.ts.map +1 -0
  272. package/packages/agent/src/cloud/reconnect.js +86 -0
  273. package/packages/agent/src/cloud/validate-url.d.ts +2 -0
  274. package/packages/agent/src/cloud/validate-url.d.ts.map +1 -0
  275. package/packages/agent/src/cloud/validate-url.js +162 -0
  276. package/packages/agent/src/config/character-schema.d.ts +25 -0
  277. package/packages/agent/src/config/character-schema.d.ts.map +1 -0
  278. package/packages/agent/src/config/character-schema.js +39 -0
  279. package/packages/agent/src/config/config.d.ts +6 -0
  280. package/packages/agent/src/config/config.d.ts.map +1 -0
  281. package/packages/agent/src/config/config.js +118 -0
  282. package/packages/agent/src/config/env-vars.d.ts +3 -0
  283. package/packages/agent/src/config/env-vars.d.ts.map +1 -0
  284. package/packages/agent/src/config/env-vars.js +76 -0
  285. package/packages/agent/src/config/includes.d.ts +26 -0
  286. package/packages/agent/src/config/includes.d.ts.map +1 -0
  287. package/packages/agent/src/config/includes.js +148 -0
  288. package/packages/agent/src/config/index.d.ts +16 -0
  289. package/packages/agent/src/config/index.d.ts.map +1 -0
  290. package/packages/agent/src/config/index.js +15 -0
  291. package/packages/agent/src/config/object-utils.d.ts +2 -0
  292. package/packages/agent/src/config/object-utils.d.ts.map +1 -0
  293. package/packages/agent/src/config/object-utils.js +6 -0
  294. package/packages/agent/src/config/paths.d.ts +13 -0
  295. package/packages/agent/src/config/paths.d.ts.map +1 -0
  296. package/packages/agent/src/config/paths.js +67 -0
  297. package/packages/agent/src/config/plugin-auto-enable.d.ts +16 -0
  298. package/packages/agent/src/config/plugin-auto-enable.d.ts.map +1 -0
  299. package/packages/agent/src/config/plugin-auto-enable.js +384 -0
  300. package/packages/agent/src/config/schema.d.ts +87 -0
  301. package/packages/agent/src/config/schema.d.ts.map +1 -0
  302. package/packages/agent/src/config/schema.js +928 -0
  303. package/packages/agent/src/config/telegram-custom-commands.d.ts +25 -0
  304. package/packages/agent/src/config/telegram-custom-commands.d.ts.map +1 -0
  305. package/packages/agent/src/config/telegram-custom-commands.js +71 -0
  306. package/packages/agent/src/config/types.agent-defaults.d.ts +331 -0
  307. package/packages/agent/src/config/types.agent-defaults.d.ts.map +1 -0
  308. package/packages/agent/src/config/types.agent-defaults.js +1 -0
  309. package/packages/agent/src/config/types.agents.d.ts +110 -0
  310. package/packages/agent/src/config/types.agents.d.ts.map +1 -0
  311. package/packages/agent/src/config/types.agents.js +1 -0
  312. package/packages/agent/src/config/types.d.ts +8 -0
  313. package/packages/agent/src/config/types.d.ts.map +1 -0
  314. package/packages/agent/src/config/types.eliza.d.ts +636 -0
  315. package/packages/agent/src/config/types.eliza.d.ts.map +1 -0
  316. package/packages/agent/src/config/types.eliza.js +1 -0
  317. package/packages/agent/src/config/types.gateway.d.ts +216 -0
  318. package/packages/agent/src/config/types.gateway.d.ts.map +1 -0
  319. package/packages/agent/src/config/types.gateway.js +1 -0
  320. package/packages/agent/src/config/types.hooks.d.ts +107 -0
  321. package/packages/agent/src/config/types.hooks.d.ts.map +1 -0
  322. package/packages/agent/src/config/types.hooks.js +1 -0
  323. package/packages/agent/src/config/types.js +7 -0
  324. package/packages/agent/src/config/types.messages.d.ts +176 -0
  325. package/packages/agent/src/config/types.messages.d.ts.map +1 -0
  326. package/packages/agent/src/config/types.messages.js +1 -0
  327. package/packages/agent/src/config/types.tools.d.ts +400 -0
  328. package/packages/agent/src/config/types.tools.d.ts.map +1 -0
  329. package/packages/agent/src/config/types.tools.js +1 -0
  330. package/packages/agent/src/config/zod-schema.agent-runtime.d.ts +1062 -0
  331. package/packages/agent/src/config/zod-schema.agent-runtime.d.ts.map +1 -0
  332. package/packages/agent/src/config/zod-schema.agent-runtime.js +721 -0
  333. package/packages/agent/src/config/zod-schema.core.d.ts +1021 -0
  334. package/packages/agent/src/config/zod-schema.core.d.ts.map +1 -0
  335. package/packages/agent/src/config/zod-schema.core.js +694 -0
  336. package/packages/agent/src/config/zod-schema.d.ts +4817 -0
  337. package/packages/agent/src/config/zod-schema.d.ts.map +1 -0
  338. package/packages/agent/src/config/zod-schema.hooks.d.ts +88 -0
  339. package/packages/agent/src/config/zod-schema.hooks.d.ts.map +1 -0
  340. package/packages/agent/src/config/zod-schema.hooks.js +133 -0
  341. package/packages/agent/src/config/zod-schema.js +778 -0
  342. package/packages/agent/src/config/zod-schema.providers-core.d.ts +2976 -0
  343. package/packages/agent/src/config/zod-schema.providers-core.d.ts.map +1 -0
  344. package/packages/agent/src/config/zod-schema.providers-core.js +1006 -0
  345. package/packages/agent/src/config/zod-schema.session.d.ts +183 -0
  346. package/packages/agent/src/config/zod-schema.session.d.ts.map +1 -0
  347. package/packages/agent/src/config/zod-schema.session.js +86 -0
  348. package/packages/agent/src/contracts/apps.d.ts +42 -0
  349. package/packages/agent/src/contracts/apps.d.ts.map +1 -0
  350. package/packages/agent/src/contracts/apps.js +4 -0
  351. package/packages/agent/src/contracts/awareness.d.ts +38 -0
  352. package/packages/agent/src/contracts/awareness.d.ts.map +1 -0
  353. package/packages/agent/src/contracts/awareness.js +7 -0
  354. package/packages/agent/src/contracts/config.d.ts +146 -0
  355. package/packages/agent/src/contracts/config.d.ts.map +1 -0
  356. package/packages/agent/src/contracts/config.js +4 -0
  357. package/packages/agent/src/contracts/drop.d.ts +20 -0
  358. package/packages/agent/src/contracts/drop.d.ts.map +1 -0
  359. package/packages/agent/src/contracts/drop.js +4 -0
  360. package/packages/agent/src/contracts/index.d.ts +9 -0
  361. package/packages/agent/src/contracts/index.d.ts.map +1 -0
  362. package/packages/agent/src/contracts/index.js +8 -0
  363. package/packages/agent/src/contracts/onboarding.d.ts +379 -0
  364. package/packages/agent/src/contracts/onboarding.d.ts.map +1 -0
  365. package/packages/agent/src/contracts/onboarding.js +290 -0
  366. package/packages/agent/src/contracts/permissions.d.ts +35 -0
  367. package/packages/agent/src/contracts/permissions.d.ts.map +1 -0
  368. package/packages/agent/src/contracts/permissions.js +4 -0
  369. package/packages/agent/src/contracts/verification.d.ts +9 -0
  370. package/packages/agent/src/contracts/verification.d.ts.map +1 -0
  371. package/packages/agent/src/contracts/verification.js +4 -0
  372. package/packages/agent/src/contracts/wallet.d.ts +409 -0
  373. package/packages/agent/src/contracts/wallet.d.ts.map +1 -0
  374. package/packages/agent/src/contracts/wallet.js +60 -0
  375. package/packages/agent/src/diagnostics/integration-observability.d.ts +40 -0
  376. package/packages/agent/src/diagnostics/integration-observability.d.ts.map +1 -0
  377. package/packages/agent/src/diagnostics/integration-observability.js +68 -0
  378. package/packages/agent/src/emotes/catalog.d.ts +31 -0
  379. package/packages/agent/src/emotes/catalog.d.ts.map +1 -0
  380. package/packages/agent/src/emotes/catalog.js +618 -0
  381. package/packages/agent/src/hooks/discovery.d.ts +13 -0
  382. package/packages/agent/src/hooks/discovery.d.ts.map +1 -0
  383. package/packages/agent/src/hooks/discovery.js +184 -0
  384. package/packages/agent/src/hooks/eligibility.d.ts +12 -0
  385. package/packages/agent/src/hooks/eligibility.d.ts.map +1 -0
  386. package/packages/agent/src/hooks/eligibility.js +100 -0
  387. package/packages/agent/src/hooks/index.d.ts +3 -0
  388. package/packages/agent/src/hooks/index.d.ts.map +1 -0
  389. package/packages/agent/src/hooks/index.js +2 -0
  390. package/packages/agent/src/hooks/loader.d.ts +34 -0
  391. package/packages/agent/src/hooks/loader.d.ts.map +1 -0
  392. package/packages/agent/src/hooks/loader.js +176 -0
  393. package/packages/agent/src/hooks/registry.d.ts +11 -0
  394. package/packages/agent/src/hooks/registry.d.ts.map +1 -0
  395. package/packages/agent/src/hooks/registry.js +58 -0
  396. package/packages/agent/src/hooks/types.d.ts +104 -0
  397. package/packages/agent/src/hooks/types.d.ts.map +1 -0
  398. package/packages/agent/src/hooks/types.js +8 -0
  399. package/packages/agent/src/index.d.ts +20 -0
  400. package/packages/agent/src/index.d.ts.map +1 -0
  401. package/packages/agent/src/index.js +19 -0
  402. package/packages/agent/src/onboarding-presets.d.ts +78 -0
  403. package/packages/agent/src/onboarding-presets.d.ts.map +1 -0
  404. package/packages/agent/src/onboarding-presets.js +1352 -0
  405. package/packages/agent/src/plugins/custom-rtmp/index.d.ts +12 -0
  406. package/packages/agent/src/plugins/custom-rtmp/index.d.ts.map +1 -0
  407. package/packages/agent/src/plugins/custom-rtmp/index.js +26 -0
  408. package/packages/agent/src/providers/admin-trust.d.ts +4 -0
  409. package/packages/agent/src/providers/admin-trust.d.ts.map +1 -0
  410. package/packages/agent/src/providers/admin-trust.js +53 -0
  411. package/packages/agent/src/providers/session-bridge.d.ts +24 -0
  412. package/packages/agent/src/providers/session-bridge.d.ts.map +1 -0
  413. package/packages/agent/src/providers/session-bridge.js +85 -0
  414. package/packages/agent/src/providers/session-utils.d.ts +20 -0
  415. package/packages/agent/src/providers/session-utils.d.ts.map +1 -0
  416. package/packages/agent/src/providers/session-utils.js +33 -0
  417. package/packages/agent/src/providers/simple-mode.d.ts +4 -0
  418. package/packages/agent/src/providers/simple-mode.d.ts.map +1 -0
  419. package/packages/agent/src/providers/simple-mode.js +85 -0
  420. package/packages/agent/src/providers/ui-catalog.d.ts +3 -0
  421. package/packages/agent/src/providers/ui-catalog.d.ts.map +1 -0
  422. package/packages/agent/src/providers/ui-catalog.js +123 -0
  423. package/packages/agent/src/providers/workspace-provider.d.ts +22 -0
  424. package/packages/agent/src/providers/workspace-provider.d.ts.map +1 -0
  425. package/packages/agent/src/providers/workspace-provider.js +167 -0
  426. package/packages/agent/src/providers/workspace.d.ts +54 -0
  427. package/packages/agent/src/providers/workspace.d.ts.map +1 -0
  428. package/packages/agent/src/providers/workspace.js +405 -0
  429. package/packages/agent/src/runtime/agent-event-service.d.ts +35 -0
  430. package/packages/agent/src/runtime/agent-event-service.d.ts.map +1 -0
  431. package/packages/agent/src/runtime/agent-event-service.js +16 -0
  432. package/packages/agent/src/runtime/cloud-onboarding.d.ts +55 -0
  433. package/packages/agent/src/runtime/cloud-onboarding.d.ts.map +1 -0
  434. package/packages/agent/src/runtime/cloud-onboarding.js +279 -0
  435. package/packages/agent/src/runtime/core-plugins.d.ts +14 -0
  436. package/packages/agent/src/runtime/core-plugins.d.ts.map +1 -0
  437. package/packages/agent/src/runtime/core-plugins.js +51 -0
  438. package/packages/agent/src/runtime/custom-actions.d.ts +40 -0
  439. package/packages/agent/src/runtime/custom-actions.d.ts.map +1 -0
  440. package/packages/agent/src/runtime/custom-actions.js +454 -0
  441. package/packages/agent/src/runtime/eliza-plugin.d.ts +16 -0
  442. package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -0
  443. package/packages/agent/src/runtime/eliza-plugin.js +108 -0
  444. package/packages/agent/src/runtime/eliza.d.ts +205 -0
  445. package/packages/agent/src/runtime/eliza.d.ts.map +1 -0
  446. package/packages/agent/src/runtime/eliza.js +3935 -0
  447. package/packages/agent/src/runtime/embedding-presets.d.ts +19 -0
  448. package/packages/agent/src/runtime/embedding-presets.d.ts.map +1 -0
  449. package/packages/agent/src/runtime/embedding-presets.js +53 -0
  450. package/packages/agent/src/runtime/index.d.ts +9 -0
  451. package/packages/agent/src/runtime/index.d.ts.map +1 -0
  452. package/packages/agent/src/runtime/index.js +8 -0
  453. package/packages/agent/src/runtime/onboarding-names.d.ts +11 -0
  454. package/packages/agent/src/runtime/onboarding-names.d.ts.map +1 -0
  455. package/packages/agent/src/runtime/onboarding-names.js +74 -0
  456. package/packages/agent/src/runtime/release-plugin-policy.d.ts +20 -0
  457. package/packages/agent/src/runtime/release-plugin-policy.d.ts.map +1 -0
  458. package/packages/agent/src/runtime/release-plugin-policy.js +87 -0
  459. package/packages/agent/src/runtime/restart.d.ts +45 -0
  460. package/packages/agent/src/runtime/restart.d.ts.map +1 -0
  461. package/packages/agent/src/runtime/restart.js +45 -0
  462. package/packages/agent/src/runtime/trajectory-persistence.d.ts +214 -0
  463. package/packages/agent/src/runtime/trajectory-persistence.d.ts.map +1 -0
  464. package/packages/agent/src/runtime/trajectory-persistence.js +1957 -0
  465. package/packages/agent/src/runtime/version.d.ts +2 -0
  466. package/packages/agent/src/runtime/version.d.ts.map +1 -0
  467. package/packages/agent/src/runtime/version.js +5 -0
  468. package/packages/agent/src/security/audit-log.d.ts +49 -0
  469. package/packages/agent/src/security/audit-log.d.ts.map +1 -0
  470. package/packages/agent/src/security/audit-log.js +161 -0
  471. package/packages/agent/src/security/network-policy.d.ts +6 -0
  472. package/packages/agent/src/security/network-policy.d.ts.map +1 -0
  473. package/packages/agent/src/security/network-policy.js +85 -0
  474. package/packages/agent/src/server/index.d.ts +3 -0
  475. package/packages/agent/src/server/index.d.ts.map +1 -0
  476. package/packages/agent/src/server/index.js +1 -0
  477. package/packages/agent/src/services/agent-export.d.ts +100 -0
  478. package/packages/agent/src/services/agent-export.d.ts.map +1 -0
  479. package/packages/agent/src/services/agent-export.js +729 -0
  480. package/packages/agent/src/services/app-manager.d.ts +34 -0
  481. package/packages/agent/src/services/app-manager.d.ts.map +1 -0
  482. package/packages/agent/src/services/app-manager.js +425 -0
  483. package/packages/agent/src/services/browser-capture.d.ts +39 -0
  484. package/packages/agent/src/services/browser-capture.d.ts.map +1 -0
  485. package/packages/agent/src/services/browser-capture.js +162 -0
  486. package/packages/agent/src/services/coding-agent-context.d.ts +310 -0
  487. package/packages/agent/src/services/coding-agent-context.d.ts.map +1 -0
  488. package/packages/agent/src/services/coding-agent-context.js +281 -0
  489. package/packages/agent/src/services/fallback-training-service.d.ts +78 -0
  490. package/packages/agent/src/services/fallback-training-service.d.ts.map +1 -0
  491. package/packages/agent/src/services/fallback-training-service.js +126 -0
  492. package/packages/agent/src/services/index.d.ts +18 -0
  493. package/packages/agent/src/services/index.d.ts.map +1 -0
  494. package/packages/agent/src/services/index.js +17 -0
  495. package/packages/agent/src/services/mcp-marketplace.d.ts +89 -0
  496. package/packages/agent/src/services/mcp-marketplace.d.ts.map +1 -0
  497. package/packages/agent/src/services/mcp-marketplace.js +200 -0
  498. package/packages/agent/src/services/plugin-manager-types.d.ts +139 -0
  499. package/packages/agent/src/services/plugin-manager-types.d.ts.map +1 -0
  500. package/packages/agent/src/services/plugin-manager-types.js +18 -0
  501. package/packages/agent/src/services/privy-wallets.d.ts +18 -0
  502. package/packages/agent/src/services/privy-wallets.d.ts.map +1 -0
  503. package/packages/agent/src/services/privy-wallets.js +225 -0
  504. package/packages/agent/src/services/registry-client-app-meta.d.ts +6 -0
  505. package/packages/agent/src/services/registry-client-app-meta.d.ts.map +1 -0
  506. package/packages/agent/src/services/registry-client-app-meta.js +147 -0
  507. package/packages/agent/src/services/registry-client-endpoints.d.ts +7 -0
  508. package/packages/agent/src/services/registry-client-endpoints.d.ts.map +1 -0
  509. package/packages/agent/src/services/registry-client-endpoints.js +183 -0
  510. package/packages/agent/src/services/registry-client-local.d.ts +4 -0
  511. package/packages/agent/src/services/registry-client-local.d.ts.map +1 -0
  512. package/packages/agent/src/services/registry-client-local.js +377 -0
  513. package/packages/agent/src/services/registry-client-network.d.ts +9 -0
  514. package/packages/agent/src/services/registry-client-network.d.ts.map +1 -0
  515. package/packages/agent/src/services/registry-client-network.js +109 -0
  516. package/packages/agent/src/services/registry-client-queries.d.ts +15 -0
  517. package/packages/agent/src/services/registry-client-queries.d.ts.map +1 -0
  518. package/packages/agent/src/services/registry-client-queries.js +150 -0
  519. package/packages/agent/src/services/registry-client-types.d.ts +115 -0
  520. package/packages/agent/src/services/registry-client-types.d.ts.map +1 -0
  521. package/packages/agent/src/services/registry-client-types.js +1 -0
  522. package/packages/agent/src/services/registry-client.d.ts +39 -0
  523. package/packages/agent/src/services/registry-client.d.ts.map +1 -0
  524. package/packages/agent/src/services/registry-client.js +249 -0
  525. package/packages/agent/src/services/remote-signing-service.d.ts +58 -0
  526. package/packages/agent/src/services/remote-signing-service.d.ts.map +1 -0
  527. package/packages/agent/src/services/remote-signing-service.js +185 -0
  528. package/packages/agent/src/services/sandbox-engine.d.ts +96 -0
  529. package/packages/agent/src/services/sandbox-engine.d.ts.map +1 -0
  530. package/packages/agent/src/services/sandbox-engine.js +604 -0
  531. package/packages/agent/src/services/sandbox-manager.d.ts +104 -0
  532. package/packages/agent/src/services/sandbox-manager.d.ts.map +1 -0
  533. package/packages/agent/src/services/sandbox-manager.js +353 -0
  534. package/packages/agent/src/services/self-updater.d.ts +21 -0
  535. package/packages/agent/src/services/self-updater.d.ts.map +1 -0
  536. package/packages/agent/src/services/self-updater.js +162 -0
  537. package/packages/agent/src/services/signal-pairing.d.ts +37 -0
  538. package/packages/agent/src/services/signal-pairing.d.ts.map +1 -0
  539. package/packages/agent/src/services/signal-pairing.js +124 -0
  540. package/packages/agent/src/services/signing-policy.d.ts +44 -0
  541. package/packages/agent/src/services/signing-policy.d.ts.map +1 -0
  542. package/packages/agent/src/services/signing-policy.js +165 -0
  543. package/packages/agent/src/services/skill-catalog-client.d.ts +47 -0
  544. package/packages/agent/src/services/skill-catalog-client.d.ts.map +1 -0
  545. package/packages/agent/src/services/skill-catalog-client.js +130 -0
  546. package/packages/agent/src/services/skill-marketplace.d.ts +42 -0
  547. package/packages/agent/src/services/skill-marketplace.d.ts.map +1 -0
  548. package/packages/agent/src/services/skill-marketplace.js +680 -0
  549. package/packages/agent/src/services/stream-manager.d.ts +121 -0
  550. package/packages/agent/src/services/stream-manager.d.ts.map +1 -0
  551. package/packages/agent/src/services/stream-manager.js +604 -0
  552. package/packages/agent/src/services/tts-stream-bridge.d.ts +83 -0
  553. package/packages/agent/src/services/tts-stream-bridge.d.ts.map +1 -0
  554. package/packages/agent/src/services/tts-stream-bridge.js +349 -0
  555. package/packages/agent/src/services/update-checker.d.ts +29 -0
  556. package/packages/agent/src/services/update-checker.d.ts.map +1 -0
  557. package/packages/agent/src/services/update-checker.js +134 -0
  558. package/packages/agent/src/services/version-compat.d.ts +99 -0
  559. package/packages/agent/src/services/version-compat.d.ts.map +1 -0
  560. package/packages/agent/src/services/version-compat.js +195 -0
  561. package/packages/agent/src/services/whatsapp-pairing.d.ts +41 -0
  562. package/packages/agent/src/services/whatsapp-pairing.d.ts.map +1 -0
  563. package/packages/agent/src/services/whatsapp-pairing.js +209 -0
  564. package/packages/agent/src/shared/ui-catalog-prompt.d.ts +52 -0
  565. package/packages/agent/src/shared/ui-catalog-prompt.d.ts.map +1 -0
  566. package/packages/agent/src/shared/ui-catalog-prompt.js +1028 -0
  567. package/packages/agent/src/test-support/process-helpers.d.ts +13 -0
  568. package/packages/agent/src/test-support/process-helpers.d.ts.map +1 -0
  569. package/packages/agent/src/test-support/process-helpers.js +23 -0
  570. package/packages/agent/src/test-support/route-test-helpers.d.ts +37 -0
  571. package/packages/agent/src/test-support/route-test-helpers.d.ts.map +1 -0
  572. package/packages/agent/src/test-support/route-test-helpers.js +54 -0
  573. package/packages/agent/src/test-support/test-helpers.d.ts +77 -0
  574. package/packages/agent/src/test-support/test-helpers.d.ts.map +1 -0
  575. package/packages/agent/src/test-support/test-helpers.js +210 -0
  576. package/packages/agent/src/testing/index.d.ts +4 -0
  577. package/packages/agent/src/testing/index.d.ts.map +1 -0
  578. package/packages/agent/src/testing/index.js +3 -0
  579. package/packages/agent/src/triggers/action.d.ts +3 -0
  580. package/packages/agent/src/triggers/action.d.ts.map +1 -0
  581. package/packages/agent/src/triggers/action.js +267 -0
  582. package/packages/agent/src/triggers/runtime.d.ts +24 -0
  583. package/packages/agent/src/triggers/runtime.d.ts.map +1 -0
  584. package/packages/agent/src/triggers/runtime.js +322 -0
  585. package/packages/agent/src/triggers/scheduling.d.ts +70 -0
  586. package/packages/agent/src/triggers/scheduling.d.ts.map +1 -0
  587. package/packages/agent/src/triggers/scheduling.js +355 -0
  588. package/packages/agent/src/triggers/types.d.ts +115 -0
  589. package/packages/agent/src/triggers/types.d.ts.map +1 -0
  590. package/packages/agent/src/triggers/types.js +1 -0
  591. package/packages/agent/src/utils/exec-safety.d.ts +2 -0
  592. package/packages/agent/src/utils/exec-safety.d.ts.map +1 -0
  593. package/packages/agent/src/utils/exec-safety.js +21 -0
  594. package/packages/agent/src/utils/number-parsing.d.ts +26 -0
  595. package/packages/agent/src/utils/number-parsing.d.ts.map +1 -0
  596. package/packages/agent/src/utils/number-parsing.js +52 -0
  597. package/packages/agent/src/utils/spoken-text.d.ts +2 -0
  598. package/packages/agent/src/utils/spoken-text.d.ts.map +1 -0
  599. package/packages/agent/src/utils/spoken-text.js +56 -0
  600. package/packages/agent/src/version-resolver.d.ts +3 -0
  601. package/packages/agent/src/version-resolver.d.ts.map +1 -0
  602. package/packages/agent/src/version-resolver.js +51 -0
  603. package/jest.config.js +0 -17
  604. package/src/__tests__/client-type-identification.test.ts +0 -59
  605. package/src/defaultCharacter.ts +0 -530
  606. package/src/index.ts +0 -865
  607. package/tsconfig.json +0 -16
@@ -0,0 +1,729 @@
1
+ /**
2
+ * Agent Export/Import Service
3
+ *
4
+ * Provides encrypted, portable agent archives for migrating agents between
5
+ * machines. Captures all database state (character, memories, entities,
6
+ * relationships, rooms, participants, worlds, tasks, and optionally logs)
7
+ * into a single password-encrypted binary file (.eliza-agent).
8
+ *
9
+ * Encryption: PBKDF2-SHA256 key derivation + AES-256-GCM
10
+ * Compression: gzip
11
+ *
12
+ * File format (binary):
13
+ * ELIZA_AGENT_V1\n (15 bytes magic header)
14
+ * iterations (4 bytes uint32 BE — PBKDF2 iteration count)
15
+ * salt (32 bytes — PBKDF2 salt)
16
+ * iv (12 bytes — AES-256-GCM nonce)
17
+ * tag (16 bytes — AES-GCM authentication tag)
18
+ * ciphertext (variable — gzip-compressed JSON, encrypted)
19
+ */
20
+ import * as crypto from "node:crypto";
21
+ import { Readable } from "node:stream";
22
+ import { createGunzip, gzipSync } from "node:zlib";
23
+ import { logger } from "@elizaos/core";
24
+ import { z } from "zod";
25
+ // ---------------------------------------------------------------------------
26
+ // Constants
27
+ // ---------------------------------------------------------------------------
28
+ const MAGIC_HEADER = "ELIZA_AGENT_V1\n";
29
+ const MAGIC_BYTES = Buffer.from(MAGIC_HEADER, "utf-8"); // 15 bytes
30
+ const PBKDF2_ITERATIONS = 600_000; // OWASP 2024 recommendation for SHA-256
31
+ const MAX_PBKDF2_ITERATIONS = 1_200_000; // 2× the default — reject anything higher on import
32
+ const SALT_LEN = 32;
33
+ const IV_LEN = 12; // AES-256-GCM standard nonce
34
+ const TAG_LEN = 16; // AES-GCM authentication tag
35
+ const KEY_LEN = 32; // AES-256
36
+ const MIN_PASSWORD_LENGTH = 4;
37
+ const HEADER_SIZE = MAGIC_BYTES.length + 4 + SALT_LEN + IV_LEN + TAG_LEN; // 15 + 4 + 32 + 12 + 16 = 79
38
+ const EXPORT_VERSION = 1;
39
+ const MAX_IMPORT_DECOMPRESSED_BYTES = 16 * 1024 * 1024; // 16 MiB safety cap
40
+ // Memory table names we need to export. The adapter's getMemories requires
41
+ // a tableName parameter. These are the known built-in table names used by
42
+ // elizaOS. We query each individually and merge the results.
43
+ const MEMORY_TABLES = [
44
+ "messages",
45
+ "facts",
46
+ "documents",
47
+ "fragments",
48
+ "descriptions",
49
+ "character_modifications",
50
+ "custom",
51
+ ];
52
+ // ---------------------------------------------------------------------------
53
+ // Validation schema for the decrypted payload
54
+ // ---------------------------------------------------------------------------
55
+ // Records that must have an id field for import to work
56
+ const IdRecord = z
57
+ .record(z.string(), z.unknown())
58
+ .and(z.object({ id: z.string() }));
59
+ const IdRecordArray = z.array(IdRecord);
60
+ // Logs don't need IDs (they're created fresh on import)
61
+ const LooseRecordArray = z.array(z.record(z.string(), z.unknown()));
62
+ const PayloadSchema = z.object({
63
+ version: z.number().int().min(1),
64
+ exportedAt: z.string(),
65
+ sourceAgentId: z.string(),
66
+ agent: z.record(z.string(), z.unknown()),
67
+ characterConfig: z.record(z.string(), z.unknown()).optional(),
68
+ entities: IdRecordArray,
69
+ memories: IdRecordArray,
70
+ components: IdRecordArray,
71
+ rooms: IdRecordArray,
72
+ participants: z.array(z.object({
73
+ entityId: z.string(),
74
+ roomId: z.string(),
75
+ userState: z.string().nullable(),
76
+ })),
77
+ relationships: IdRecordArray,
78
+ worlds: IdRecordArray,
79
+ tasks: IdRecordArray,
80
+ logs: LooseRecordArray,
81
+ });
82
+ // ---------------------------------------------------------------------------
83
+ // Crypto helpers
84
+ // ---------------------------------------------------------------------------
85
+ function deriveKey(password, salt, iterations) {
86
+ return new Promise((resolve, reject) => {
87
+ crypto.pbkdf2(password, salt, iterations, KEY_LEN, "sha256", (err, key) => {
88
+ if (err)
89
+ reject(err);
90
+ else
91
+ resolve(key);
92
+ });
93
+ });
94
+ }
95
+ async function encrypt(plaintext, password) {
96
+ const salt = crypto.randomBytes(SALT_LEN);
97
+ const iv = crypto.randomBytes(IV_LEN);
98
+ const key = await deriveKey(password, salt, PBKDF2_ITERATIONS);
99
+ const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
100
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
101
+ const tag = cipher.getAuthTag();
102
+ return { salt, iv, tag, ciphertext, iterations: PBKDF2_ITERATIONS };
103
+ }
104
+ async function decrypt(ciphertext, password, salt, iv, tag, iterations) {
105
+ const key = await deriveKey(password, salt, iterations);
106
+ const decipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
107
+ decipher.setAuthTag(tag);
108
+ const plaintext = Buffer.concat([
109
+ decipher.update(ciphertext),
110
+ decipher.final(),
111
+ ]);
112
+ return plaintext;
113
+ }
114
+ // ---------------------------------------------------------------------------
115
+ // Binary file packing / unpacking
116
+ // ---------------------------------------------------------------------------
117
+ function packFile(encrypted) {
118
+ const iterBuf = Buffer.alloc(4);
119
+ iterBuf.writeUInt32BE(encrypted.iterations, 0);
120
+ return Buffer.concat([
121
+ MAGIC_BYTES,
122
+ iterBuf,
123
+ encrypted.salt,
124
+ encrypted.iv,
125
+ encrypted.tag,
126
+ encrypted.ciphertext,
127
+ ]);
128
+ }
129
+ function unpackFile(fileBuffer) {
130
+ if (fileBuffer.length < HEADER_SIZE) {
131
+ throw new AgentExportError("File is too small to be a valid .eliza-agent export.");
132
+ }
133
+ const magic = fileBuffer.subarray(0, MAGIC_BYTES.length);
134
+ if (!magic.equals(MAGIC_BYTES)) {
135
+ throw new AgentExportError("Invalid file format — this does not appear to be an .eliza-agent export file.");
136
+ }
137
+ let offset = MAGIC_BYTES.length;
138
+ const iterations = fileBuffer.readUInt32BE(offset);
139
+ offset += 4;
140
+ if (iterations < 1 || iterations > MAX_PBKDF2_ITERATIONS) {
141
+ throw new AgentExportError(`Invalid PBKDF2 iteration count (${iterations}). ` +
142
+ `Expected between 1 and ${MAX_PBKDF2_ITERATIONS.toLocaleString()}.`);
143
+ }
144
+ const salt = fileBuffer.subarray(offset, offset + SALT_LEN);
145
+ offset += SALT_LEN;
146
+ const iv = fileBuffer.subarray(offset, offset + IV_LEN);
147
+ offset += IV_LEN;
148
+ const tag = fileBuffer.subarray(offset, offset + TAG_LEN);
149
+ offset += TAG_LEN;
150
+ const ciphertext = fileBuffer.subarray(offset);
151
+ if (ciphertext.length === 0) {
152
+ throw new AgentExportError("Export file contains no encrypted data.");
153
+ }
154
+ return { salt, iv, tag, ciphertext, iterations };
155
+ }
156
+ // ---------------------------------------------------------------------------
157
+ // Custom error class
158
+ // ---------------------------------------------------------------------------
159
+ export class AgentExportError extends Error {
160
+ constructor(message) {
161
+ super(message);
162
+ this.name = "AgentExportError";
163
+ }
164
+ }
165
+ async function gunzipWithSizeLimit(compressed, maxBytes = MAX_IMPORT_DECOMPRESSED_BYTES) {
166
+ const source = Readable.from([compressed]);
167
+ const gunzip = createGunzip();
168
+ const chunks = [];
169
+ let total = 0;
170
+ source.pipe(gunzip);
171
+ for await (const chunk of gunzip) {
172
+ const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
173
+ total += buf.length;
174
+ if (total > maxBytes) {
175
+ source.destroy();
176
+ gunzip.destroy();
177
+ throw new AgentExportError(`Decompressed payload exceeds import limit (${maxBytes} bytes).`);
178
+ }
179
+ chunks.push(buf);
180
+ }
181
+ return Buffer.concat(chunks, total);
182
+ }
183
+ // ---------------------------------------------------------------------------
184
+ // Data extraction
185
+ // ---------------------------------------------------------------------------
186
+ /** Read agentId from a Task, accounting for proto vs DB naming. */
187
+ function taskAgentId(t) {
188
+ const rec = t;
189
+ return (rec.agentId ?? rec.agent_id);
190
+ }
191
+ async function extractAgentData(runtime, options) {
192
+ const db = runtime.adapter;
193
+ const agentId = runtime.agentId;
194
+ logger.info(`[agent-export] Extracting data for agent ${agentId}`);
195
+ // 1. Agent record
196
+ const agents = await db.getAgentsByIds([agentId]);
197
+ const agent = agents[0];
198
+ if (!agent) {
199
+ throw new AgentExportError(`Agent ${agentId} not found in database.`);
200
+ }
201
+ // 2. Worlds owned by this agent
202
+ const allWorlds = await db.getAllWorlds();
203
+ const agentWorlds = allWorlds.filter((w) => w.agentId === agentId);
204
+ logger.info(`[agent-export] Found ${agentWorlds.length} worlds`);
205
+ // 3. Rooms — gather from worlds and from participant list
206
+ const roomMap = new Map();
207
+ for (const world of agentWorlds) {
208
+ if (!world.id)
209
+ continue;
210
+ const worldRooms = await db.getRoomsByWorlds([world.id]);
211
+ for (const room of worldRooms) {
212
+ if (room.id)
213
+ roomMap.set(room.id, room);
214
+ }
215
+ }
216
+ // Also get rooms the agent participates in directly
217
+ const participantRoomIds = await db.getRoomsForParticipants([agentId]);
218
+ if (participantRoomIds.length > 0) {
219
+ const participantRooms = await db.getRoomsByIds(participantRoomIds);
220
+ if (participantRooms) {
221
+ for (const room of participantRooms) {
222
+ if (room.id)
223
+ roomMap.set(room.id, room);
224
+ }
225
+ }
226
+ }
227
+ const rooms = Array.from(roomMap.values());
228
+ logger.info(`[agent-export] Found ${rooms.length} rooms`);
229
+ // 4. Entities and participants for each room
230
+ const entityMap = new Map();
231
+ const participantRecords = [];
232
+ for (const room of rooms) {
233
+ if (!room.id)
234
+ continue;
235
+ const entitiesResult = await db.getEntitiesForRooms([room.id], true);
236
+ const roomEntities = entitiesResult[0]?.entities ?? [];
237
+ for (const entity of roomEntities) {
238
+ if (entity.id)
239
+ entityMap.set(entity.id, entity);
240
+ }
241
+ const participantsResult = await db.getParticipantsForRooms([room.id]);
242
+ const participantIds = participantsResult[0]?.entityIds ?? [];
243
+ for (const entityId of participantIds) {
244
+ const userStates = await db.getParticipantUserStates([
245
+ { roomId: room.id, entityId },
246
+ ]);
247
+ const userState = userStates[0] ?? null;
248
+ participantRecords.push({
249
+ entityId,
250
+ roomId: room.id,
251
+ userState,
252
+ });
253
+ }
254
+ }
255
+ const entities = Array.from(entityMap.values());
256
+ logger.info(`[agent-export] Found ${entities.length} entities, ${participantRecords.length} participant records`);
257
+ // 5. Components for all entities (deduplicated by ID)
258
+ const componentIds = new Set();
259
+ const allComponents = [];
260
+ const addComponent = (c) => {
261
+ if (c.id && !componentIds.has(c.id)) {
262
+ componentIds.add(c.id);
263
+ allComponents.push(c);
264
+ }
265
+ };
266
+ for (const entity of entities) {
267
+ if (!entity.id)
268
+ continue;
269
+ for (const c of await db.getComponentsForEntities([entity.id]))
270
+ addComponent(c);
271
+ for (const world of agentWorlds) {
272
+ if (!world.id)
273
+ continue;
274
+ for (const c of await db.getComponentsForEntities([entity.id], world.id))
275
+ addComponent(c);
276
+ }
277
+ }
278
+ logger.info(`[agent-export] Found ${allComponents.length} components`);
279
+ // 6. Memories — query all known table names
280
+ const allMemories = [];
281
+ const memoryIdSet = new Set();
282
+ for (const tableName of MEMORY_TABLES) {
283
+ const memories = await db.getMemories({
284
+ agentId,
285
+ tableName,
286
+ count: Number.MAX_SAFE_INTEGER,
287
+ });
288
+ for (const mem of memories) {
289
+ if (mem.id && !memoryIdSet.has(mem.id)) {
290
+ memoryIdSet.add(mem.id);
291
+ // Strip embeddings to reduce file size — they can be regenerated
292
+ allMemories.push({ ...mem, embedding: undefined });
293
+ }
294
+ }
295
+ }
296
+ // Also try querying memories by world
297
+ for (const world of agentWorlds) {
298
+ if (!world.id)
299
+ continue;
300
+ for (const tableName of MEMORY_TABLES) {
301
+ const worldMemories = await db.getMemoriesByWorldId({
302
+ worldIds: [world.id],
303
+ count: Number.MAX_SAFE_INTEGER,
304
+ tableName,
305
+ });
306
+ for (const mem of worldMemories) {
307
+ if (mem.id && !memoryIdSet.has(mem.id)) {
308
+ memoryIdSet.add(mem.id);
309
+ allMemories.push({ ...mem, embedding: undefined });
310
+ }
311
+ }
312
+ }
313
+ }
314
+ logger.info(`[agent-export] Found ${allMemories.length} memories`);
315
+ // 7. Relationships
316
+ const relationships = await db.getRelationships({ entityIds: [agentId] });
317
+ logger.info(`[agent-export] Found ${relationships.length} relationships`);
318
+ // 8. Tasks
319
+ // The Task proto type does not declare agentId, but the DB schema stores
320
+ // agent_id. Filter using a dynamic property access to handle both shapes.
321
+ const allTasks = await db.getTasks({ agentIds: [agentId] });
322
+ const agentTasks = allTasks.filter((t) => taskAgentId(t) === agentId);
323
+ logger.info(`[agent-export] Found ${agentTasks.length} tasks`);
324
+ // 9. Logs (optional)
325
+ let logs = [];
326
+ if (options.includeLogs) {
327
+ logs = await db.getLogs({ count: Number.MAX_SAFE_INTEGER });
328
+ logger.info(`[agent-export] Found ${logs.length} logs`);
329
+ }
330
+ // 10. Runtime character config — captures fields from buildCharacterFromConfig
331
+ // that may not be persisted in the DB agent record (style, topics, adjectives,
332
+ // messageExamples, postExamples, knowledge sources, etc.)
333
+ let characterConfig;
334
+ if (runtime.character) {
335
+ // Clone and strip secrets/sensitive fields
336
+ const { secrets, ...safeChar } = runtime.character;
337
+ characterConfig = Object.fromEntries(Object.entries(safeChar));
338
+ logger.info(`[agent-export] Captured runtime character config (${Object.keys(safeChar).length} fields)`);
339
+ }
340
+ return {
341
+ version: EXPORT_VERSION,
342
+ exportedAt: new Date().toISOString(),
343
+ sourceAgentId: agentId,
344
+ agent,
345
+ characterConfig,
346
+ entities,
347
+ memories: allMemories,
348
+ components: allComponents,
349
+ rooms,
350
+ participants: participantRecords,
351
+ relationships,
352
+ worlds: agentWorlds,
353
+ tasks: agentTasks,
354
+ logs,
355
+ };
356
+ }
357
+ // ---------------------------------------------------------------------------
358
+ // ID remapping for import
359
+ // ---------------------------------------------------------------------------
360
+ function createIdRemapper(fixed) {
361
+ const map = new Map(fixed);
362
+ return (oldId) => {
363
+ if (!oldId)
364
+ return oldId;
365
+ const existing = map.get(oldId);
366
+ if (existing)
367
+ return existing;
368
+ const newId = crypto.randomUUID();
369
+ map.set(oldId, newId);
370
+ return newId;
371
+ };
372
+ }
373
+ // ---------------------------------------------------------------------------
374
+ // Data restoration
375
+ // ---------------------------------------------------------------------------
376
+ async function restoreAgentData(runtime, payload) {
377
+ const db = runtime.adapter;
378
+ const newAgentId = crypto.randomUUID();
379
+ const remap = createIdRemapper(new Map([[payload.sourceAgentId, newAgentId]]));
380
+ logger.info(`[agent-import] Importing agent "${payload.agent.name}" as ${newAgentId}`);
381
+ // 1. Create agent — merge characterConfig (if present) as a base so
382
+ // style/topics/adjectives/messageExamples survive the round-trip even
383
+ // if the DB agent record didn't persist them.
384
+ const charBase = payload.characterConfig
385
+ ? { ...payload.characterConfig }
386
+ : {};
387
+ // Remove secrets that may have leaked into characterConfig
388
+ delete charBase.secrets;
389
+ const agentData = { ...charBase, ...payload.agent };
390
+ agentData.id = newAgentId;
391
+ agentData.enabled = true;
392
+ agentData.createdAt = Date.now();
393
+ agentData.updatedAt = Date.now();
394
+ const agentCreatedIds = await db.createAgents([agentData]);
395
+ if (!agentCreatedIds || agentCreatedIds.length === 0) {
396
+ throw new AgentExportError("Failed to create agent in database.");
397
+ }
398
+ logger.info(`[agent-import] Created agent record${payload.characterConfig ? " (merged with characterConfig)" : ""}`);
399
+ // 2. Create worlds
400
+ let worldsImported = 0;
401
+ for (const world of payload.worlds) {
402
+ const newWorld = {
403
+ ...world,
404
+ id: remap(world.id ?? ""),
405
+ agentId: newAgentId,
406
+ };
407
+ await db.createWorlds([newWorld]);
408
+ worldsImported++;
409
+ }
410
+ logger.info(`[agent-import] Imported ${worldsImported} worlds`);
411
+ // 3. Create rooms
412
+ let roomsImported = 0;
413
+ const roomBatch = [];
414
+ for (const room of payload.rooms) {
415
+ const newRoom = {
416
+ ...room,
417
+ id: remap(room.id ?? ""),
418
+ agentId: newAgentId,
419
+ worldId: room.worldId ? remap(room.worldId) : undefined,
420
+ };
421
+ roomBatch.push(newRoom);
422
+ }
423
+ if (roomBatch.length > 0) {
424
+ await db.createRooms(roomBatch);
425
+ roomsImported = roomBatch.length;
426
+ }
427
+ logger.info(`[agent-import] Imported ${roomsImported} rooms`);
428
+ // 4. Create entities
429
+ let entitiesImported = 0;
430
+ const entityBatch = [];
431
+ for (const entity of payload.entities) {
432
+ const newEntity = {
433
+ ...entity,
434
+ id: remap(entity.id ?? ""),
435
+ agentId: newAgentId,
436
+ // Strip components — we'll recreate them separately
437
+ components: undefined,
438
+ };
439
+ entityBatch.push(newEntity);
440
+ }
441
+ if (entityBatch.length > 0) {
442
+ await db.createEntities(entityBatch);
443
+ entitiesImported = entityBatch.length;
444
+ }
445
+ logger.info(`[agent-import] Imported ${entitiesImported} entities`);
446
+ // 5. Add participants to rooms
447
+ let participantsImported = 0;
448
+ for (const p of payload.participants) {
449
+ const newEntityId = remap(p.entityId);
450
+ const newRoomId = remap(p.roomId);
451
+ await db.createRoomParticipants([newEntityId], newRoomId);
452
+ if (p.userState === "FOLLOWED" || p.userState === "MUTED") {
453
+ await db.updateParticipantUserStates([
454
+ { roomId: newRoomId, entityId: newEntityId, state: p.userState },
455
+ ]);
456
+ }
457
+ participantsImported++;
458
+ }
459
+ logger.info(`[agent-import] Imported ${participantsImported} participants`);
460
+ // 6. Create components
461
+ let componentsImported = 0;
462
+ for (const comp of payload.components) {
463
+ const newComp = {
464
+ ...comp,
465
+ id: remap(comp.id ?? ""),
466
+ ...(comp.entityId ? { entityId: remap(comp.entityId) } : {}),
467
+ ...(comp.agentId ? { agentId: newAgentId } : {}),
468
+ ...(comp.roomId ? { roomId: remap(comp.roomId) } : {}),
469
+ ...(comp.worldId ? { worldId: remap(comp.worldId) } : {}),
470
+ ...(comp.sourceEntityId
471
+ ? { sourceEntityId: remap(comp.sourceEntityId) }
472
+ : {}),
473
+ };
474
+ await db.createComponents([newComp]);
475
+ componentsImported++;
476
+ }
477
+ logger.info(`[agent-import] Imported ${componentsImported} components`);
478
+ // 7. Create memories
479
+ let memoriesImported = 0;
480
+ for (const mem of payload.memories) {
481
+ const tableName = resolveMemoryTableName(mem);
482
+ const newMem = {
483
+ ...mem,
484
+ id: remap(mem.id ?? ""),
485
+ agentId: newAgentId,
486
+ ...(mem.entityId ? { entityId: remap(mem.entityId) } : {}),
487
+ ...(mem.roomId ? { roomId: remap(mem.roomId) } : {}),
488
+ ...(mem.worldId ? { worldId: remap(mem.worldId) } : {}),
489
+ // Embeddings are excluded — they will be regenerated
490
+ embedding: undefined,
491
+ };
492
+ await db.createMemories([{ memory: newMem, tableName }]);
493
+ memoriesImported++;
494
+ }
495
+ logger.info(`[agent-import] Imported ${memoriesImported} memories`);
496
+ // 8. Create relationships
497
+ let relationshipsImported = 0;
498
+ for (const rel of payload.relationships) {
499
+ await db.createRelationships([
500
+ {
501
+ sourceEntityId: remap(rel.sourceEntityId ?? ""),
502
+ targetEntityId: remap(rel.targetEntityId ?? ""),
503
+ tags: rel.tags,
504
+ metadata: rel.metadata,
505
+ },
506
+ ]);
507
+ relationshipsImported++;
508
+ }
509
+ logger.info(`[agent-import] Imported ${relationshipsImported} relationships`);
510
+ // 9. Create tasks
511
+ // The Task type doesn't declare agentId but the DB schema stores it.
512
+ // We spread the original task and add agentId as a dynamic property
513
+ // that the database adapter will persist.
514
+ let tasksImported = 0;
515
+ for (const task of payload.tasks) {
516
+ const newTask = {
517
+ ...task,
518
+ id: remap(task.id ?? ""),
519
+ agentId: newAgentId,
520
+ roomId: task.roomId ? remap(task.roomId) : undefined,
521
+ worldId: task.worldId ? remap(task.worldId) : undefined,
522
+ entityId: task.entityId ? remap(task.entityId) : undefined,
523
+ };
524
+ await db.createTasks([newTask]);
525
+ tasksImported++;
526
+ }
527
+ logger.info(`[agent-import] Imported ${tasksImported} tasks`);
528
+ // 10. Create logs
529
+ let logsImported = 0;
530
+ for (const logEntry of payload.logs) {
531
+ await db.createLogs([
532
+ {
533
+ body: logEntry.body,
534
+ entityId: (logEntry.entityId
535
+ ? remap(logEntry.entityId)
536
+ : logEntry.entityId),
537
+ roomId: logEntry.roomId
538
+ ? remap(logEntry.roomId)
539
+ : newAgentId,
540
+ type: logEntry.type ?? "action",
541
+ },
542
+ ]);
543
+ logsImported++;
544
+ }
545
+ logger.info(`[agent-import] Imported ${logsImported} logs`);
546
+ return {
547
+ success: true,
548
+ agentId: newAgentId,
549
+ agentName: payload.agent.name ?? "Unknown",
550
+ counts: {
551
+ memories: memoriesImported,
552
+ entities: entitiesImported,
553
+ components: componentsImported,
554
+ rooms: roomsImported,
555
+ participants: participantsImported,
556
+ relationships: relationshipsImported,
557
+ worlds: worldsImported,
558
+ tasks: tasksImported,
559
+ logs: logsImported,
560
+ },
561
+ };
562
+ }
563
+ /**
564
+ * Resolve the memory table name from a memory record's metadata.
565
+ * The elizaOS adapter requires a tableName for createMemory.
566
+ */
567
+ function resolveMemoryTableName(mem) {
568
+ const metaType = mem.metadata?.type;
569
+ if (metaType === "message")
570
+ return "messages";
571
+ if (metaType === "document")
572
+ return "documents";
573
+ if (metaType === "fragment")
574
+ return "fragments";
575
+ if (metaType === "description")
576
+ return "descriptions";
577
+ if (metaType === "custom")
578
+ return "custom";
579
+ // Fallback: use the "type" field on the memory itself (elizaOS stores it
580
+ // as a top-level field in the DB row, which the proto Memory type inherits).
581
+ const memType = mem.type;
582
+ if (typeof memType === "string" && memType.length > 0)
583
+ return memType;
584
+ return "messages";
585
+ }
586
+ // ---------------------------------------------------------------------------
587
+ // Public API
588
+ // ---------------------------------------------------------------------------
589
+ /**
590
+ * Export the current agent's full state as a password-encrypted binary file.
591
+ *
592
+ * @param runtime - The running AgentRuntime with an active database adapter
593
+ * @param password - User-provided password for encryption
594
+ * @param options - Export options (e.g., whether to include logs)
595
+ * @returns A Buffer containing the encrypted .eliza-agent file
596
+ */
597
+ export async function exportAgent(runtime, password, options = {}) {
598
+ if (!password || password.length < MIN_PASSWORD_LENGTH) {
599
+ throw new AgentExportError(`A password of at least ${MIN_PASSWORD_LENGTH} characters is required to encrypt the export.`);
600
+ }
601
+ if (!runtime.adapter) {
602
+ throw new AgentExportError("No database adapter available on the runtime.");
603
+ }
604
+ const payload = await extractAgentData(runtime, {
605
+ includeLogs: options.includeLogs ?? false,
606
+ });
607
+ const jsonString = JSON.stringify(payload);
608
+ const compressed = gzipSync(Buffer.from(jsonString, "utf-8"));
609
+ logger.info(`[agent-export] Payload: ${jsonString.length} bytes JSON → ${compressed.length} bytes compressed`);
610
+ const encrypted = await encrypt(compressed, password);
611
+ const fileBuffer = packFile(encrypted);
612
+ logger.info(`[agent-export] Final file size: ${fileBuffer.length} bytes`);
613
+ return fileBuffer;
614
+ }
615
+ /**
616
+ * Import an agent from a password-encrypted .eliza-agent file.
617
+ *
618
+ * @param runtime - An AgentRuntime with an active database adapter (the agent
619
+ * will be created in this database, not overwriting the current agent)
620
+ * @param fileBuffer - The raw bytes of the .eliza-agent file
621
+ * @param password - The password used when the file was exported
622
+ * @returns An ImportResult describing what was imported
623
+ */
624
+ export async function importAgent(runtime, fileBuffer, password) {
625
+ if (!password || password.length < MIN_PASSWORD_LENGTH) {
626
+ throw new AgentExportError(`A password of at least ${MIN_PASSWORD_LENGTH} characters is required to decrypt the import.`);
627
+ }
628
+ if (!runtime.adapter) {
629
+ throw new AgentExportError("No database adapter available on the runtime.");
630
+ }
631
+ // 1. Unpack file structure
632
+ const { salt, iv, tag, ciphertext, iterations } = unpackFile(fileBuffer);
633
+ // 2. Decrypt
634
+ let compressed;
635
+ try {
636
+ compressed = await decrypt(ciphertext, password, salt, iv, tag, iterations);
637
+ }
638
+ catch (err) {
639
+ if (err instanceof Error &&
640
+ (err.message.includes("Unsupported state") ||
641
+ err.message.includes("unable to authenticate") ||
642
+ err.message.includes("auth"))) {
643
+ throw new AgentExportError("Incorrect password — decryption failed. Please check your password and try again.");
644
+ }
645
+ throw new AgentExportError(`Decryption failed: ${err instanceof Error ? err.message : String(err)}`);
646
+ }
647
+ // 3. Decompress
648
+ let jsonString;
649
+ try {
650
+ const decompressed = await gunzipWithSizeLimit(compressed);
651
+ jsonString = decompressed.toString("utf-8");
652
+ }
653
+ catch (err) {
654
+ if (err instanceof AgentExportError)
655
+ throw err;
656
+ throw new AgentExportError(`Decompression failed — the file may be corrupt: ${err instanceof Error ? err.message : String(err)}`);
657
+ }
658
+ // 4. Parse JSON
659
+ let rawPayload;
660
+ try {
661
+ rawPayload = JSON.parse(jsonString);
662
+ }
663
+ catch (err) {
664
+ throw new AgentExportError(`JSON parse failed — the export data is malformed: ${err instanceof Error ? err.message : String(err)}`);
665
+ }
666
+ // 5. Validate schema
667
+ const parseResult = PayloadSchema.safeParse(rawPayload);
668
+ if (!parseResult.success) {
669
+ const issues = parseResult.error.issues
670
+ .map((i) => `${i.path.join(".")}: ${i.message}`)
671
+ .join("; ");
672
+ throw new AgentExportError(`Export file schema validation failed: ${issues}`);
673
+ }
674
+ const payload = parseResult.data;
675
+ if (payload.version > EXPORT_VERSION) {
676
+ throw new AgentExportError(`Unsupported export version ${payload.version}. This build supports up to version ${EXPORT_VERSION}. ` +
677
+ "Please update your software to import this file.");
678
+ }
679
+ logger.info(`[agent-import] Importing agent "${payload.agent.name}" exported at ${payload.exportedAt}`);
680
+ // 6. Restore data
681
+ return restoreAgentData(runtime, payload);
682
+ }
683
+ /**
684
+ * Estimate the size of an agent export without actually creating it.
685
+ * Useful for showing the user how large the export will be.
686
+ */
687
+ export async function estimateExportSize(runtime) {
688
+ const db = runtime.adapter;
689
+ const agentId = runtime.agentId;
690
+ let memoriesCount = 0;
691
+ for (const tableName of MEMORY_TABLES) {
692
+ const mems = await db.getMemories({
693
+ agentId,
694
+ tableName,
695
+ count: Number.MAX_SAFE_INTEGER,
696
+ });
697
+ memoriesCount += mems.length;
698
+ }
699
+ const allWorlds = await db.getAllWorlds();
700
+ const agentWorlds = allWorlds.filter((w) => w.agentId === agentId);
701
+ const roomIds = await db.getRoomsForParticipants([agentId]);
702
+ const entityIdSet = new Set();
703
+ if (roomIds.length > 0) {
704
+ const entitiesResult = await db.getEntitiesForRooms(roomIds, true);
705
+ for (const result of entitiesResult) {
706
+ for (const e of result.entities) {
707
+ if (e.id)
708
+ entityIdSet.add(e.id);
709
+ }
710
+ }
711
+ }
712
+ const tasks = await db.getTasks({ agentIds: [agentId] });
713
+ const agentTasks = tasks.filter((t) => taskAgentId(t) === agentId);
714
+ // Rough estimate: ~500 bytes per memory, ~200 bytes per entity, ~300 per room
715
+ const estimatedBytes = memoriesCount * 500 +
716
+ entityIdSet.size * 200 +
717
+ roomIds.length * 300 +
718
+ agentWorlds.length * 200 +
719
+ agentTasks.length * 400 +
720
+ 2000; // base overhead
721
+ return {
722
+ estimatedBytes,
723
+ memoriesCount,
724
+ entitiesCount: entityIdSet.size,
725
+ roomsCount: roomIds.length,
726
+ worldsCount: agentWorlds.length,
727
+ tasksCount: agentTasks.length,
728
+ };
729
+ }