@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.
- package/LICENSE +1 -1
- package/package.json +994 -34
- package/packages/agent/src/actions/emote.d.ts +14 -0
- package/packages/agent/src/actions/emote.d.ts.map +1 -0
- package/packages/agent/src/actions/emote.js +91 -0
- package/packages/agent/src/actions/restart.d.ts +19 -0
- package/packages/agent/src/actions/restart.d.ts.map +1 -0
- package/packages/agent/src/actions/restart.js +86 -0
- package/packages/agent/src/actions/send-message.d.ts +3 -0
- package/packages/agent/src/actions/send-message.d.ts.map +1 -0
- package/packages/agent/src/actions/send-message.js +144 -0
- package/packages/agent/src/actions/stream-control.d.ts +15 -0
- package/packages/agent/src/actions/stream-control.d.ts.map +1 -0
- package/packages/agent/src/actions/stream-control.js +357 -0
- package/packages/agent/src/actions/switch-stream-source.d.ts +16 -0
- package/packages/agent/src/actions/switch-stream-source.d.ts.map +1 -0
- package/packages/agent/src/actions/switch-stream-source.js +94 -0
- package/packages/agent/src/actions/terminal.d.ts +14 -0
- package/packages/agent/src/actions/terminal.d.ts.map +1 -0
- package/packages/agent/src/actions/terminal.js +154 -0
- package/packages/agent/src/api/agent-admin-routes.d.ts +38 -0
- package/packages/agent/src/api/agent-admin-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-admin-routes.js +93 -0
- package/packages/agent/src/api/agent-lifecycle-routes.d.ts +16 -0
- package/packages/agent/src/api/agent-lifecycle-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-lifecycle-routes.js +80 -0
- package/packages/agent/src/api/agent-model.d.ts +12 -0
- package/packages/agent/src/api/agent-model.d.ts.map +1 -0
- package/packages/agent/src/api/agent-model.js +123 -0
- package/packages/agent/src/api/agent-transfer-routes.d.ts +16 -0
- package/packages/agent/src/api/agent-transfer-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-transfer-routes.js +124 -0
- package/packages/agent/src/api/apps-routes.d.ts +19 -0
- package/packages/agent/src/api/apps-routes.d.ts.map +1 -0
- package/packages/agent/src/api/apps-routes.js +128 -0
- package/packages/agent/src/api/auth-routes.d.ts +11 -0
- package/packages/agent/src/api/auth-routes.d.ts.map +1 -0
- package/packages/agent/src/api/auth-routes.js +54 -0
- package/packages/agent/src/api/bsc-trade.d.ts +34 -0
- package/packages/agent/src/api/bsc-trade.d.ts.map +1 -0
- package/packages/agent/src/api/bsc-trade.js +567 -0
- package/packages/agent/src/api/bug-report-routes.d.ts +7 -0
- package/packages/agent/src/api/bug-report-routes.d.ts.map +1 -0
- package/packages/agent/src/api/bug-report-routes.js +124 -0
- package/packages/agent/src/api/character-routes.d.ts +50 -0
- package/packages/agent/src/api/character-routes.d.ts.map +1 -0
- package/packages/agent/src/api/character-routes.js +302 -0
- package/packages/agent/src/api/cloud-billing-routes.d.ts +14 -0
- package/packages/agent/src/api/cloud-billing-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-billing-routes.js +400 -0
- package/packages/agent/src/api/cloud-compat-routes.d.ts +15 -0
- package/packages/agent/src/api/cloud-compat-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-compat-routes.js +131 -0
- package/packages/agent/src/api/cloud-routes.d.ts +62 -0
- package/packages/agent/src/api/cloud-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-routes.js +339 -0
- package/packages/agent/src/api/cloud-status-routes.d.ts +15 -0
- package/packages/agent/src/api/cloud-status-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-status-routes.js +165 -0
- package/packages/agent/src/api/compat-utils.d.ts +49 -0
- package/packages/agent/src/api/compat-utils.d.ts.map +1 -0
- package/packages/agent/src/api/compat-utils.js +126 -0
- package/packages/agent/src/api/connector-health.d.ts +34 -0
- package/packages/agent/src/api/connector-health.d.ts.map +1 -0
- package/packages/agent/src/api/connector-health.js +109 -0
- package/packages/agent/src/api/coordinator-wiring.d.ts +46 -0
- package/packages/agent/src/api/coordinator-wiring.d.ts.map +1 -0
- package/packages/agent/src/api/coordinator-wiring.js +101 -0
- package/packages/agent/src/api/credit-detection.d.ts +9 -0
- package/packages/agent/src/api/credit-detection.d.ts.map +1 -0
- package/packages/agent/src/api/credit-detection.js +41 -0
- package/packages/agent/src/api/database.d.ts +33 -0
- package/packages/agent/src/api/database.d.ts.map +1 -0
- package/packages/agent/src/api/database.js +1019 -0
- package/packages/agent/src/api/diagnostics-routes.d.ts +46 -0
- package/packages/agent/src/api/diagnostics-routes.d.ts.map +1 -0
- package/packages/agent/src/api/diagnostics-routes.js +241 -0
- package/packages/agent/src/api/drop-service.d.ts +26 -0
- package/packages/agent/src/api/drop-service.d.ts.map +1 -0
- package/packages/agent/src/api/drop-service.js +134 -0
- package/packages/agent/src/api/early-logs.d.ts +29 -0
- package/packages/agent/src/api/early-logs.d.ts.map +1 -0
- package/packages/agent/src/api/early-logs.js +96 -0
- package/packages/agent/src/api/http-helpers.d.ts +50 -0
- package/packages/agent/src/api/http-helpers.d.ts.map +1 -0
- package/packages/agent/src/api/http-helpers.js +145 -0
- package/packages/agent/src/api/index.d.ts +61 -0
- package/packages/agent/src/api/index.d.ts.map +1 -0
- package/packages/agent/src/api/index.js +59 -0
- package/packages/agent/src/api/knowledge-routes.d.ts +23 -0
- package/packages/agent/src/api/knowledge-routes.d.ts.map +1 -0
- package/packages/agent/src/api/knowledge-routes.js +931 -0
- package/packages/agent/src/api/knowledge-service-loader.d.ts +51 -0
- package/packages/agent/src/api/knowledge-service-loader.d.ts.map +1 -0
- package/packages/agent/src/api/knowledge-service-loader.js +34 -0
- package/packages/agent/src/api/memory-bounds.d.ts +51 -0
- package/packages/agent/src/api/memory-bounds.d.ts.map +1 -0
- package/packages/agent/src/api/memory-bounds.js +81 -0
- package/packages/agent/src/api/memory-routes.d.ts +9 -0
- package/packages/agent/src/api/memory-routes.d.ts.map +1 -0
- package/packages/agent/src/api/memory-routes.js +241 -0
- package/packages/agent/src/api/merkle-tree.d.ts +90 -0
- package/packages/agent/src/api/merkle-tree.d.ts.map +1 -0
- package/packages/agent/src/api/merkle-tree.js +174 -0
- package/packages/agent/src/api/models-routes.d.ts +14 -0
- package/packages/agent/src/api/models-routes.d.ts.map +1 -0
- package/packages/agent/src/api/models-routes.js +37 -0
- package/packages/agent/src/api/nfa-routes.d.ts +5 -0
- package/packages/agent/src/api/nfa-routes.d.ts.map +1 -0
- package/packages/agent/src/api/nfa-routes.js +125 -0
- package/packages/agent/src/api/og-tracker.d.ts +28 -0
- package/packages/agent/src/api/og-tracker.d.ts.map +1 -0
- package/packages/agent/src/api/og-tracker.js +60 -0
- package/packages/agent/src/api/parse-action-block.d.ts +36 -0
- package/packages/agent/src/api/parse-action-block.d.ts.map +1 -0
- package/packages/agent/src/api/parse-action-block.js +110 -0
- package/packages/agent/src/api/permissions-routes.d.ts +32 -0
- package/packages/agent/src/api/permissions-routes.d.ts.map +1 -0
- package/packages/agent/src/api/permissions-routes.js +149 -0
- package/packages/agent/src/api/plugin-validation.d.ts +86 -0
- package/packages/agent/src/api/plugin-validation.d.ts.map +1 -0
- package/packages/agent/src/api/plugin-validation.js +259 -0
- package/packages/agent/src/api/provider-switch-config.d.ts +37 -0
- package/packages/agent/src/api/provider-switch-config.d.ts.map +1 -0
- package/packages/agent/src/api/provider-switch-config.js +317 -0
- package/packages/agent/src/api/registry-routes.d.ts +26 -0
- package/packages/agent/src/api/registry-routes.d.ts.map +1 -0
- package/packages/agent/src/api/registry-routes.js +90 -0
- package/packages/agent/src/api/registry-service.d.ts +77 -0
- package/packages/agent/src/api/registry-service.d.ts.map +1 -0
- package/packages/agent/src/api/registry-service.js +190 -0
- package/packages/agent/src/api/route-helpers.d.ts +16 -0
- package/packages/agent/src/api/route-helpers.d.ts.map +1 -0
- package/packages/agent/src/api/route-helpers.js +1 -0
- package/packages/agent/src/api/sandbox-routes.d.ts +12 -0
- package/packages/agent/src/api/sandbox-routes.d.ts.map +1 -0
- package/packages/agent/src/api/sandbox-routes.js +1334 -0
- package/packages/agent/src/api/server.d.ts +418 -0
- package/packages/agent/src/api/server.d.ts.map +1 -0
- package/packages/agent/src/api/server.js +13614 -0
- package/packages/agent/src/api/signal-routes.d.ts +39 -0
- package/packages/agent/src/api/signal-routes.d.ts.map +1 -0
- package/packages/agent/src/api/signal-routes.js +168 -0
- package/packages/agent/src/api/stream-persistence.d.ts +64 -0
- package/packages/agent/src/api/stream-persistence.d.ts.map +1 -0
- package/packages/agent/src/api/stream-persistence.js +231 -0
- package/packages/agent/src/api/stream-route-state.d.ts +50 -0
- package/packages/agent/src/api/stream-route-state.d.ts.map +1 -0
- package/packages/agent/src/api/stream-route-state.js +1 -0
- package/packages/agent/src/api/stream-routes.d.ts +45 -0
- package/packages/agent/src/api/stream-routes.d.ts.map +1 -0
- package/packages/agent/src/api/stream-routes.js +809 -0
- package/packages/agent/src/api/stream-voice-routes.d.ts +36 -0
- package/packages/agent/src/api/stream-voice-routes.d.ts.map +1 -0
- package/packages/agent/src/api/stream-voice-routes.js +133 -0
- package/packages/agent/src/api/streaming-text.d.ts +9 -0
- package/packages/agent/src/api/streaming-text.d.ts.map +1 -0
- package/packages/agent/src/api/streaming-text.js +85 -0
- package/packages/agent/src/api/streaming-types.d.ts +30 -0
- package/packages/agent/src/api/streaming-types.d.ts.map +1 -0
- package/packages/agent/src/api/streaming-types.js +1 -0
- package/packages/agent/src/api/subscription-routes.d.ts +20 -0
- package/packages/agent/src/api/subscription-routes.d.ts.map +1 -0
- package/packages/agent/src/api/subscription-routes.js +191 -0
- package/packages/agent/src/api/terminal-run-limits.d.ts +5 -0
- package/packages/agent/src/api/terminal-run-limits.d.ts.map +1 -0
- package/packages/agent/src/api/terminal-run-limits.js +22 -0
- package/packages/agent/src/api/training-backend-check.d.ts +8 -0
- package/packages/agent/src/api/training-backend-check.d.ts.map +1 -0
- package/packages/agent/src/api/training-backend-check.js +28 -0
- package/packages/agent/src/api/training-routes.d.ts +44 -0
- package/packages/agent/src/api/training-routes.d.ts.map +1 -0
- package/packages/agent/src/api/training-routes.js +195 -0
- package/packages/agent/src/api/training-service-like.d.ts +38 -0
- package/packages/agent/src/api/training-service-like.d.ts.map +1 -0
- package/packages/agent/src/api/training-service-like.js +1 -0
- package/packages/agent/src/api/trajectory-routes.d.ts +17 -0
- package/packages/agent/src/api/trajectory-routes.d.ts.map +1 -0
- package/packages/agent/src/api/trajectory-routes.js +405 -0
- package/packages/agent/src/api/trigger-routes.d.ts +72 -0
- package/packages/agent/src/api/trigger-routes.d.ts.map +1 -0
- package/packages/agent/src/api/trigger-routes.js +268 -0
- package/packages/agent/src/api/twitter-verify.d.ts +25 -0
- package/packages/agent/src/api/twitter-verify.d.ts.map +1 -0
- package/packages/agent/src/api/twitter-verify.js +168 -0
- package/packages/agent/src/api/tx-service.d.ts +47 -0
- package/packages/agent/src/api/tx-service.d.ts.map +1 -0
- package/packages/agent/src/api/tx-service.js +156 -0
- package/packages/agent/src/api/wallet-dex-prices.d.ts +43 -0
- package/packages/agent/src/api/wallet-dex-prices.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-dex-prices.js +149 -0
- package/packages/agent/src/api/wallet-evm-balance.d.ts +65 -0
- package/packages/agent/src/api/wallet-evm-balance.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-evm-balance.js +663 -0
- package/packages/agent/src/api/wallet-routes.d.ts +33 -0
- package/packages/agent/src/api/wallet-routes.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-routes.js +292 -0
- package/packages/agent/src/api/wallet-rpc.d.ts +61 -0
- package/packages/agent/src/api/wallet-rpc.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-rpc.js +367 -0
- package/packages/agent/src/api/wallet-trading-profile.d.ts +51 -0
- package/packages/agent/src/api/wallet-trading-profile.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-trading-profile.js +547 -0
- package/packages/agent/src/api/wallet.d.ts +31 -0
- package/packages/agent/src/api/wallet.d.ts.map +1 -0
- package/packages/agent/src/api/wallet.js +513 -0
- package/packages/agent/src/api/whatsapp-routes.d.ts +39 -0
- package/packages/agent/src/api/whatsapp-routes.d.ts.map +1 -0
- package/packages/agent/src/api/whatsapp-routes.js +182 -0
- package/packages/agent/src/api/zip-utils.d.ts +8 -0
- package/packages/agent/src/api/zip-utils.d.ts.map +1 -0
- package/packages/agent/src/api/zip-utils.js +115 -0
- package/packages/agent/src/auth/anthropic.d.ts +25 -0
- package/packages/agent/src/auth/anthropic.d.ts.map +1 -0
- package/packages/agent/src/auth/anthropic.js +40 -0
- package/packages/agent/src/auth/apply-stealth.d.ts +8 -0
- package/packages/agent/src/auth/apply-stealth.d.ts.map +1 -0
- package/packages/agent/src/auth/apply-stealth.js +35 -0
- package/packages/agent/src/auth/claude-code-stealth.d.ts +2 -0
- package/packages/agent/src/auth/claude-code-stealth.d.ts.map +1 -0
- package/packages/agent/src/auth/claude-code-stealth.js +104 -0
- package/packages/agent/src/auth/credentials.d.ts +55 -0
- package/packages/agent/src/auth/credentials.d.ts.map +1 -0
- package/packages/agent/src/auth/credentials.js +182 -0
- package/packages/agent/src/auth/index.d.ts +7 -0
- package/packages/agent/src/auth/index.d.ts.map +1 -0
- package/packages/agent/src/auth/index.js +3 -0
- package/packages/agent/src/auth/openai-codex.d.ts +27 -0
- package/packages/agent/src/auth/openai-codex.d.ts.map +1 -0
- package/packages/agent/src/auth/openai-codex.js +72 -0
- package/packages/agent/src/auth/types.d.ts +18 -0
- package/packages/agent/src/auth/types.d.ts.map +1 -0
- package/packages/agent/src/auth/types.js +8 -0
- package/packages/agent/src/awareness/registry.d.ts +27 -0
- package/packages/agent/src/awareness/registry.d.ts.map +1 -0
- package/packages/agent/src/awareness/registry.js +161 -0
- package/packages/agent/src/benchmark-server.d.ts +2 -0
- package/packages/agent/src/benchmark-server.d.ts.map +1 -0
- package/packages/agent/src/benchmark-server.js +773 -0
- package/packages/agent/src/bin.d.ts +3 -0
- package/packages/agent/src/bin.d.ts.map +1 -0
- package/packages/agent/src/bin.js +6 -0
- package/packages/agent/src/cli/index.d.ts +2 -0
- package/packages/agent/src/cli/index.d.ts.map +1 -0
- package/packages/agent/src/cli/index.js +40 -0
- package/packages/agent/src/cli/parse-duration.d.ts +5 -0
- package/packages/agent/src/cli/parse-duration.d.ts.map +1 -0
- package/packages/agent/src/cli/parse-duration.js +27 -0
- package/packages/agent/src/cloud/auth.d.ts +19 -0
- package/packages/agent/src/cloud/auth.d.ts.map +1 -0
- package/packages/agent/src/cloud/auth.js +107 -0
- package/packages/agent/src/cloud/backup.d.ts +18 -0
- package/packages/agent/src/cloud/backup.d.ts.map +1 -0
- package/packages/agent/src/cloud/backup.js +42 -0
- package/packages/agent/src/cloud/base-url.d.ts +3 -0
- package/packages/agent/src/cloud/base-url.d.ts.map +1 -0
- package/packages/agent/src/cloud/base-url.js +40 -0
- package/packages/agent/src/cloud/bridge-client.d.ts +56 -0
- package/packages/agent/src/cloud/bridge-client.d.ts.map +1 -0
- package/packages/agent/src/cloud/bridge-client.js +190 -0
- package/packages/agent/src/cloud/cloud-manager.d.ts +32 -0
- package/packages/agent/src/cloud/cloud-manager.d.ts.map +1 -0
- package/packages/agent/src/cloud/cloud-manager.js +119 -0
- package/packages/agent/src/cloud/cloud-proxy.d.ts +20 -0
- package/packages/agent/src/cloud/cloud-proxy.d.ts.map +1 -0
- package/packages/agent/src/cloud/cloud-proxy.js +34 -0
- package/packages/agent/src/cloud/index.d.ts +7 -0
- package/packages/agent/src/cloud/index.d.ts.map +1 -0
- package/packages/agent/src/cloud/index.js +6 -0
- package/packages/agent/src/cloud/reconnect.d.ts +26 -0
- package/packages/agent/src/cloud/reconnect.d.ts.map +1 -0
- package/packages/agent/src/cloud/reconnect.js +86 -0
- package/packages/agent/src/cloud/validate-url.d.ts +2 -0
- package/packages/agent/src/cloud/validate-url.d.ts.map +1 -0
- package/packages/agent/src/cloud/validate-url.js +162 -0
- package/packages/agent/src/config/character-schema.d.ts +25 -0
- package/packages/agent/src/config/character-schema.d.ts.map +1 -0
- package/packages/agent/src/config/character-schema.js +39 -0
- package/packages/agent/src/config/config.d.ts +6 -0
- package/packages/agent/src/config/config.d.ts.map +1 -0
- package/packages/agent/src/config/config.js +118 -0
- package/packages/agent/src/config/env-vars.d.ts +3 -0
- package/packages/agent/src/config/env-vars.d.ts.map +1 -0
- package/packages/agent/src/config/env-vars.js +76 -0
- package/packages/agent/src/config/includes.d.ts +26 -0
- package/packages/agent/src/config/includes.d.ts.map +1 -0
- package/packages/agent/src/config/includes.js +148 -0
- package/packages/agent/src/config/index.d.ts +16 -0
- package/packages/agent/src/config/index.d.ts.map +1 -0
- package/packages/agent/src/config/index.js +15 -0
- package/packages/agent/src/config/object-utils.d.ts +2 -0
- package/packages/agent/src/config/object-utils.d.ts.map +1 -0
- package/packages/agent/src/config/object-utils.js +6 -0
- package/packages/agent/src/config/paths.d.ts +13 -0
- package/packages/agent/src/config/paths.d.ts.map +1 -0
- package/packages/agent/src/config/paths.js +67 -0
- package/packages/agent/src/config/plugin-auto-enable.d.ts +16 -0
- package/packages/agent/src/config/plugin-auto-enable.d.ts.map +1 -0
- package/packages/agent/src/config/plugin-auto-enable.js +384 -0
- package/packages/agent/src/config/schema.d.ts +87 -0
- package/packages/agent/src/config/schema.d.ts.map +1 -0
- package/packages/agent/src/config/schema.js +928 -0
- package/packages/agent/src/config/telegram-custom-commands.d.ts +25 -0
- package/packages/agent/src/config/telegram-custom-commands.d.ts.map +1 -0
- package/packages/agent/src/config/telegram-custom-commands.js +71 -0
- package/packages/agent/src/config/types.agent-defaults.d.ts +331 -0
- package/packages/agent/src/config/types.agent-defaults.d.ts.map +1 -0
- package/packages/agent/src/config/types.agent-defaults.js +1 -0
- package/packages/agent/src/config/types.agents.d.ts +110 -0
- package/packages/agent/src/config/types.agents.d.ts.map +1 -0
- package/packages/agent/src/config/types.agents.js +1 -0
- package/packages/agent/src/config/types.d.ts +8 -0
- package/packages/agent/src/config/types.d.ts.map +1 -0
- package/packages/agent/src/config/types.eliza.d.ts +636 -0
- package/packages/agent/src/config/types.eliza.d.ts.map +1 -0
- package/packages/agent/src/config/types.eliza.js +1 -0
- package/packages/agent/src/config/types.gateway.d.ts +216 -0
- package/packages/agent/src/config/types.gateway.d.ts.map +1 -0
- package/packages/agent/src/config/types.gateway.js +1 -0
- package/packages/agent/src/config/types.hooks.d.ts +107 -0
- package/packages/agent/src/config/types.hooks.d.ts.map +1 -0
- package/packages/agent/src/config/types.hooks.js +1 -0
- package/packages/agent/src/config/types.js +7 -0
- package/packages/agent/src/config/types.messages.d.ts +176 -0
- package/packages/agent/src/config/types.messages.d.ts.map +1 -0
- package/packages/agent/src/config/types.messages.js +1 -0
- package/packages/agent/src/config/types.tools.d.ts +400 -0
- package/packages/agent/src/config/types.tools.d.ts.map +1 -0
- package/packages/agent/src/config/types.tools.js +1 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.d.ts +1062 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.js +721 -0
- package/packages/agent/src/config/zod-schema.core.d.ts +1021 -0
- package/packages/agent/src/config/zod-schema.core.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.core.js +694 -0
- package/packages/agent/src/config/zod-schema.d.ts +4817 -0
- package/packages/agent/src/config/zod-schema.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.hooks.d.ts +88 -0
- package/packages/agent/src/config/zod-schema.hooks.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.hooks.js +133 -0
- package/packages/agent/src/config/zod-schema.js +778 -0
- package/packages/agent/src/config/zod-schema.providers-core.d.ts +2976 -0
- package/packages/agent/src/config/zod-schema.providers-core.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.providers-core.js +1006 -0
- package/packages/agent/src/config/zod-schema.session.d.ts +183 -0
- package/packages/agent/src/config/zod-schema.session.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.session.js +86 -0
- package/packages/agent/src/contracts/apps.d.ts +42 -0
- package/packages/agent/src/contracts/apps.d.ts.map +1 -0
- package/packages/agent/src/contracts/apps.js +4 -0
- package/packages/agent/src/contracts/awareness.d.ts +38 -0
- package/packages/agent/src/contracts/awareness.d.ts.map +1 -0
- package/packages/agent/src/contracts/awareness.js +7 -0
- package/packages/agent/src/contracts/config.d.ts +146 -0
- package/packages/agent/src/contracts/config.d.ts.map +1 -0
- package/packages/agent/src/contracts/config.js +4 -0
- package/packages/agent/src/contracts/drop.d.ts +20 -0
- package/packages/agent/src/contracts/drop.d.ts.map +1 -0
- package/packages/agent/src/contracts/drop.js +4 -0
- package/packages/agent/src/contracts/index.d.ts +9 -0
- package/packages/agent/src/contracts/index.d.ts.map +1 -0
- package/packages/agent/src/contracts/index.js +8 -0
- package/packages/agent/src/contracts/onboarding.d.ts +379 -0
- package/packages/agent/src/contracts/onboarding.d.ts.map +1 -0
- package/packages/agent/src/contracts/onboarding.js +290 -0
- package/packages/agent/src/contracts/permissions.d.ts +35 -0
- package/packages/agent/src/contracts/permissions.d.ts.map +1 -0
- package/packages/agent/src/contracts/permissions.js +4 -0
- package/packages/agent/src/contracts/verification.d.ts +9 -0
- package/packages/agent/src/contracts/verification.d.ts.map +1 -0
- package/packages/agent/src/contracts/verification.js +4 -0
- package/packages/agent/src/contracts/wallet.d.ts +409 -0
- package/packages/agent/src/contracts/wallet.d.ts.map +1 -0
- package/packages/agent/src/contracts/wallet.js +60 -0
- package/packages/agent/src/diagnostics/integration-observability.d.ts +40 -0
- package/packages/agent/src/diagnostics/integration-observability.d.ts.map +1 -0
- package/packages/agent/src/diagnostics/integration-observability.js +68 -0
- package/packages/agent/src/emotes/catalog.d.ts +31 -0
- package/packages/agent/src/emotes/catalog.d.ts.map +1 -0
- package/packages/agent/src/emotes/catalog.js +618 -0
- package/packages/agent/src/hooks/discovery.d.ts +13 -0
- package/packages/agent/src/hooks/discovery.d.ts.map +1 -0
- package/packages/agent/src/hooks/discovery.js +184 -0
- package/packages/agent/src/hooks/eligibility.d.ts +12 -0
- package/packages/agent/src/hooks/eligibility.d.ts.map +1 -0
- package/packages/agent/src/hooks/eligibility.js +100 -0
- package/packages/agent/src/hooks/index.d.ts +3 -0
- package/packages/agent/src/hooks/index.d.ts.map +1 -0
- package/packages/agent/src/hooks/index.js +2 -0
- package/packages/agent/src/hooks/loader.d.ts +34 -0
- package/packages/agent/src/hooks/loader.d.ts.map +1 -0
- package/packages/agent/src/hooks/loader.js +176 -0
- package/packages/agent/src/hooks/registry.d.ts +11 -0
- package/packages/agent/src/hooks/registry.d.ts.map +1 -0
- package/packages/agent/src/hooks/registry.js +58 -0
- package/packages/agent/src/hooks/types.d.ts +104 -0
- package/packages/agent/src/hooks/types.d.ts.map +1 -0
- package/packages/agent/src/hooks/types.js +8 -0
- package/packages/agent/src/index.d.ts +20 -0
- package/packages/agent/src/index.d.ts.map +1 -0
- package/packages/agent/src/index.js +19 -0
- package/packages/agent/src/onboarding-presets.d.ts +78 -0
- package/packages/agent/src/onboarding-presets.d.ts.map +1 -0
- package/packages/agent/src/onboarding-presets.js +1352 -0
- package/packages/agent/src/plugins/custom-rtmp/index.d.ts +12 -0
- package/packages/agent/src/plugins/custom-rtmp/index.d.ts.map +1 -0
- package/packages/agent/src/plugins/custom-rtmp/index.js +26 -0
- package/packages/agent/src/providers/admin-trust.d.ts +4 -0
- package/packages/agent/src/providers/admin-trust.d.ts.map +1 -0
- package/packages/agent/src/providers/admin-trust.js +53 -0
- package/packages/agent/src/providers/session-bridge.d.ts +24 -0
- package/packages/agent/src/providers/session-bridge.d.ts.map +1 -0
- package/packages/agent/src/providers/session-bridge.js +85 -0
- package/packages/agent/src/providers/session-utils.d.ts +20 -0
- package/packages/agent/src/providers/session-utils.d.ts.map +1 -0
- package/packages/agent/src/providers/session-utils.js +33 -0
- package/packages/agent/src/providers/simple-mode.d.ts +4 -0
- package/packages/agent/src/providers/simple-mode.d.ts.map +1 -0
- package/packages/agent/src/providers/simple-mode.js +85 -0
- package/packages/agent/src/providers/ui-catalog.d.ts +3 -0
- package/packages/agent/src/providers/ui-catalog.d.ts.map +1 -0
- package/packages/agent/src/providers/ui-catalog.js +123 -0
- package/packages/agent/src/providers/workspace-provider.d.ts +22 -0
- package/packages/agent/src/providers/workspace-provider.d.ts.map +1 -0
- package/packages/agent/src/providers/workspace-provider.js +167 -0
- package/packages/agent/src/providers/workspace.d.ts +54 -0
- package/packages/agent/src/providers/workspace.d.ts.map +1 -0
- package/packages/agent/src/providers/workspace.js +405 -0
- package/packages/agent/src/runtime/agent-event-service.d.ts +35 -0
- package/packages/agent/src/runtime/agent-event-service.d.ts.map +1 -0
- package/packages/agent/src/runtime/agent-event-service.js +16 -0
- package/packages/agent/src/runtime/cloud-onboarding.d.ts +55 -0
- package/packages/agent/src/runtime/cloud-onboarding.d.ts.map +1 -0
- package/packages/agent/src/runtime/cloud-onboarding.js +279 -0
- package/packages/agent/src/runtime/core-plugins.d.ts +14 -0
- package/packages/agent/src/runtime/core-plugins.d.ts.map +1 -0
- package/packages/agent/src/runtime/core-plugins.js +51 -0
- package/packages/agent/src/runtime/custom-actions.d.ts +40 -0
- package/packages/agent/src/runtime/custom-actions.d.ts.map +1 -0
- package/packages/agent/src/runtime/custom-actions.js +454 -0
- package/packages/agent/src/runtime/eliza-plugin.d.ts +16 -0
- package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -0
- package/packages/agent/src/runtime/eliza-plugin.js +108 -0
- package/packages/agent/src/runtime/eliza.d.ts +205 -0
- package/packages/agent/src/runtime/eliza.d.ts.map +1 -0
- package/packages/agent/src/runtime/eliza.js +3935 -0
- package/packages/agent/src/runtime/embedding-presets.d.ts +19 -0
- package/packages/agent/src/runtime/embedding-presets.d.ts.map +1 -0
- package/packages/agent/src/runtime/embedding-presets.js +53 -0
- package/packages/agent/src/runtime/index.d.ts +9 -0
- package/packages/agent/src/runtime/index.d.ts.map +1 -0
- package/packages/agent/src/runtime/index.js +8 -0
- package/packages/agent/src/runtime/onboarding-names.d.ts +11 -0
- package/packages/agent/src/runtime/onboarding-names.d.ts.map +1 -0
- package/packages/agent/src/runtime/onboarding-names.js +74 -0
- package/packages/agent/src/runtime/release-plugin-policy.d.ts +20 -0
- package/packages/agent/src/runtime/release-plugin-policy.d.ts.map +1 -0
- package/packages/agent/src/runtime/release-plugin-policy.js +87 -0
- package/packages/agent/src/runtime/restart.d.ts +45 -0
- package/packages/agent/src/runtime/restart.d.ts.map +1 -0
- package/packages/agent/src/runtime/restart.js +45 -0
- package/packages/agent/src/runtime/trajectory-persistence.d.ts +214 -0
- package/packages/agent/src/runtime/trajectory-persistence.d.ts.map +1 -0
- package/packages/agent/src/runtime/trajectory-persistence.js +1957 -0
- package/packages/agent/src/runtime/version.d.ts +2 -0
- package/packages/agent/src/runtime/version.d.ts.map +1 -0
- package/packages/agent/src/runtime/version.js +5 -0
- package/packages/agent/src/security/audit-log.d.ts +49 -0
- package/packages/agent/src/security/audit-log.d.ts.map +1 -0
- package/packages/agent/src/security/audit-log.js +161 -0
- package/packages/agent/src/security/network-policy.d.ts +6 -0
- package/packages/agent/src/security/network-policy.d.ts.map +1 -0
- package/packages/agent/src/security/network-policy.js +85 -0
- package/packages/agent/src/server/index.d.ts +3 -0
- package/packages/agent/src/server/index.d.ts.map +1 -0
- package/packages/agent/src/server/index.js +1 -0
- package/packages/agent/src/services/agent-export.d.ts +100 -0
- package/packages/agent/src/services/agent-export.d.ts.map +1 -0
- package/packages/agent/src/services/agent-export.js +729 -0
- package/packages/agent/src/services/app-manager.d.ts +34 -0
- package/packages/agent/src/services/app-manager.d.ts.map +1 -0
- package/packages/agent/src/services/app-manager.js +425 -0
- package/packages/agent/src/services/browser-capture.d.ts +39 -0
- package/packages/agent/src/services/browser-capture.d.ts.map +1 -0
- package/packages/agent/src/services/browser-capture.js +162 -0
- package/packages/agent/src/services/coding-agent-context.d.ts +310 -0
- package/packages/agent/src/services/coding-agent-context.d.ts.map +1 -0
- package/packages/agent/src/services/coding-agent-context.js +281 -0
- package/packages/agent/src/services/fallback-training-service.d.ts +78 -0
- package/packages/agent/src/services/fallback-training-service.d.ts.map +1 -0
- package/packages/agent/src/services/fallback-training-service.js +126 -0
- package/packages/agent/src/services/index.d.ts +18 -0
- package/packages/agent/src/services/index.d.ts.map +1 -0
- package/packages/agent/src/services/index.js +17 -0
- package/packages/agent/src/services/mcp-marketplace.d.ts +89 -0
- package/packages/agent/src/services/mcp-marketplace.d.ts.map +1 -0
- package/packages/agent/src/services/mcp-marketplace.js +200 -0
- package/packages/agent/src/services/plugin-manager-types.d.ts +139 -0
- package/packages/agent/src/services/plugin-manager-types.d.ts.map +1 -0
- package/packages/agent/src/services/plugin-manager-types.js +18 -0
- package/packages/agent/src/services/privy-wallets.d.ts +18 -0
- package/packages/agent/src/services/privy-wallets.d.ts.map +1 -0
- package/packages/agent/src/services/privy-wallets.js +225 -0
- package/packages/agent/src/services/registry-client-app-meta.d.ts +6 -0
- package/packages/agent/src/services/registry-client-app-meta.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-app-meta.js +147 -0
- package/packages/agent/src/services/registry-client-endpoints.d.ts +7 -0
- package/packages/agent/src/services/registry-client-endpoints.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-endpoints.js +183 -0
- package/packages/agent/src/services/registry-client-local.d.ts +4 -0
- package/packages/agent/src/services/registry-client-local.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-local.js +377 -0
- package/packages/agent/src/services/registry-client-network.d.ts +9 -0
- package/packages/agent/src/services/registry-client-network.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-network.js +109 -0
- package/packages/agent/src/services/registry-client-queries.d.ts +15 -0
- package/packages/agent/src/services/registry-client-queries.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-queries.js +150 -0
- package/packages/agent/src/services/registry-client-types.d.ts +115 -0
- package/packages/agent/src/services/registry-client-types.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-types.js +1 -0
- package/packages/agent/src/services/registry-client.d.ts +39 -0
- package/packages/agent/src/services/registry-client.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client.js +249 -0
- package/packages/agent/src/services/remote-signing-service.d.ts +58 -0
- package/packages/agent/src/services/remote-signing-service.d.ts.map +1 -0
- package/packages/agent/src/services/remote-signing-service.js +185 -0
- package/packages/agent/src/services/sandbox-engine.d.ts +96 -0
- package/packages/agent/src/services/sandbox-engine.d.ts.map +1 -0
- package/packages/agent/src/services/sandbox-engine.js +604 -0
- package/packages/agent/src/services/sandbox-manager.d.ts +104 -0
- package/packages/agent/src/services/sandbox-manager.d.ts.map +1 -0
- package/packages/agent/src/services/sandbox-manager.js +353 -0
- package/packages/agent/src/services/self-updater.d.ts +21 -0
- package/packages/agent/src/services/self-updater.d.ts.map +1 -0
- package/packages/agent/src/services/self-updater.js +162 -0
- package/packages/agent/src/services/signal-pairing.d.ts +37 -0
- package/packages/agent/src/services/signal-pairing.d.ts.map +1 -0
- package/packages/agent/src/services/signal-pairing.js +124 -0
- package/packages/agent/src/services/signing-policy.d.ts +44 -0
- package/packages/agent/src/services/signing-policy.d.ts.map +1 -0
- package/packages/agent/src/services/signing-policy.js +165 -0
- package/packages/agent/src/services/skill-catalog-client.d.ts +47 -0
- package/packages/agent/src/services/skill-catalog-client.d.ts.map +1 -0
- package/packages/agent/src/services/skill-catalog-client.js +130 -0
- package/packages/agent/src/services/skill-marketplace.d.ts +42 -0
- package/packages/agent/src/services/skill-marketplace.d.ts.map +1 -0
- package/packages/agent/src/services/skill-marketplace.js +680 -0
- package/packages/agent/src/services/stream-manager.d.ts +121 -0
- package/packages/agent/src/services/stream-manager.d.ts.map +1 -0
- package/packages/agent/src/services/stream-manager.js +604 -0
- package/packages/agent/src/services/tts-stream-bridge.d.ts +83 -0
- package/packages/agent/src/services/tts-stream-bridge.d.ts.map +1 -0
- package/packages/agent/src/services/tts-stream-bridge.js +349 -0
- package/packages/agent/src/services/update-checker.d.ts +29 -0
- package/packages/agent/src/services/update-checker.d.ts.map +1 -0
- package/packages/agent/src/services/update-checker.js +134 -0
- package/packages/agent/src/services/version-compat.d.ts +99 -0
- package/packages/agent/src/services/version-compat.d.ts.map +1 -0
- package/packages/agent/src/services/version-compat.js +195 -0
- package/packages/agent/src/services/whatsapp-pairing.d.ts +41 -0
- package/packages/agent/src/services/whatsapp-pairing.d.ts.map +1 -0
- package/packages/agent/src/services/whatsapp-pairing.js +209 -0
- package/packages/agent/src/shared/ui-catalog-prompt.d.ts +52 -0
- package/packages/agent/src/shared/ui-catalog-prompt.d.ts.map +1 -0
- package/packages/agent/src/shared/ui-catalog-prompt.js +1028 -0
- package/packages/agent/src/test-support/process-helpers.d.ts +13 -0
- package/packages/agent/src/test-support/process-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/process-helpers.js +23 -0
- package/packages/agent/src/test-support/route-test-helpers.d.ts +37 -0
- package/packages/agent/src/test-support/route-test-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/route-test-helpers.js +54 -0
- package/packages/agent/src/test-support/test-helpers.d.ts +77 -0
- package/packages/agent/src/test-support/test-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/test-helpers.js +210 -0
- package/packages/agent/src/testing/index.d.ts +4 -0
- package/packages/agent/src/testing/index.d.ts.map +1 -0
- package/packages/agent/src/testing/index.js +3 -0
- package/packages/agent/src/triggers/action.d.ts +3 -0
- package/packages/agent/src/triggers/action.d.ts.map +1 -0
- package/packages/agent/src/triggers/action.js +267 -0
- package/packages/agent/src/triggers/runtime.d.ts +24 -0
- package/packages/agent/src/triggers/runtime.d.ts.map +1 -0
- package/packages/agent/src/triggers/runtime.js +322 -0
- package/packages/agent/src/triggers/scheduling.d.ts +70 -0
- package/packages/agent/src/triggers/scheduling.d.ts.map +1 -0
- package/packages/agent/src/triggers/scheduling.js +355 -0
- package/packages/agent/src/triggers/types.d.ts +115 -0
- package/packages/agent/src/triggers/types.d.ts.map +1 -0
- package/packages/agent/src/triggers/types.js +1 -0
- package/packages/agent/src/utils/exec-safety.d.ts +2 -0
- package/packages/agent/src/utils/exec-safety.d.ts.map +1 -0
- package/packages/agent/src/utils/exec-safety.js +21 -0
- package/packages/agent/src/utils/number-parsing.d.ts +26 -0
- package/packages/agent/src/utils/number-parsing.d.ts.map +1 -0
- package/packages/agent/src/utils/number-parsing.js +52 -0
- package/packages/agent/src/utils/spoken-text.d.ts +2 -0
- package/packages/agent/src/utils/spoken-text.d.ts.map +1 -0
- package/packages/agent/src/utils/spoken-text.js +56 -0
- package/packages/agent/src/version-resolver.d.ts +3 -0
- package/packages/agent/src/version-resolver.d.ts.map +1 -0
- package/packages/agent/src/version-resolver.js +51 -0
- package/jest.config.js +0 -17
- package/src/__tests__/client-type-identification.test.ts +0 -59
- package/src/defaultCharacter.ts +0 -530
- package/src/index.ts +0 -865
- 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
|
+
}
|