@elizaos/ui 2.0.0-alpha.192 → 2.0.0-alpha.196
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/apps/app-companion/src/components/companion/companion-app.js +2 -2
- package/apps/app-lifeops/src/action.d.ts.map +1 -1
- package/apps/app-lifeops/src/action.js +21 -2
- package/apps/app-lifeops/src/actions/app-blocker.d.ts +3 -1
- package/apps/app-lifeops/src/actions/app-blocker.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/app-blocker.js +2 -0
- package/apps/app-lifeops/src/actions/calendar.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/calendar.js +140 -7
- package/apps/app-lifeops/src/actions/computer-use.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/computer-use.js +248 -17
- package/apps/app-lifeops/src/actions/cross-channel-send.d.ts +3 -1
- package/apps/app-lifeops/src/actions/cross-channel-send.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/cross-channel-send.js +1 -0
- package/apps/app-lifeops/src/actions/dossier.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/dossier.js +51 -34
- package/apps/app-lifeops/src/actions/gmail.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/gmail.js +5 -0
- package/apps/app-lifeops/src/actions/inbox.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/inbox.js +8 -1
- package/apps/app-lifeops/src/actions/life.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/life.extractor.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/life.extractor.js +103 -4
- package/apps/app-lifeops/src/actions/life.js +8 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.d.ts +6 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.d.ts.map +1 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.js +33 -0
- package/apps/app-lifeops/src/actions/password-manager.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/password-manager.js +11 -2
- package/apps/app-lifeops/src/actions/relationships.d.ts +3 -1
- package/apps/app-lifeops/src/actions/relationships.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/relationships.js +167 -11
- package/apps/app-lifeops/src/actions/remote-desktop.js +1 -1
- package/apps/app-lifeops/src/actions/screen-time.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/screen-time.js +8 -2
- package/apps/app-lifeops/src/actions/start-remote-session.js +1 -1
- package/apps/app-lifeops/src/actions/subscriptions.d.ts +5 -0
- package/apps/app-lifeops/src/actions/subscriptions.d.ts.map +1 -0
- package/apps/app-lifeops/src/actions/subscriptions.js +251 -0
- package/apps/app-lifeops/src/actions/twilio-call.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/twilio-call.js +48 -3
- package/apps/app-lifeops/src/actions/update-owner-profile.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/update-owner-profile.js +2 -1
- package/apps/app-lifeops/src/actions/website-blocker.d.ts +6 -2
- package/apps/app-lifeops/src/actions/website-blocker.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/website-blocker.js +38 -0
- package/apps/app-lifeops/src/actions/x-read.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/x-read.js +27 -3
- package/apps/app-lifeops/src/dossier/action.d.ts.map +1 -1
- package/apps/app-lifeops/src/dossier/action.js +8 -7
- package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.js +1 -0
- package/apps/app-lifeops/src/followup/actions/markFollowupDone.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/markFollowupDone.js +2 -1
- package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.js +2 -1
- package/apps/app-lifeops/src/lifeops/calendly-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/calendly-client.js +4 -2
- package/apps/app-lifeops/src/lifeops/discord-browser-scraper.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +6 -5
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts +1 -1
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.js +84 -6
- package/apps/app-lifeops/src/lifeops/remote-desktop.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/remote-desktop.js +30 -0
- package/apps/app-lifeops/src/lifeops/repository.d.ts +15 -0
- package/apps/app-lifeops/src/lifeops/repository.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/repository.js +330 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-discord.js +222 -42
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts +2 -0
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.js +763 -0
- package/apps/app-lifeops/src/lifeops/service.d.ts +64 -1
- package/apps/app-lifeops/src/lifeops/service.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service.js +2 -1
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts +54 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.js +213 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts +80 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/twilio.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/twilio.js +4 -2
- package/apps/app-lifeops/src/lifeops/whatsapp-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/whatsapp-client.js +4 -2
- package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/x-poster.js +12 -6
- package/apps/app-lifeops/src/lifeops/x-reader.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/x-reader.js +7 -5
- package/apps/app-lifeops/src/plugin.d.ts.map +1 -1
- package/apps/app-lifeops/src/plugin.js +31 -24
- package/apps/app-lifeops/src/provider.d.ts.map +1 -1
- package/apps/app-lifeops/src/provider.js +4 -4
- package/apps/app-lifeops/src/providers/inbox-triage.js +2 -2
- package/apps/app-lifeops/src/providers/lifeops.d.ts.map +1 -1
- package/apps/app-lifeops/src/providers/lifeops.js +19 -10
- package/apps/app-lifeops/src/providers/website-blocker.js +1 -1
- package/apps/app-lifeops/src/public.d.ts +4 -0
- package/apps/app-lifeops/src/public.d.ts.map +1 -0
- package/apps/app-lifeops/src/public.js +3 -0
- package/apps/app-lifeops/src/routes/plugin.d.ts +18 -0
- package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -0
- package/apps/app-lifeops/src/routes/plugin.js +270 -0
- package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.d.ts.map +1 -1
- package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.js +18 -2
- package/package.json +1 -1
- package/packages/agent/src/actions/browser-session.d.ts +3 -0
- package/packages/agent/src/actions/browser-session.d.ts.map +1 -0
- package/packages/agent/src/actions/browser-session.js +207 -0
- package/packages/agent/src/actions/context-signal.d.ts +1 -1
- package/packages/agent/src/actions/context-signal.d.ts.map +1 -1
- package/packages/agent/src/actions/context-signal.js +1 -1
- package/packages/agent/src/actions/extract-page.d.ts +3 -0
- package/packages/agent/src/actions/extract-page.d.ts.map +1 -0
- package/packages/agent/src/actions/extract-page.js +124 -0
- package/packages/agent/src/actions/grounded-action-reply.js +1 -1
- package/packages/agent/src/actions/recent-conversation-texts.d.ts +9 -0
- package/packages/agent/src/actions/recent-conversation-texts.d.ts.map +1 -0
- package/packages/agent/src/actions/recent-conversation-texts.js +81 -0
- package/packages/agent/src/actions/set-user-name.js +1 -1
- package/packages/agent/src/actions/web-search.d.ts +4 -10
- package/packages/agent/src/actions/web-search.d.ts.map +1 -1
- package/packages/agent/src/actions/web-search.js +89 -19
- package/packages/agent/src/api/binance-skill-helpers.d.ts.map +1 -1
- package/packages/agent/src/api/binance-skill-helpers.js +1 -1
- package/packages/agent/src/api/chat-augmentation.d.ts +1 -20
- package/packages/agent/src/api/chat-augmentation.d.ts.map +1 -1
- package/packages/agent/src/api/chat-augmentation.js +2 -110
- package/packages/agent/src/api/conversation-metadata.d.ts +9 -0
- package/packages/agent/src/api/conversation-metadata.d.ts.map +1 -0
- package/packages/agent/src/api/conversation-metadata.js +98 -0
- package/packages/agent/src/api/conversation-routes.d.ts.map +1 -1
- package/packages/agent/src/api/conversation-routes.js +40 -9
- package/packages/agent/src/api/permissions-routes.js +1 -1
- package/packages/agent/src/api/server-helpers-auth.js +1 -1
- package/packages/agent/src/api/server-helpers.d.ts +2 -1
- package/packages/agent/src/api/server-helpers.d.ts.map +1 -1
- package/packages/agent/src/api/server-helpers.js +2 -110
- package/packages/agent/src/api/server-types.d.ts +14 -0
- package/packages/agent/src/api/server-types.d.ts.map +1 -1
- package/packages/agent/src/api/server.d.ts.map +1 -1
- package/packages/agent/src/api/server.js +3 -13
- package/packages/agent/src/api/workbench-routes.d.ts.map +1 -1
- package/packages/agent/src/api/workbench-routes.js +0 -14
- package/packages/agent/src/auth/credentials.d.ts.map +1 -1
- package/packages/agent/src/auth/credentials.js +8 -0
- package/packages/agent/src/providers/automation-terminal-bridge.d.ts +3 -0
- package/packages/agent/src/providers/automation-terminal-bridge.d.ts.map +1 -0
- package/packages/agent/src/providers/automation-terminal-bridge.js +71 -0
- package/packages/agent/src/providers/recent-conversations.d.ts.map +1 -1
- package/packages/agent/src/providers/recent-conversations.js +5 -0
- package/packages/agent/src/providers/relevant-conversations.d.ts.map +1 -1
- package/packages/agent/src/providers/relevant-conversations.js +5 -0
- package/packages/agent/src/providers/user-name.d.ts.map +1 -1
- package/packages/agent/src/providers/user-name.js +1 -1
- package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -1
- package/packages/agent/src/runtime/eliza-plugin.js +6 -0
- package/packages/agent/src/runtime/plugin-resolver.d.ts.map +1 -1
- package/packages/agent/src/runtime/plugin-resolver.js +115 -0
- package/packages/agent/src/services/browser-workspace-types.d.ts +5 -1
- package/packages/agent/src/services/browser-workspace-types.d.ts.map +1 -1
- package/packages/agent/src/services/browser-workspace.d.ts.map +1 -1
- package/packages/agent/src/services/browser-workspace.js +178 -7
- package/packages/agent/src/services/escalation.d.ts +0 -11
- package/packages/agent/src/services/escalation.d.ts.map +1 -1
- package/packages/agent/src/services/escalation.js +19 -58
- package/packages/agent/src/services/hosted-tools.d.ts +70 -0
- package/packages/agent/src/services/hosted-tools.d.ts.map +1 -0
- package/packages/agent/src/services/hosted-tools.js +87 -0
- package/packages/agent/src/services/owner-name.d.ts +4 -0
- package/packages/agent/src/services/owner-name.d.ts.map +1 -0
- package/packages/agent/src/services/owner-name.js +46 -0
- package/packages/agent/src/services/registry-client-queries.d.ts +1 -1
- package/packages/agent/src/services/registry-client-queries.js +1 -1
- package/packages/agent/src/services/registry-client-types.d.ts +1 -1
- package/packages/app-core/src/api/client-automations.d.ts +8 -0
- package/packages/app-core/src/api/client-automations.d.ts.map +1 -0
- package/packages/app-core/src/api/client-automations.js +7 -0
- package/packages/app-core/src/api/client-browser-workspace.d.ts +3 -0
- package/packages/app-core/src/api/client-browser-workspace.d.ts.map +1 -1
- package/packages/app-core/src/api/client-browser-workspace.js +3 -0
- package/packages/app-core/src/api/client-chat.d.ts +8 -2
- package/packages/app-core/src/api/client-chat.d.ts.map +1 -1
- package/packages/app-core/src/api/client-chat.js +14 -1
- package/packages/app-core/src/api/client-types-chat.d.ts +4 -0
- package/packages/app-core/src/api/client-types-chat.d.ts.map +1 -1
- package/packages/app-core/src/api/client-types-config.d.ts +67 -2
- package/packages/app-core/src/api/client-types-config.d.ts.map +1 -1
- package/packages/app-core/src/api/client.d.ts +1 -0
- package/packages/app-core/src/api/client.d.ts.map +1 -1
- package/packages/app-core/src/api/client.js +1 -0
- package/packages/app-core/src/components/apps/helpers.d.ts +1 -1
- package/packages/app-core/src/components/apps/helpers.d.ts.map +1 -1
- package/packages/app-core/src/components/apps/helpers.js +5 -9
- package/packages/app-core/src/components/apps/internal-tool-apps.d.ts.map +1 -1
- package/packages/app-core/src/components/apps/internal-tool-apps.js +10 -1
- package/packages/app-core/src/components/conversations/conversation-sidebar-model.d.ts.map +1 -1
- package/packages/app-core/src/components/conversations/conversation-sidebar-model.js +6 -0
- package/packages/app-core/src/components/pages/AutomationRoomChatPane.d.ts +16 -0
- package/packages/app-core/src/components/pages/AutomationRoomChatPane.d.ts.map +1 -0
- package/packages/app-core/src/components/pages/AutomationRoomChatPane.js +202 -0
- package/packages/app-core/src/components/pages/AutomationsView.d.ts +1 -4
- package/packages/app-core/src/components/pages/AutomationsView.d.ts.map +1 -1
- package/packages/app-core/src/components/pages/AutomationsView.js +565 -265
- package/packages/app-core/src/components/pages/BrowserWorkspaceView.d.ts.map +1 -1
- package/packages/app-core/src/components/pages/BrowserWorkspaceView.js +118 -24
- package/packages/app-core/src/components/pages/automation-conversations.d.ts +15 -0
- package/packages/app-core/src/components/pages/automation-conversations.d.ts.map +1 -0
- package/packages/app-core/src/components/pages/automation-conversations.js +190 -0
- package/packages/app-core/src/components/pages/plugin-list-utils.js +4 -4
- package/packages/app-core/src/config/boot-config-store.d.ts +1 -1
- package/packages/app-core/src/config/boot-config-store.d.ts.map +1 -1
- package/packages/app-core/src/state/useOnboardingCallbacks.d.ts +14 -0
- package/packages/app-core/src/state/useOnboardingCallbacks.d.ts.map +1 -1
- package/packages/app-core/src/state/useOnboardingCallbacks.js +1 -1
- package/packages/app-core/src/state/usePluginsSkillsState.d.ts +2 -2
- package/packages/app-core/src/utils/desktop-workspace.d.ts +2 -2
- package/packages/app-core/src/utils/desktop-workspace.d.ts.map +1 -1
- package/packages/app-core/src/utils/desktop-workspace.js +7 -2
- package/packages/shared/src/contracts/lifeops.d.ts +26 -0
- package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
- package/packages/shared/src/contracts/lifeops.js +28 -0
- package/packages/typescript/src/actions.d.ts.map +1 -1
- package/packages/typescript/src/actions.js +12 -0
- package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.js +8 -2
- package/packages/typescript/src/features/advanced-capabilities/providers/settings.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/providers/settings.js +11 -3
- package/packages/typescript/src/features/basic-capabilities/providers/actions.d.ts.map +1 -1
- package/packages/typescript/src/features/basic-capabilities/providers/actions.js +23 -1
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts +5 -0
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts.map +1 -0
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.js +22 -0
- package/packages/typescript/src/features/basic-capabilities/providers/providers.d.ts.map +1 -1
- package/packages/typescript/src/features/basic-capabilities/providers/providers.js +10 -5
- package/packages/typescript/src/features/knowledge/documents-provider.d.ts.map +1 -1
- package/packages/typescript/src/features/knowledge/documents-provider.js +1 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts +10 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts.map +1 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.js +49 -0
- package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts +1 -0
- package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts.map +1 -1
- package/packages/typescript/src/features/trajectories/TrajectoriesService.js +21 -2
- package/packages/typescript/src/features/trust/providers/settings.d.ts.map +1 -1
- package/packages/typescript/src/features/trust/providers/settings.js +11 -1
- package/packages/typescript/src/prompts.d.ts +4 -4
- package/packages/typescript/src/prompts.d.ts.map +1 -1
- package/packages/typescript/src/prompts.js +10 -2
- package/packages/typescript/src/services/message.d.ts +1 -0
- package/packages/typescript/src/services/message.d.ts.map +1 -1
- package/packages/typescript/src/services/message.js +483 -18
- package/packages/typescript/src/types/components.d.ts +6 -0
- package/packages/typescript/src/types/components.d.ts.map +1 -1
- package/packages/typescript/src/utils/context-routing.d.ts.map +1 -1
- package/packages/typescript/src/utils/context-routing.js +5 -1
- package/packages/typescript/src/utils/toon.d.ts.map +1 -1
- package/packages/typescript/src/utils/toon.js +23 -2
- package/packages/typescript/src/utils.d.ts +1 -0
- package/packages/typescript/src/utils.d.ts.map +1 -1
- package/packages/typescript/src/utils.js +1 -0
- package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts +0 -2
- package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/index.d.ts +0 -3
- package/apps/app-lifeops/src/types/index.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/index.js +0 -1
- package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts +0 -2
- package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/website-blocker-settings-card.js +0 -1
- package/packages/agent/src/contracts/lifeops.d.ts +0 -2
- package/packages/agent/src/contracts/lifeops.d.ts.map +0 -1
- package/packages/agent/src/contracts/lifeops.js +0 -1
- package/packages/app-core/src/components/pages/N8nWorkflowsPanel.d.ts +0 -18
- package/packages/app-core/src/components/pages/N8nWorkflowsPanel.d.ts.map +0 -1
- package/packages/app-core/src/components/pages/N8nWorkflowsPanel.js +0 -542
- /package/apps/app-lifeops/src/{types/app-blocker-settings-card.js → lifeops/subscriptions-types.js} +0 -0
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Hosted web search action.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - Fallback when Anthropic server-side search is insufficient
|
|
8
|
-
*
|
|
9
|
-
* Configuration:
|
|
10
|
-
* BRAVE_API_KEY env var OR tools.web.search.apiKey in agent config
|
|
11
|
-
*
|
|
12
|
-
* This action is registered as WEB_SEARCH in the ElizaOS action system.
|
|
4
|
+
* Prefers Eliza Cloud hosted Google-grounded Gemini search when cloud tooling
|
|
5
|
+
* is configured. Falls back to the Brave Search API when cloud search is not
|
|
6
|
+
* available locally.
|
|
13
7
|
*/
|
|
14
8
|
import { logger } from "@elizaos/core";
|
|
15
9
|
import { hasRoleAccess } from "../security/access.js";
|
|
16
10
|
import { hasContextSignalSyncForKey } from "./context-signal.js";
|
|
11
|
+
import { isHostedCloudToolingConfigured, searchHostedCloudWeb, } from "../services/hosted-tools.js";
|
|
17
12
|
// ---------------------------------------------------------------------------
|
|
18
13
|
// Helpers
|
|
19
14
|
// ---------------------------------------------------------------------------
|
|
20
|
-
function
|
|
15
|
+
function resolveBraveApiKey(runtime) {
|
|
21
16
|
// 1. Direct env var
|
|
22
17
|
if (process.env.BRAVE_API_KEY)
|
|
23
18
|
return process.env.BRAVE_API_KEY;
|
|
@@ -41,6 +36,19 @@ function resolveMaxResults(runtime) {
|
|
|
41
36
|
}
|
|
42
37
|
return 5;
|
|
43
38
|
}
|
|
39
|
+
function formatHostedResults(result) {
|
|
40
|
+
const citations = result.results
|
|
41
|
+
.map((entry, index) => `${index + 1}. ${entry.title}\n ${entry.url}`)
|
|
42
|
+
.join("\n");
|
|
43
|
+
return [
|
|
44
|
+
`Search answer for "${result.query}":`,
|
|
45
|
+
"",
|
|
46
|
+
result.answer,
|
|
47
|
+
citations ? `\nCitations:\n${citations}` : "",
|
|
48
|
+
]
|
|
49
|
+
.filter(Boolean)
|
|
50
|
+
.join("\n");
|
|
51
|
+
}
|
|
44
52
|
async function braveSearch(query, apiKey, maxResults, timeoutMs = 10_000) {
|
|
45
53
|
const url = new URL("https://api.search.brave.com/res/v1/web/search");
|
|
46
54
|
url.searchParams.set("q", query);
|
|
@@ -90,21 +98,23 @@ export const webSearchAction = {
|
|
|
90
98
|
"GOOGLE",
|
|
91
99
|
"SEARCH",
|
|
92
100
|
],
|
|
93
|
-
description: "Search the web for current information using
|
|
101
|
+
description: "Search the web for current information using Eliza Cloud hosted Google search when available, with Brave Search as a local fallback. " +
|
|
94
102
|
"Use when you need real-time or recent information that may not be in your training data.",
|
|
95
103
|
validate: async (runtime, message, state) => {
|
|
96
104
|
if (!(await hasRoleAccess(runtime, message, "USER")))
|
|
97
105
|
return false;
|
|
98
|
-
const
|
|
99
|
-
|
|
106
|
+
const hasHostedSearch = isHostedCloudToolingConfigured(process.env);
|
|
107
|
+
const braveKey = resolveBraveApiKey(runtime);
|
|
108
|
+
if (!hasHostedSearch && !braveKey)
|
|
100
109
|
return false;
|
|
101
110
|
return hasWebSearchContextSignal(message, state);
|
|
102
111
|
},
|
|
103
112
|
handler: async (runtime, message, _state, options) => {
|
|
104
|
-
const
|
|
105
|
-
|
|
113
|
+
const braveApiKey = resolveBraveApiKey(runtime);
|
|
114
|
+
const hasHostedSearch = isHostedCloudToolingConfigured(process.env);
|
|
115
|
+
if (!hasHostedSearch && !braveApiKey) {
|
|
106
116
|
return {
|
|
107
|
-
text: "Web search is not configured.
|
|
117
|
+
text: "Web search is not configured. Connect Eliza Cloud hosted tools or set BRAVE_API_KEY to enable it.",
|
|
108
118
|
success: false,
|
|
109
119
|
values: { success: false, error: "NO_API_KEY" },
|
|
110
120
|
data: { actionName: "WEB_SEARCH" },
|
|
@@ -133,8 +143,31 @@ export const webSearchAction = {
|
|
|
133
143
|
}
|
|
134
144
|
const maxResults = resolveMaxResults(runtime);
|
|
135
145
|
try {
|
|
146
|
+
if (hasHostedSearch) {
|
|
147
|
+
logger.info(`[web-search] Hosted search: "${query}" (max ${maxResults})`);
|
|
148
|
+
const hostedResult = await searchHostedCloudWeb({
|
|
149
|
+
maxResults,
|
|
150
|
+
query,
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
text: formatHostedResults(hostedResult),
|
|
154
|
+
success: true,
|
|
155
|
+
values: {
|
|
156
|
+
success: true,
|
|
157
|
+
provider: hostedResult.provider,
|
|
158
|
+
resultCount: hostedResult.results.length,
|
|
159
|
+
},
|
|
160
|
+
data: {
|
|
161
|
+
actionName: "WEB_SEARCH",
|
|
162
|
+
...hostedResult,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (!braveApiKey) {
|
|
167
|
+
throw new Error("Hosted search is unavailable and BRAVE_API_KEY is not configured.");
|
|
168
|
+
}
|
|
136
169
|
logger.info(`[web-search] Brave search: "${query}" (max ${maxResults})`);
|
|
137
|
-
const results = await braveSearch(query,
|
|
170
|
+
const results = await braveSearch(query, braveApiKey, maxResults);
|
|
138
171
|
const formatted = formatResults(results, query);
|
|
139
172
|
return {
|
|
140
173
|
text: formatted,
|
|
@@ -156,7 +189,44 @@ export const webSearchAction = {
|
|
|
156
189
|
}
|
|
157
190
|
catch (err) {
|
|
158
191
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
159
|
-
|
|
192
|
+
if (hasHostedSearch && braveApiKey) {
|
|
193
|
+
try {
|
|
194
|
+
logger.warn(`[web-search] Hosted search failed, falling back to Brave: ${errMsg}`);
|
|
195
|
+
const fallbackResults = await braveSearch(query, braveApiKey, maxResults);
|
|
196
|
+
return {
|
|
197
|
+
text: formatResults(fallbackResults, query),
|
|
198
|
+
success: true,
|
|
199
|
+
values: {
|
|
200
|
+
success: true,
|
|
201
|
+
provider: "brave",
|
|
202
|
+
resultCount: fallbackResults.length,
|
|
203
|
+
},
|
|
204
|
+
data: {
|
|
205
|
+
actionName: "WEB_SEARCH",
|
|
206
|
+
provider: "brave",
|
|
207
|
+
query,
|
|
208
|
+
results: fallbackResults.map((result) => ({
|
|
209
|
+
title: result.title,
|
|
210
|
+
url: result.url,
|
|
211
|
+
description: result.description,
|
|
212
|
+
})),
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch (fallbackError) {
|
|
217
|
+
const fallbackMessage = fallbackError instanceof Error
|
|
218
|
+
? fallbackError.message
|
|
219
|
+
: String(fallbackError);
|
|
220
|
+
logger.warn(`[web-search] Hosted and Brave search failed: ${fallbackMessage}`);
|
|
221
|
+
return {
|
|
222
|
+
text: `Web search failed: ${fallbackMessage}`,
|
|
223
|
+
success: false,
|
|
224
|
+
values: { success: false, error: "SEARCH_FAILED" },
|
|
225
|
+
data: { actionName: "WEB_SEARCH", query },
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
logger.warn(`[web-search] Search failed: ${errMsg}`);
|
|
160
230
|
return {
|
|
161
231
|
text: `Web search failed: ${errMsg}`,
|
|
162
232
|
success: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binance-skill-helpers.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/binance-skill-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAEjB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAkBvB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"binance-skill-helpers.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/binance-skill-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAEjB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAkBvB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAoCF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAOhD;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,oBAAoB,EAAE,EACrC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAWT;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAStE;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,oBAAoB,EAAE,CAsDxB;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,aAAa,EAAE,oBAAoB,EAAE,EACrC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAC9C,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAC/D,OAAO,CAAC,EAAE;IACR,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,GACA,OAAO,CAAC,IAAI,CAAC,CAyGf;AAonBD,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4HxB"}
|
|
@@ -27,7 +27,7 @@ async function resolveBuiltInFallbackAction(actionName) {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
if (!selfControlFallbackActionsPromise) {
|
|
30
|
-
selfControlFallbackActionsPromise = import("@elizaos/app-lifeops/
|
|
30
|
+
selfControlFallbackActionsPromise = import("@elizaos/app-lifeops/public")
|
|
31
31
|
.then((mod) => ({
|
|
32
32
|
BLOCK_WEBSITES: mod.selfControlBlockWebsitesAction,
|
|
33
33
|
REQUEST_WEBSITE_BLOCKING_PERMISSION: mod.selfControlRequestPermissionAction,
|
|
@@ -7,28 +7,9 @@
|
|
|
7
7
|
import { type AgentRuntime, type ChannelType, createMessageMemory, type Media, type UUID } from "@elizaos/core";
|
|
8
8
|
export declare function maybeAugmentChatMessageWithLanguage(message: ReturnType<typeof createMessageMemory>, preferredLanguage?: string): ReturnType<typeof createMessageMemory>;
|
|
9
9
|
export declare function getErrorMessage(err: unknown, fallback?: string): string;
|
|
10
|
-
export declare function getChatKnowledgeTimeoutMs(): number;
|
|
11
|
-
export declare function shouldAugmentChatMessageWithKnowledge(userPrompt: string): boolean;
|
|
12
|
-
export declare function getChatKnowledgeMatchesWithTimeout(lookup: Promise<Array<{
|
|
13
|
-
id: UUID;
|
|
14
|
-
content: {
|
|
15
|
-
text?: string;
|
|
16
|
-
};
|
|
17
|
-
similarity?: number;
|
|
18
|
-
metadata?: Record<string, unknown>;
|
|
19
|
-
}>>): Promise<Array<{
|
|
20
|
-
id: UUID;
|
|
21
|
-
content: {
|
|
22
|
-
text?: string;
|
|
23
|
-
};
|
|
24
|
-
similarity?: number;
|
|
25
|
-
metadata?: Record<string, unknown>;
|
|
26
|
-
}>>;
|
|
27
|
-
export declare function normalizeChatKnowledgeSnippet(text: string): string;
|
|
28
|
-
export declare function buildChatKnowledgePrompt(userPrompt: string, snippets: string[]): string;
|
|
29
10
|
export declare function buildAgentAwarenessContextPrompt(runtime: AgentRuntime, userPrompt: string): Promise<string>;
|
|
30
11
|
export declare function maybeAugmentChatMessageWithAgentAwareness(runtime: AgentRuntime, message: ReturnType<typeof createMessageMemory>): Promise<ReturnType<typeof createMessageMemory>>;
|
|
31
|
-
export declare function maybeAugmentChatMessageWithKnowledge(
|
|
12
|
+
export declare function maybeAugmentChatMessageWithKnowledge(_runtime: AgentRuntime, message: ReturnType<typeof createMessageMemory>): Promise<ReturnType<typeof createMessageMemory>>;
|
|
32
13
|
export interface ChatImageAttachment {
|
|
33
14
|
/** Base64-encoded image data (no data URL prefix). */
|
|
34
15
|
data: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-augmentation.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/chat-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGhB,mBAAmB,EACnB,KAAK,KAAK,EACV,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-augmentation.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/chat-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGhB,mBAAmB,EACnB,KAAK,KAAK,EACV,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAuBvB,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,iBAAiB,CAAC,EAAE,MAAM,GACzB,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAexC;AAMD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,QAAQ,SAAsB,GAC7B,MAAM,CAIR;AAyED,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAwDjB;AAED,wBAAsB,yCAAyC,CAC7D,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,GAC9C,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAejD;AAED,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,GAC9C,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAEjD;AAMD,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAoBD,eAAO,MAAM,+BAA+B,wCACL,CAAC;AAExC,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyBjE;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,sBAAuB,SAAQ,KAAK;IACnD,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,mBAAmB,EAAE,GAAG,SAAS,GACxC;IACD,kFAAkF;IAClF,WAAW,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAClD,sEAAsE;IACtE,kBAAkB,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;CACzC,CAoBA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,GAAG,SAAS,GAC/C,MAAM,GAAG,IAAI,CAQf;AAED,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG;IAAE,WAAW,EAAE,aAAa,CAAC;IAAC,cAAc,EAAE,aAAa,CAAA;CAAE,CAgDhE"}
|
|
@@ -10,7 +10,6 @@ import { normalizeCharacterLanguage } from "@elizaos/shared/onboarding-presets";
|
|
|
10
10
|
import { detectRuntimeModel, resolveProviderFromModel } from "./agent-model.js";
|
|
11
11
|
import { isCloudProvisionedContainer } from "./cloud-provisioning.js";
|
|
12
12
|
import { extractCompatTextContent } from "./compat-utils.js";
|
|
13
|
-
import { getKnowledgeService, } from "./knowledge-service-loader.js";
|
|
14
13
|
import { getWalletAddresses } from "./wallet.js";
|
|
15
14
|
import { resolvePluginEvmLoaded } from "./wallet-capability.js";
|
|
16
15
|
// ---------------------------------------------------------------------------
|
|
@@ -53,66 +52,6 @@ export function getErrorMessage(err, fallback = "generation failed") {
|
|
|
53
52
|
return fallback;
|
|
54
53
|
}
|
|
55
54
|
// ---------------------------------------------------------------------------
|
|
56
|
-
// Knowledge augmentation
|
|
57
|
-
// ---------------------------------------------------------------------------
|
|
58
|
-
const CHAT_KNOWLEDGE_MIN_SIMILARITY = 0.2;
|
|
59
|
-
const CHAT_KNOWLEDGE_MAX_SNIPPETS = 3;
|
|
60
|
-
const CHAT_KNOWLEDGE_MAX_CHARS = 900;
|
|
61
|
-
const DEFAULT_CHAT_KNOWLEDGE_TIMEOUT_MS = 4_000;
|
|
62
|
-
const MAX_CHAT_KNOWLEDGE_TIMEOUT_MS = 15_000;
|
|
63
|
-
export function getChatKnowledgeTimeoutMs() {
|
|
64
|
-
const raw = process.env.CHAT_KNOWLEDGE_TIMEOUT_MS;
|
|
65
|
-
if (!raw)
|
|
66
|
-
return DEFAULT_CHAT_KNOWLEDGE_TIMEOUT_MS;
|
|
67
|
-
const parsed = Number.parseInt(raw, 10);
|
|
68
|
-
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
69
|
-
return DEFAULT_CHAT_KNOWLEDGE_TIMEOUT_MS;
|
|
70
|
-
}
|
|
71
|
-
return Math.min(parsed, MAX_CHAT_KNOWLEDGE_TIMEOUT_MS);
|
|
72
|
-
}
|
|
73
|
-
export function shouldAugmentChatMessageWithKnowledge(userPrompt) {
|
|
74
|
-
const normalizedPrompt = userPrompt.toLowerCase();
|
|
75
|
-
return [
|
|
76
|
-
"uploaded",
|
|
77
|
-
"file",
|
|
78
|
-
"document",
|
|
79
|
-
"knowledge",
|
|
80
|
-
"codeword",
|
|
81
|
-
"attachment",
|
|
82
|
-
].some((token) => normalizedPrompt.includes(token));
|
|
83
|
-
}
|
|
84
|
-
export async function getChatKnowledgeMatchesWithTimeout(lookup) {
|
|
85
|
-
const timeoutMs = getChatKnowledgeTimeoutMs();
|
|
86
|
-
let timer = null;
|
|
87
|
-
try {
|
|
88
|
-
return await Promise.race([
|
|
89
|
-
lookup,
|
|
90
|
-
new Promise((_resolve, reject) => {
|
|
91
|
-
timer = setTimeout(() => {
|
|
92
|
-
reject(new Error("Chat knowledge lookup timed out"));
|
|
93
|
-
}, timeoutMs);
|
|
94
|
-
}),
|
|
95
|
-
]);
|
|
96
|
-
}
|
|
97
|
-
finally {
|
|
98
|
-
if (timer)
|
|
99
|
-
clearTimeout(timer);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
export function normalizeChatKnowledgeSnippet(text) {
|
|
103
|
-
return text.replace(/\s+/g, " ").trim().slice(0, CHAT_KNOWLEDGE_MAX_CHARS);
|
|
104
|
-
}
|
|
105
|
-
export function buildChatKnowledgePrompt(userPrompt, snippets) {
|
|
106
|
-
return [
|
|
107
|
-
"Relevant uploaded knowledge snippets:",
|
|
108
|
-
...snippets.map((snippet, index) => `[K${index + 1}] ${snippet}`),
|
|
109
|
-
"",
|
|
110
|
-
"Use the uploaded knowledge when it is relevant to the user's request. Ignore it when it is not relevant.",
|
|
111
|
-
"",
|
|
112
|
-
`User message: ${userPrompt}`,
|
|
113
|
-
].join("\n");
|
|
114
|
-
}
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
55
|
// Agent self-awareness augmentation
|
|
117
56
|
// ---------------------------------------------------------------------------
|
|
118
57
|
const AGENT_AWARENESS_INTENT_RE = /\b(model|provider|wallet|address|balance|swap|trade|transfer|send|token|bnb|eth|sol|onchain|on-chain|plugin|plugins|capabilit(?:y|ies)|cloud|credits|hosted|hosting|runtime|what are you running)\b/i;
|
|
@@ -225,55 +164,8 @@ export async function maybeAugmentChatMessageWithAgentAwareness(runtime, message
|
|
|
225
164
|
},
|
|
226
165
|
};
|
|
227
166
|
}
|
|
228
|
-
export async function maybeAugmentChatMessageWithKnowledge(
|
|
229
|
-
|
|
230
|
-
if (!userPrompt || !runtime.agentId) {
|
|
231
|
-
return message;
|
|
232
|
-
}
|
|
233
|
-
if (!shouldAugmentChatMessageWithKnowledge(userPrompt)) {
|
|
234
|
-
return message;
|
|
235
|
-
}
|
|
236
|
-
try {
|
|
237
|
-
const knowledge = await getKnowledgeService(runtime);
|
|
238
|
-
if (!knowledge.service) {
|
|
239
|
-
return message;
|
|
240
|
-
}
|
|
241
|
-
const searchMessage = {
|
|
242
|
-
...message,
|
|
243
|
-
id: crypto.randomUUID(),
|
|
244
|
-
agentId: runtime.agentId,
|
|
245
|
-
entityId: runtime.agentId,
|
|
246
|
-
roomId: runtime.agentId,
|
|
247
|
-
content: { text: userPrompt },
|
|
248
|
-
createdAt: Date.now(),
|
|
249
|
-
};
|
|
250
|
-
const snippets = (await getChatKnowledgeMatchesWithTimeout(knowledge.service.getKnowledge(searchMessage, {
|
|
251
|
-
roomId: runtime.agentId,
|
|
252
|
-
})))
|
|
253
|
-
.filter((match) => (match.similarity ?? 0) >= CHAT_KNOWLEDGE_MIN_SIMILARITY)
|
|
254
|
-
.slice(0, CHAT_KNOWLEDGE_MAX_SNIPPETS)
|
|
255
|
-
.map((match) => normalizeChatKnowledgeSnippet(match.content?.text ?? ""))
|
|
256
|
-
.filter((snippet) => snippet.length > 0);
|
|
257
|
-
if (snippets.length === 0) {
|
|
258
|
-
return message;
|
|
259
|
-
}
|
|
260
|
-
return {
|
|
261
|
-
...message,
|
|
262
|
-
content: {
|
|
263
|
-
...message.content,
|
|
264
|
-
text: buildChatKnowledgePrompt(userPrompt, snippets),
|
|
265
|
-
},
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
catch (err) {
|
|
269
|
-
runtime.logger?.warn({
|
|
270
|
-
err,
|
|
271
|
-
src: "eliza-api",
|
|
272
|
-
messageId: message.id,
|
|
273
|
-
roomId: message.roomId,
|
|
274
|
-
}, "Failed to augment chat message with uploaded knowledge");
|
|
275
|
-
return message;
|
|
276
|
-
}
|
|
167
|
+
export async function maybeAugmentChatMessageWithKnowledge(_runtime, message) {
|
|
168
|
+
return message;
|
|
277
169
|
}
|
|
278
170
|
const MAX_CHAT_IMAGES = 4;
|
|
279
171
|
/** Maximum base64 data length for a single image (~3.75 MB binary). */
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { JsonValue, Room } from "@elizaos/core";
|
|
2
|
+
import type { ConversationMeta, ConversationMetadata } from "./server-types.js";
|
|
3
|
+
type RoomMetadataRecord = Record<string, JsonValue>;
|
|
4
|
+
export declare function sanitizeConversationMetadata(value: unknown): ConversationMetadata | undefined;
|
|
5
|
+
export declare function buildConversationRoomMetadata(conversation: Pick<ConversationMeta, "id" | "metadata">, ownerId: string, existingMetadata?: unknown): RoomMetadataRecord;
|
|
6
|
+
export declare function extractConversationMetadataFromRoom(room: Pick<Room, "metadata"> | null | undefined, expectedConversationId?: string): ConversationMetadata | undefined;
|
|
7
|
+
export declare function isAutomationConversationMetadata(metadata: ConversationMetadata | null | undefined): boolean;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=conversation-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-metadata.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/conversation-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AAE3B,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AA8BpD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,oBAAoB,GAAG,SAAS,CA4ClC;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,UAAU,CAAC,EACvD,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,OAAO,GACzB,kBAAkB,CAkBpB;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/C,sBAAsB,CAAC,EAAE,MAAM,GAC9B,oBAAoB,GAAG,SAAS,CAkBlC;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAChD,OAAO,CAMT"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const VALID_SCOPES = new Set([
|
|
2
|
+
"general",
|
|
3
|
+
"automation-coordinator",
|
|
4
|
+
"automation-workflow",
|
|
5
|
+
"automation-workflow-draft",
|
|
6
|
+
]);
|
|
7
|
+
const VALID_AUTOMATION_TYPES = new Set(["coordinator_text", "n8n_workflow"]);
|
|
8
|
+
function asRecord(value) {
|
|
9
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function normalizeOptionalString(value) {
|
|
15
|
+
if (typeof value !== "string") {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const trimmed = value.trim();
|
|
19
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
20
|
+
}
|
|
21
|
+
export function sanitizeConversationMetadata(value) {
|
|
22
|
+
const record = asRecord(value);
|
|
23
|
+
if (!record) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const scope = normalizeOptionalString(record.scope);
|
|
27
|
+
const automationType = normalizeOptionalString(record.automationType);
|
|
28
|
+
const next = {};
|
|
29
|
+
if (scope && VALID_SCOPES.has(scope)) {
|
|
30
|
+
next.scope = scope;
|
|
31
|
+
}
|
|
32
|
+
if (automationType && VALID_AUTOMATION_TYPES.has(automationType)) {
|
|
33
|
+
next.automationType = automationType;
|
|
34
|
+
}
|
|
35
|
+
const taskId = normalizeOptionalString(record.taskId);
|
|
36
|
+
if (taskId)
|
|
37
|
+
next.taskId = taskId;
|
|
38
|
+
const triggerId = normalizeOptionalString(record.triggerId);
|
|
39
|
+
if (triggerId)
|
|
40
|
+
next.triggerId = triggerId;
|
|
41
|
+
const workflowId = normalizeOptionalString(record.workflowId);
|
|
42
|
+
if (workflowId)
|
|
43
|
+
next.workflowId = workflowId;
|
|
44
|
+
const workflowName = normalizeOptionalString(record.workflowName);
|
|
45
|
+
if (workflowName)
|
|
46
|
+
next.workflowName = workflowName;
|
|
47
|
+
const draftId = normalizeOptionalString(record.draftId);
|
|
48
|
+
if (draftId)
|
|
49
|
+
next.draftId = draftId;
|
|
50
|
+
const sourceConversationId = normalizeOptionalString(record.sourceConversationId);
|
|
51
|
+
if (sourceConversationId)
|
|
52
|
+
next.sourceConversationId = sourceConversationId;
|
|
53
|
+
const terminalBridgeConversationId = normalizeOptionalString(record.terminalBridgeConversationId);
|
|
54
|
+
if (terminalBridgeConversationId) {
|
|
55
|
+
next.terminalBridgeConversationId = terminalBridgeConversationId;
|
|
56
|
+
}
|
|
57
|
+
return Object.keys(next).length > 0 ? next : undefined;
|
|
58
|
+
}
|
|
59
|
+
export function buildConversationRoomMetadata(conversation, ownerId, existingMetadata) {
|
|
60
|
+
const base = (asRecord(existingMetadata) ?? {});
|
|
61
|
+
const sanitized = sanitizeConversationMetadata(conversation.metadata);
|
|
62
|
+
const next = {
|
|
63
|
+
...base,
|
|
64
|
+
ownership: { ownerId },
|
|
65
|
+
};
|
|
66
|
+
if (sanitized) {
|
|
67
|
+
next.webConversation = {
|
|
68
|
+
conversationId: conversation.id,
|
|
69
|
+
...sanitized,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
delete next.webConversation;
|
|
74
|
+
}
|
|
75
|
+
return next;
|
|
76
|
+
}
|
|
77
|
+
export function extractConversationMetadataFromRoom(room, expectedConversationId) {
|
|
78
|
+
const roomMetadata = asRecord(room?.metadata);
|
|
79
|
+
if (!roomMetadata) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const stored = asRecord(roomMetadata.webConversation);
|
|
83
|
+
if (!stored) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const storedConversationId = normalizeOptionalString(stored.conversationId);
|
|
87
|
+
if (expectedConversationId &&
|
|
88
|
+
storedConversationId &&
|
|
89
|
+
storedConversationId !== expectedConversationId) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
return sanitizeConversationMetadata(stored);
|
|
93
|
+
}
|
|
94
|
+
export function isAutomationConversationMetadata(metadata) {
|
|
95
|
+
return (metadata?.scope === "automation-coordinator" ||
|
|
96
|
+
metadata?.scope === "automation-workflow" ||
|
|
97
|
+
metadata?.scope === "automation-workflow-draft");
|
|
98
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-routes.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/conversation-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,OAAO,EAIZ,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAwBvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-routes.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/conversation-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,OAAO,EAIZ,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAwBvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAM9D,OAAO,EAEL,KAAK,gBAAgB,EAMtB,MAAM,aAAa,CAAC;AAgErB,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,0BAA0B,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AA+QD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAqBvE;AASD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,qBAAqB,GAAE,SAAS,MAAM,EAAO,GAC5C,MAAM,CAmBR;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,EACF,IAAI,CACF,oBAAoB,EACpB,uBAAuB,GAAG,iBAAiB,GAAG,kBAAkB,CACjE,GACD,IAAI,GACJ,SAAS,GACZ,OAAO,CA8BT;AAED,wBAAsB,2CAA2C,CAC/D,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,IAAI,EACZ,qBAAqB,EAAE,SAAS,MAAM,EAAE,EACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAoElB;AAgMD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAi7BlB"}
|
|
@@ -20,7 +20,8 @@ import { resolveStateDir } from "../config/paths.js";
|
|
|
20
20
|
import { generateChatResponse, generateConversationTitle, getChatFailureReply, hasRecentVisibleAssistantMemorySince, initSse, normalizeChatResponseText, persistAssistantConversationMemory, persistConversationMemory, readChatRequestPayload, resolveNoResponseFallback, writeChatTokenSse, writeSse, writeSseJson, } from "./chat-routes.js";
|
|
21
21
|
import { cacheDiscordAvatarForRuntime, isCanonicalDiscordSource, resolveDiscordMessageAuthorProfile, resolveDiscordUserProfile, resolveStoredDiscordEntityProfile, } from "./discord-profiles.js";
|
|
22
22
|
import { evictOldestConversation } from "./memory-bounds.js";
|
|
23
|
-
import {
|
|
23
|
+
import { buildConversationRoomMetadata, sanitizeConversationMetadata, } from "./conversation-metadata.js";
|
|
24
|
+
import { buildUserMessages, getErrorMessage, isUuidLike, resolveAppUserName, resolveConversationGreetingText, resolveWalletModeGuidanceReply, } from "./server.js";
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
// Deleted-conversations state persistence
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
@@ -199,13 +200,29 @@ async function ensureConversationRoom(state, conv) {
|
|
|
199
200
|
});
|
|
200
201
|
await ensureWorldOwnershipAndRoles(runtime, worldId, userId);
|
|
201
202
|
}
|
|
202
|
-
async function
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
async function syncConversationRoomState(state, conv) {
|
|
204
|
+
if (!state.runtime)
|
|
205
|
+
return;
|
|
206
|
+
const runtime = state.runtime;
|
|
207
|
+
const room = await runtime.getRoom(conv.roomId);
|
|
208
|
+
if (!room)
|
|
209
|
+
return;
|
|
210
|
+
const ownerId = ensureAdminEntityId(state);
|
|
211
|
+
const nextMetadata = buildConversationRoomMetadata(conv, ownerId, room.metadata);
|
|
212
|
+
const nextName = conv.title;
|
|
213
|
+
const metadataChanged = JSON.stringify(room.metadata ?? null) !== JSON.stringify(nextMetadata);
|
|
214
|
+
if (room.name === nextName && !metadataChanged) {
|
|
215
|
+
return;
|
|
205
216
|
}
|
|
206
|
-
|
|
207
|
-
|
|
217
|
+
const adapter = runtime.adapter;
|
|
218
|
+
if (typeof adapter.updateRoom !== "function") {
|
|
219
|
+
return;
|
|
208
220
|
}
|
|
221
|
+
await adapter.updateRoom({
|
|
222
|
+
...room,
|
|
223
|
+
name: nextName,
|
|
224
|
+
metadata: nextMetadata,
|
|
225
|
+
});
|
|
209
226
|
}
|
|
210
227
|
async function waitForConversationRestore(state) {
|
|
211
228
|
const pending = state.conversationRestorePromise;
|
|
@@ -481,6 +498,9 @@ export async function handleConversationRoutes(ctx) {
|
|
|
481
498
|
id,
|
|
482
499
|
title: body.title?.trim() || "New Chat",
|
|
483
500
|
roomId,
|
|
501
|
+
...(sanitizeConversationMetadata(body.metadata)
|
|
502
|
+
? { metadata: sanitizeConversationMetadata(body.metadata) }
|
|
503
|
+
: {}),
|
|
484
504
|
createdAt: now,
|
|
485
505
|
updatedAt: now,
|
|
486
506
|
};
|
|
@@ -491,7 +511,7 @@ export async function handleConversationRoutes(ctx) {
|
|
|
491
511
|
if (state.runtime) {
|
|
492
512
|
try {
|
|
493
513
|
await ensureConversationRoom(state, conv);
|
|
494
|
-
await
|
|
514
|
+
await syncConversationRoomState(state, conv);
|
|
495
515
|
if (body.includeGreeting === true) {
|
|
496
516
|
const storedGreeting = await ensureConversationGreetingStored(state, conv, typeof body.lang === "string" ? body.lang : "en");
|
|
497
517
|
if (storedGreeting.text.trim()) {
|
|
@@ -1078,13 +1098,24 @@ export async function handleConversationRoutes(ctx) {
|
|
|
1078
1098
|
if (resolvedTitle) {
|
|
1079
1099
|
conv.title = resolvedTitle;
|
|
1080
1100
|
conv.updatedAt = new Date().toISOString();
|
|
1081
|
-
await
|
|
1101
|
+
await syncConversationRoomState(state, conv);
|
|
1082
1102
|
}
|
|
1083
1103
|
}
|
|
1084
1104
|
else if (body.title?.trim()) {
|
|
1085
1105
|
conv.title = body.title.trim();
|
|
1086
1106
|
conv.updatedAt = new Date().toISOString();
|
|
1087
|
-
await
|
|
1107
|
+
await syncConversationRoomState(state, conv);
|
|
1108
|
+
}
|
|
1109
|
+
if (body.metadata !== undefined) {
|
|
1110
|
+
const nextMetadata = sanitizeConversationMetadata(body.metadata);
|
|
1111
|
+
if (nextMetadata) {
|
|
1112
|
+
conv.metadata = nextMetadata;
|
|
1113
|
+
}
|
|
1114
|
+
else {
|
|
1115
|
+
delete conv.metadata;
|
|
1116
|
+
}
|
|
1117
|
+
conv.updatedAt = new Date().toISOString();
|
|
1118
|
+
await syncConversationRoomState(state, conv);
|
|
1088
1119
|
}
|
|
1089
1120
|
json(res, { conversation: conv });
|
|
1090
1121
|
return true;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getSelfControlPermissionState, openSelfControlPermissionLocation, requestSelfControlPermission, } from "@elizaos/app-lifeops/
|
|
1
|
+
import { getSelfControlPermissionState, openSelfControlPermissionLocation, requestSelfControlPermission, } from "@elizaos/app-lifeops/public";
|
|
2
2
|
const WEBSITE_BLOCKING_PERMISSION_ID = "website-blocking";
|
|
3
3
|
async function getWebsiteBlockingPermissionState() {
|
|
4
4
|
return await getSelfControlPermissionState();
|
|
@@ -113,7 +113,7 @@ export function applyCors(req, res, pathname) {
|
|
|
113
113
|
res.setHeader("Access-Control-Allow-Origin", allowed);
|
|
114
114
|
res.setHeader("Vary", "Origin");
|
|
115
115
|
res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
116
|
-
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Eliza-Token, X-Api-Key, X-Eliza-Export-Token, X-Eliza-Client-Id, X-Eliza-Terminal-Token, X-Eliza-UI-Language, X-Eliza-Browser-Companion-Id");
|
|
116
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Eliza-Token, X-Api-Key, X-Eliza-Export-Token, X-Eliza-Client-Id, X-Eliza-Terminal-Token, X-Eliza-UI-Language, X-LifeOps-Browser-Companion-Id, X-Eliza-Browser-Companion-Id");
|
|
117
117
|
}
|
|
118
118
|
// Security headers
|
|
119
119
|
res.setHeader("X-Content-Type-Options", "nosniff");
|
|
@@ -28,6 +28,7 @@ export interface ConversationMeta {
|
|
|
28
28
|
id: string;
|
|
29
29
|
title: string;
|
|
30
30
|
roomId: UUID;
|
|
31
|
+
metadata?: import("./server-types.js").ConversationMetadata;
|
|
31
32
|
createdAt: string;
|
|
32
33
|
updatedAt: string;
|
|
33
34
|
}
|
|
@@ -85,7 +86,7 @@ export declare function buildUserMessages(params: {
|
|
|
85
86
|
type ConversationRoomTitleRef = Pick<ConversationMeta, "id" | "title" | "roomId">;
|
|
86
87
|
export declare function persistConversationRoomTitle(runtime: Pick<AgentRuntime, "getRoom" | "adapter"> | null | undefined, conversation: ConversationRoomTitleRef): Promise<boolean>;
|
|
87
88
|
export declare function maybeAugmentChatMessageWithWalletContext(runtime: AgentRuntime, message: ReturnType<typeof createMessageMemory>): ReturnType<typeof createMessageMemory>;
|
|
88
|
-
export declare function maybeAugmentChatMessageWithKnowledge(
|
|
89
|
+
export declare function maybeAugmentChatMessageWithKnowledge(_runtime: AgentRuntime, message: ReturnType<typeof createMessageMemory>): Promise<ReturnType<typeof createMessageMemory>>;
|
|
89
90
|
export declare const WALLET_EXECUTION_INTENT_RE: RegExp;
|
|
90
91
|
export declare const WALLET_PROGRESS_ONLY_RE: RegExp;
|
|
91
92
|
export declare function isWalletActionRequiredIntent(prompt: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-helpers.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/server-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGhB,mBAAmB,EAEnB,KAAK,KAAK,EACV,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvD,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,iBAAiB,EACvB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"server-helpers.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/server-helpers.ts"],"names":[],"mappings":"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"}
|