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