@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
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval / pending-user-action routes.
|
|
3
|
+
*
|
|
4
|
+
* `GET /api/approvals` is the canonical read surface for work that is blocked
|
|
5
|
+
* on the user. It aggregates legacy owner approval rows, task-based approval
|
|
6
|
+
* records, and pending planner prompts into the shared `PendingUserAction`
|
|
7
|
+
* contract so clients render one list without knowing producer internals.
|
|
8
|
+
*/
|
|
9
|
+
import { PENDING_USER_ACTION_WEIGHT, ServiceType, } from "@elizaos/core";
|
|
10
|
+
import { APPROVAL_SERVICE } from "../services/approval/service.js";
|
|
11
|
+
import { PENDING_PROMPTS_SERVICE } from "../services/pending-prompts/service.js";
|
|
12
|
+
const APPROVAL_STATES = [
|
|
13
|
+
"pending",
|
|
14
|
+
"approved",
|
|
15
|
+
"executing",
|
|
16
|
+
"done",
|
|
17
|
+
"rejected",
|
|
18
|
+
"expired",
|
|
19
|
+
];
|
|
20
|
+
function isAgentApprovalService(value) {
|
|
21
|
+
return (typeof value === "object" &&
|
|
22
|
+
value !== null &&
|
|
23
|
+
typeof value.getQueue === "function");
|
|
24
|
+
}
|
|
25
|
+
function isPendingUserActionService(value) {
|
|
26
|
+
return (typeof value === "object" &&
|
|
27
|
+
value !== null &&
|
|
28
|
+
typeof value.listPendingUserActions ===
|
|
29
|
+
"function");
|
|
30
|
+
}
|
|
31
|
+
function isApprovalTaskService(value) {
|
|
32
|
+
return (typeof value === "object" &&
|
|
33
|
+
value !== null &&
|
|
34
|
+
typeof value.getAllPendingApprovals ===
|
|
35
|
+
"function");
|
|
36
|
+
}
|
|
37
|
+
function parseLimit(raw) {
|
|
38
|
+
if (!raw)
|
|
39
|
+
return 50;
|
|
40
|
+
const parsed = Number.parseInt(raw, 10);
|
|
41
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
42
|
+
return 50;
|
|
43
|
+
return Math.min(parsed, 500);
|
|
44
|
+
}
|
|
45
|
+
function parseState(raw) {
|
|
46
|
+
if (!raw)
|
|
47
|
+
return "pending";
|
|
48
|
+
if (raw === "all")
|
|
49
|
+
return null;
|
|
50
|
+
return APPROVAL_STATES.includes(raw)
|
|
51
|
+
? raw
|
|
52
|
+
: "pending";
|
|
53
|
+
}
|
|
54
|
+
function getAgentApprovalQueue(state) {
|
|
55
|
+
const service = state.runtime?.getService(APPROVAL_SERVICE);
|
|
56
|
+
if (!isAgentApprovalService(service))
|
|
57
|
+
return null;
|
|
58
|
+
return service.getQueue(state.runtime?.agentId);
|
|
59
|
+
}
|
|
60
|
+
async function listServicePendingUserActions(state, serviceType) {
|
|
61
|
+
const service = state.runtime?.getService(serviceType);
|
|
62
|
+
if (!isPendingUserActionService(service))
|
|
63
|
+
return [];
|
|
64
|
+
return await service.listPendingUserActions();
|
|
65
|
+
}
|
|
66
|
+
async function listApprovalTaskActions(state) {
|
|
67
|
+
const service = state.runtime?.getService(ServiceType.APPROVAL);
|
|
68
|
+
if (!isApprovalTaskService(service))
|
|
69
|
+
return [];
|
|
70
|
+
const tasks = await service.getAllPendingApprovals();
|
|
71
|
+
return tasks
|
|
72
|
+
.map(approvalTaskToPendingAction)
|
|
73
|
+
.filter((action) => action !== null);
|
|
74
|
+
}
|
|
75
|
+
function toIso(value) {
|
|
76
|
+
return value ? value.toISOString() : null;
|
|
77
|
+
}
|
|
78
|
+
function approvalToDto(approval) {
|
|
79
|
+
return {
|
|
80
|
+
id: approval.id,
|
|
81
|
+
state: approval.state,
|
|
82
|
+
requestedBy: approval.requestedBy,
|
|
83
|
+
subjectUserId: approval.subjectUserId,
|
|
84
|
+
action: approval.action,
|
|
85
|
+
payload: approval.payload,
|
|
86
|
+
channel: approval.channel,
|
|
87
|
+
reason: approval.reason,
|
|
88
|
+
expiresAt: approval.expiresAt.toISOString(),
|
|
89
|
+
resolvedAt: toIso(approval.resolvedAt),
|
|
90
|
+
resolvedBy: approval.resolvedBy,
|
|
91
|
+
resolutionReason: approval.resolutionReason,
|
|
92
|
+
createdAt: approval.createdAt.toISOString(),
|
|
93
|
+
updatedAt: approval.updatedAt.toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function humanizeAction(action) {
|
|
97
|
+
return action.replace(/_/g, " ");
|
|
98
|
+
}
|
|
99
|
+
function approvalToPendingUserAction(approval) {
|
|
100
|
+
return {
|
|
101
|
+
id: approval.id,
|
|
102
|
+
kind: "approval",
|
|
103
|
+
source: "approval-queue",
|
|
104
|
+
title: approval.reason || `Approve ${humanizeAction(approval.action)}`,
|
|
105
|
+
description: `${humanizeAction(approval.action)} via ${approval.channel}`,
|
|
106
|
+
options: [
|
|
107
|
+
{ id: "approve", label: "Approve" },
|
|
108
|
+
{ id: "reject", label: "Reject", isCancel: true },
|
|
109
|
+
],
|
|
110
|
+
expectedReplyKind: "approval",
|
|
111
|
+
weight: PENDING_USER_ACTION_WEIGHT.approval,
|
|
112
|
+
resolution: {
|
|
113
|
+
target: "approval_service",
|
|
114
|
+
requestId: approval.id,
|
|
115
|
+
},
|
|
116
|
+
data: {
|
|
117
|
+
state: approval.state,
|
|
118
|
+
action: approval.action,
|
|
119
|
+
channel: approval.channel,
|
|
120
|
+
requestedBy: approval.requestedBy,
|
|
121
|
+
subjectUserId: approval.subjectUserId,
|
|
122
|
+
},
|
|
123
|
+
createdAt: approval.createdAt.getTime(),
|
|
124
|
+
expiresAt: approval.expiresAt.getTime(),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function parseTaskOptions(task) {
|
|
128
|
+
const raw = task.metadata?.options;
|
|
129
|
+
if (!Array.isArray(raw))
|
|
130
|
+
return undefined;
|
|
131
|
+
const options = [];
|
|
132
|
+
for (const entry of raw) {
|
|
133
|
+
if (typeof entry !== "object" || entry === null)
|
|
134
|
+
continue;
|
|
135
|
+
const record = entry;
|
|
136
|
+
if (typeof record.name !== "string" || record.name.length === 0)
|
|
137
|
+
continue;
|
|
138
|
+
options.push({
|
|
139
|
+
id: record.name,
|
|
140
|
+
label: typeof record.description === "string" && record.description.length > 0
|
|
141
|
+
? record.description
|
|
142
|
+
: record.name,
|
|
143
|
+
...(record.isDefault === true ? { isDefault: true } : {}),
|
|
144
|
+
...(record.isCancel === true ? { isCancel: true } : {}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return options.length > 0 ? options : undefined;
|
|
148
|
+
}
|
|
149
|
+
function resolveTaskCreatedAt(task) {
|
|
150
|
+
const approvalRequest = task.metadata?.approvalRequest;
|
|
151
|
+
if (approvalRequest && typeof approvalRequest === "object") {
|
|
152
|
+
const createdAt = approvalRequest.createdAt;
|
|
153
|
+
if (typeof createdAt === "number" && Number.isFinite(createdAt)) {
|
|
154
|
+
return createdAt;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return typeof task.createdAt === "number" ? task.createdAt : Date.now();
|
|
158
|
+
}
|
|
159
|
+
export function approvalTaskToPendingAction(task) {
|
|
160
|
+
if (!task.id || !task.roomId)
|
|
161
|
+
return null;
|
|
162
|
+
return {
|
|
163
|
+
id: task.id,
|
|
164
|
+
kind: "task_approval",
|
|
165
|
+
source: "approval-service",
|
|
166
|
+
title: task.description?.trim() || task.name,
|
|
167
|
+
roomId: task.roomId,
|
|
168
|
+
options: parseTaskOptions(task),
|
|
169
|
+
weight: PENDING_USER_ACTION_WEIGHT.task_approval,
|
|
170
|
+
resolution: {
|
|
171
|
+
target: "approval_service",
|
|
172
|
+
requestId: task.id,
|
|
173
|
+
},
|
|
174
|
+
createdAt: resolveTaskCreatedAt(task),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function dedupeAndSortPendingActions(actions) {
|
|
178
|
+
const seen = new Set();
|
|
179
|
+
const deduped = [];
|
|
180
|
+
for (const action of actions) {
|
|
181
|
+
if (seen.has(action.id))
|
|
182
|
+
continue;
|
|
183
|
+
seen.add(action.id);
|
|
184
|
+
deduped.push(action);
|
|
185
|
+
}
|
|
186
|
+
return deduped.sort((a, b) => b.createdAt - a.createdAt);
|
|
187
|
+
}
|
|
188
|
+
export async function handleApprovalRoute(req, res, pathname, method, state, helpers) {
|
|
189
|
+
if (!pathname.startsWith("/api/approvals"))
|
|
190
|
+
return false;
|
|
191
|
+
if (method !== "GET" || pathname !== "/api/approvals") {
|
|
192
|
+
helpers.error(res, "approval route not found", 404);
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
const url = new URL(req.url ?? pathname, "http://localhost");
|
|
196
|
+
const filter = {
|
|
197
|
+
subjectUserId: null,
|
|
198
|
+
state: parseState(url.searchParams.get("state")),
|
|
199
|
+
action: null,
|
|
200
|
+
limit: parseLimit(url.searchParams.get("limit")),
|
|
201
|
+
};
|
|
202
|
+
const queue = getAgentApprovalQueue(state);
|
|
203
|
+
const approvals = queue ? await queue.list(filter) : [];
|
|
204
|
+
const [serviceActions, taskActions, promptActions] = await Promise.all([
|
|
205
|
+
listServicePendingUserActions(state, ServiceType.APPROVAL),
|
|
206
|
+
listApprovalTaskActions(state),
|
|
207
|
+
listServicePendingUserActions(state, PENDING_PROMPTS_SERVICE),
|
|
208
|
+
]);
|
|
209
|
+
const pending = dedupeAndSortPendingActions([
|
|
210
|
+
...approvals
|
|
211
|
+
.filter((approval) => approval.state === "pending")
|
|
212
|
+
.map(approvalToPendingUserAction),
|
|
213
|
+
...serviceActions,
|
|
214
|
+
...taskActions,
|
|
215
|
+
...promptActions,
|
|
216
|
+
]);
|
|
217
|
+
helpers.json(res, {
|
|
218
|
+
approvals: approvals.map(approvalToDto),
|
|
219
|
+
pending,
|
|
220
|
+
pendingUserActions: pending,
|
|
221
|
+
});
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP route backing the Background view's "Generate" control: turn a text
|
|
3
|
+
* prompt into a durable, same-origin background image.
|
|
4
|
+
*
|
|
5
|
+
* Generation runs through the agent's media-generation service (cloud or local
|
|
6
|
+
* image provider). Providers return base64 bytes, a `data:` URL, or a remote
|
|
7
|
+
* http(s) URL; all three are normalized into the content-addressed media store
|
|
8
|
+
* so the client persists a short, stable `/api/media/<hash>` reference rather
|
|
9
|
+
* than a multi-MB data URL.
|
|
10
|
+
*/
|
|
11
|
+
import { type Route } from "@elizaos/core";
|
|
12
|
+
export declare const backgroundGenerateImageRoute: Route;
|
|
13
|
+
//# sourceMappingURL=background-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-routes.d.ts","sourceRoot":"","sources":["../../src/api/background-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAKL,KAAK,KAAK,EAEX,MAAM,eAAe,CAAC;AAoDvB,eAAO,MAAM,4BAA4B,EAAE,KAkD1C,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP route backing the Background view's "Generate" control: turn a text
|
|
3
|
+
* prompt into a durable, same-origin background image.
|
|
4
|
+
*
|
|
5
|
+
* Generation runs through the agent's media-generation service (cloud or local
|
|
6
|
+
* image provider). Providers return base64 bytes, a `data:` URL, or a remote
|
|
7
|
+
* http(s) URL; all three are normalized into the content-addressed media store
|
|
8
|
+
* so the client persists a short, stable `/api/media/<hash>` reference rather
|
|
9
|
+
* than a multi-MB data URL.
|
|
10
|
+
*/
|
|
11
|
+
import { Buffer } from "node:buffer";
|
|
12
|
+
import { fetchRemoteMedia, logger, ServiceType, } from "@elizaos/core";
|
|
13
|
+
import { persistDataUrl, persistMediaBytes } from "./media-store.js";
|
|
14
|
+
function jsonResult(status, body) {
|
|
15
|
+
return {
|
|
16
|
+
status,
|
|
17
|
+
headers: { "content-type": "application/json; charset=utf-8" },
|
|
18
|
+
body,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Cap on a re-hosted background image (generated art is small). */
|
|
22
|
+
const BACKGROUND_IMAGE_MAX_BYTES = 16 * 1024 * 1024;
|
|
23
|
+
/** Normalize a generated image (base64 / data URL / remote URL) to a served URL. */
|
|
24
|
+
async function persistGeneratedImage(imageBase64, imageUrl, mimeType) {
|
|
25
|
+
if (imageBase64) {
|
|
26
|
+
return persistMediaBytes(Buffer.from(imageBase64, "base64"), mimeType).url;
|
|
27
|
+
}
|
|
28
|
+
if (imageUrl.startsWith("data:")) {
|
|
29
|
+
const persisted = persistDataUrl(imageUrl);
|
|
30
|
+
if (persisted)
|
|
31
|
+
return persisted.url;
|
|
32
|
+
}
|
|
33
|
+
if (/^https?:\/\//.test(imageUrl)) {
|
|
34
|
+
try {
|
|
35
|
+
// SSRF-guarded server-side fetch (mandated for all remote media fetches).
|
|
36
|
+
const { buffer, contentType } = await fetchRemoteMedia({
|
|
37
|
+
url: imageUrl,
|
|
38
|
+
maxBytes: BACKGROUND_IMAGE_MAX_BYTES,
|
|
39
|
+
});
|
|
40
|
+
return persistMediaBytes(buffer, contentType ?? mimeType).url;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
logger.warn(`[background] could not re-host generated image ${imageUrl}: ${err instanceof Error ? err.message : String(err)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Already a usable URL we couldn't (or needn't) re-host.
|
|
47
|
+
return imageUrl;
|
|
48
|
+
}
|
|
49
|
+
export const backgroundGenerateImageRoute = {
|
|
50
|
+
type: "POST",
|
|
51
|
+
path: "/api/background/generate-image",
|
|
52
|
+
// Serve at the literal path, not under the plugin-name prefix.
|
|
53
|
+
rawPath: true,
|
|
54
|
+
name: "background-generate-image",
|
|
55
|
+
routeHandler: async (ctx) => {
|
|
56
|
+
const body = (ctx.body ?? {});
|
|
57
|
+
const prompt = typeof body.prompt === "string" ? body.prompt.trim() : "";
|
|
58
|
+
if (!prompt) {
|
|
59
|
+
return jsonResult(400, { error: "A prompt is required." });
|
|
60
|
+
}
|
|
61
|
+
const service = ctx.runtime.getService(ServiceType.MEDIA_GENERATION);
|
|
62
|
+
if (!service) {
|
|
63
|
+
return jsonResult(503, { error: "Media generation is not available." });
|
|
64
|
+
}
|
|
65
|
+
const request = {
|
|
66
|
+
mediaType: "image",
|
|
67
|
+
prompt,
|
|
68
|
+
size: typeof body.size === "string" ? body.size : undefined,
|
|
69
|
+
};
|
|
70
|
+
if (!(await service.canGenerateMedia(request))) {
|
|
71
|
+
return jsonResult(503, { error: "Image generation is not configured." });
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const result = await service.generateMedia(request);
|
|
75
|
+
const sourceUrl = result.imageUrl ?? result.url ?? "";
|
|
76
|
+
if (!result.imageBase64 && !sourceUrl) {
|
|
77
|
+
return jsonResult(502, {
|
|
78
|
+
error: "Image generation returned no image.",
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const url = await persistGeneratedImage(result.imageBase64, sourceUrl, result.mimeType ?? "image/png");
|
|
82
|
+
return jsonResult(200, { url });
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
// Translate a provider/transport failure into a clear client error.
|
|
86
|
+
return jsonResult(502, {
|
|
87
|
+
error: err instanceof Error ? err.message : "Image generation failed.",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Binance direct-skill request helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Handles direct dispatch of Binance DeFi skills (meme-rush, trading-signal,
|
|
5
|
+
* token-info, etc.) and fallback action parsing.
|
|
6
6
|
*/
|
|
7
7
|
import { type ActionParameters, type AgentRuntime, type createMessageMemory } from "@elizaos/core";
|
|
8
8
|
export type FallbackParsedAction = {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Binance direct-skill request helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Handles direct dispatch of Binance DeFi skills (meme-rush, trading-signal,
|
|
5
|
+
* token-info, etc.) and fallback action parsing.
|
|
6
6
|
*/
|
|
7
7
|
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
8
8
|
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-views.d.ts","sourceRoot":"","sources":["../../src/api/builtin-views.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"builtin-views.d.ts","sourceRoot":"","sources":["../../src/api/builtin-views.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,EAAE,eAAe,EAoN1C,CAAC"}
|
package/api/builtin-views.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export const BUILTIN_VIEWS = [
|
|
10
10
|
{
|
|
11
11
|
id: "tutorial",
|
|
12
|
+
viewKind: "system",
|
|
12
13
|
label: "Tutorial",
|
|
13
14
|
description: "Interactive guided tour — learn the chat, switching views, and Settings in 90 seconds",
|
|
14
15
|
icon: "GraduationCap",
|
|
@@ -22,6 +23,7 @@ export const BUILTIN_VIEWS = [
|
|
|
22
23
|
},
|
|
23
24
|
{
|
|
24
25
|
id: "help",
|
|
26
|
+
viewKind: "system",
|
|
25
27
|
label: "Help",
|
|
26
28
|
description: "Searchable FAQ and knowledge base — what Eliza is and how everything works",
|
|
27
29
|
icon: "LifeBuoy",
|
|
@@ -35,6 +37,7 @@ export const BUILTIN_VIEWS = [
|
|
|
35
37
|
},
|
|
36
38
|
{
|
|
37
39
|
id: "camera",
|
|
40
|
+
viewKind: "release",
|
|
38
41
|
label: "Camera",
|
|
39
42
|
description: "Live camera preview with photo capture and front/back switching",
|
|
40
43
|
icon: "Camera",
|
|
@@ -48,6 +51,7 @@ export const BUILTIN_VIEWS = [
|
|
|
48
51
|
},
|
|
49
52
|
{
|
|
50
53
|
id: "chat",
|
|
54
|
+
viewKind: "system",
|
|
51
55
|
label: "Chat",
|
|
52
56
|
description: "Conversations with your agent, inbound messages from every connector",
|
|
53
57
|
icon: "MessageSquare",
|
|
@@ -61,6 +65,7 @@ export const BUILTIN_VIEWS = [
|
|
|
61
65
|
},
|
|
62
66
|
{
|
|
63
67
|
id: "character",
|
|
68
|
+
viewKind: "system",
|
|
64
69
|
label: "Character",
|
|
65
70
|
description: "Agent identity, personality, style, and knowledge documents",
|
|
66
71
|
icon: "UserRound",
|
|
@@ -71,8 +76,22 @@ export const BUILTIN_VIEWS = [
|
|
|
71
76
|
visibleInManager: true,
|
|
72
77
|
desktopTabEnabled: true,
|
|
73
78
|
},
|
|
79
|
+
{
|
|
80
|
+
id: "documents",
|
|
81
|
+
viewKind: "system",
|
|
82
|
+
label: "Knowledge",
|
|
83
|
+
description: "Agent knowledge documents, uploads, and retrieval sources",
|
|
84
|
+
icon: "FileText",
|
|
85
|
+
heroImagePath: "assets/view-heroes/character.png",
|
|
86
|
+
path: "/character/documents",
|
|
87
|
+
order: 51,
|
|
88
|
+
tags: ["documents", "notes", "knowledge", "files", "uploads", "retrieval"],
|
|
89
|
+
visibleInManager: true,
|
|
90
|
+
desktopTabEnabled: true,
|
|
91
|
+
},
|
|
74
92
|
{
|
|
75
93
|
id: "automations",
|
|
94
|
+
viewKind: "release",
|
|
76
95
|
label: "Automations",
|
|
77
96
|
description: "Scheduled tasks and recurring workflows",
|
|
78
97
|
icon: "Clock3",
|
|
@@ -84,6 +103,7 @@ export const BUILTIN_VIEWS = [
|
|
|
84
103
|
},
|
|
85
104
|
{
|
|
86
105
|
id: "plugins-page",
|
|
106
|
+
viewKind: "release",
|
|
87
107
|
label: "Plugins",
|
|
88
108
|
description: "Manage installed plugins, configure credentials",
|
|
89
109
|
icon: "Puzzle",
|
|
@@ -103,6 +123,8 @@ export const BUILTIN_VIEWS = [
|
|
|
103
123
|
},
|
|
104
124
|
{
|
|
105
125
|
id: "trajectories",
|
|
126
|
+
viewKind: "developer",
|
|
127
|
+
developerOnly: true,
|
|
106
128
|
label: "Trajectories",
|
|
107
129
|
description: "Agent trajectory logs and training data",
|
|
108
130
|
icon: "GitBranch",
|
|
@@ -110,11 +132,11 @@ export const BUILTIN_VIEWS = [
|
|
|
110
132
|
path: "/apps/trajectories",
|
|
111
133
|
order: 70,
|
|
112
134
|
tags: ["training", "logs", "trajectories"],
|
|
113
|
-
developerOnly: true,
|
|
114
135
|
visibleInManager: true,
|
|
115
136
|
},
|
|
116
137
|
{
|
|
117
138
|
id: "transcripts",
|
|
139
|
+
viewKind: "release",
|
|
118
140
|
label: "Transcripts",
|
|
119
141
|
description: "Recorded voice transcripts — play, scrub, and read with word sync",
|
|
120
142
|
icon: "AudioLines",
|
|
@@ -126,6 +148,8 @@ export const BUILTIN_VIEWS = [
|
|
|
126
148
|
},
|
|
127
149
|
{
|
|
128
150
|
id: "memories",
|
|
151
|
+
viewKind: "developer",
|
|
152
|
+
developerOnly: true,
|
|
129
153
|
label: "Memories",
|
|
130
154
|
description: "Agent memory viewer and management",
|
|
131
155
|
icon: "Brain",
|
|
@@ -133,11 +157,12 @@ export const BUILTIN_VIEWS = [
|
|
|
133
157
|
path: "/apps/memories",
|
|
134
158
|
order: 72,
|
|
135
159
|
tags: ["memory", "knowledge"],
|
|
136
|
-
developerOnly: true,
|
|
137
160
|
visibleInManager: true,
|
|
138
161
|
},
|
|
139
162
|
{
|
|
140
163
|
id: "database",
|
|
164
|
+
viewKind: "developer",
|
|
165
|
+
developerOnly: true,
|
|
141
166
|
label: "Database",
|
|
142
167
|
description: "Raw database viewer and query interface",
|
|
143
168
|
icon: "Database",
|
|
@@ -145,11 +170,12 @@ export const BUILTIN_VIEWS = [
|
|
|
145
170
|
path: "/apps/database",
|
|
146
171
|
order: 80,
|
|
147
172
|
tags: ["database", "data", "debug"],
|
|
148
|
-
developerOnly: true,
|
|
149
173
|
visibleInManager: true,
|
|
150
174
|
},
|
|
151
175
|
{
|
|
152
176
|
id: "logs",
|
|
177
|
+
viewKind: "developer",
|
|
178
|
+
developerOnly: true,
|
|
153
179
|
label: "Logs",
|
|
154
180
|
description: "Runtime logs and agent debug output",
|
|
155
181
|
icon: "FileText",
|
|
@@ -157,11 +183,11 @@ export const BUILTIN_VIEWS = [
|
|
|
157
183
|
path: "/apps/logs",
|
|
158
184
|
order: 81,
|
|
159
185
|
tags: ["logs", "debug", "runtime"],
|
|
160
|
-
developerOnly: true,
|
|
161
186
|
visibleInManager: true,
|
|
162
187
|
},
|
|
163
188
|
{
|
|
164
189
|
id: "settings",
|
|
190
|
+
viewKind: "system",
|
|
165
191
|
label: "Settings",
|
|
166
192
|
description: "Configuration, plugins, credentials, and preferences",
|
|
167
193
|
icon: "Settings",
|
|
@@ -172,4 +198,18 @@ export const BUILTIN_VIEWS = [
|
|
|
172
198
|
visibleInManager: true,
|
|
173
199
|
desktopTabEnabled: true,
|
|
174
200
|
},
|
|
201
|
+
{
|
|
202
|
+
id: "background",
|
|
203
|
+
viewKind: "system",
|
|
204
|
+
label: "Background",
|
|
205
|
+
description: "Set the app background — pick a shader color, upload an image, or generate one",
|
|
206
|
+
icon: "Image",
|
|
207
|
+
heroImagePath: "assets/view-heroes/background.png",
|
|
208
|
+
path: "/background",
|
|
209
|
+
order: 92,
|
|
210
|
+
tags: ["background", "wallpaper", "color", "theme", "appearance", "image"],
|
|
211
|
+
visibleInManager: true,
|
|
212
|
+
desktopTabEnabled: true,
|
|
213
|
+
platforms: ["web", "desktop", "ios", "android"],
|
|
214
|
+
},
|
|
175
215
|
];
|
|
@@ -16,7 +16,7 @@ interface AgentConfigLike {
|
|
|
16
16
|
messageExamples?: unknown;
|
|
17
17
|
postExamples?: string[];
|
|
18
18
|
}
|
|
19
|
-
import type { AutonomousConfigLike } from "../types/config-like.
|
|
19
|
+
import type { AutonomousConfigLike } from "../types/config-like.js";
|
|
20
20
|
export interface CharacterAutonomousConfigLike extends AutonomousConfigLike {
|
|
21
21
|
agents?: {
|
|
22
22
|
list?: AgentConfigLike[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-augmentation.d.ts","sourceRoot":"","sources":["../../src/api/chat-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,YAAY,EAEZ,mBAAmB,EAEpB,MAAM,eAAe,CAAC;AA+BvB,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,iBAAiB,CAAC,EAAE,MAAM,GACzB,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAexC;AAgBD,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA8ED,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"chat-augmentation.d.ts","sourceRoot":"","sources":["../../src/api/chat-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,YAAY,EAEZ,mBAAmB,EAEpB,MAAM,eAAe,CAAC;AA+BvB,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,iBAAiB,CAAC,EAAE,MAAM,GACzB,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAexC;AAgBD,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA8ED,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC/C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAqTjD"}
|
package/api/chat-augmentation.js
CHANGED
|
@@ -120,6 +120,23 @@ export async function maybeAugmentChatMessageWithDocuments(runtime, message, opt
|
|
|
120
120
|
const documents = await getDocumentsService(runtime);
|
|
121
121
|
if (!documents.service)
|
|
122
122
|
return message;
|
|
123
|
+
// Skip the document search entirely when the agent has no searchable corpus.
|
|
124
|
+
// `searchDocuments` embeds the user query, then searches `document_fragments`;
|
|
125
|
+
// most cloud agents run with an empty corpus, so that embed round-trip costs
|
|
126
|
+
// ~1.5s/turn (the dominant chat-latency tax) for guaranteed-zero matches — and
|
|
127
|
+
// the LLM query-recovery fallback is already gated on having documents. A cheap
|
|
128
|
+
// fragment count avoids the wasted embed. On a count error we fall through to
|
|
129
|
+
// the normal path rather than skip augmentation.
|
|
130
|
+
try {
|
|
131
|
+
const fragmentCount = await documents.service.countMemories({
|
|
132
|
+
tableName: "document_fragments",
|
|
133
|
+
});
|
|
134
|
+
if (fragmentCount === 0)
|
|
135
|
+
return message;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Count failed — do not skip; let the normal search path run.
|
|
139
|
+
}
|
|
123
140
|
const agentId = runtime.agentId;
|
|
124
141
|
const roomId = typeof message.roomId === "string" && message.roomId.trim().length > 0
|
|
125
142
|
? message.roomId
|
package/api/chat-routes.d.ts
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
import type http from "node:http";
|
|
14
14
|
import { type AgentRuntime, ChannelType, type Content, createMessageMemory, type RouteRequestContext, type UUID } from "@elizaos/core";
|
|
15
15
|
import type { LogEntry, ReadJsonBodyOptions } from "@elizaos/shared";
|
|
16
|
-
import type { ElizaConfig } from "../config/config.
|
|
17
|
-
import type { ChatImageAttachment } from "./server-types.
|
|
16
|
+
import type { ElizaConfig } from "../config/config.js";
|
|
17
|
+
import type { ChatImageAttachment } from "./server-types.js";
|
|
18
18
|
export type { ChatImageAttachment, LogEntry };
|
|
19
19
|
type LocalInferenceChatMetadata = Record<string, unknown>;
|
|
20
20
|
type LocalInferenceCommandIntent = "cancel" | "download" | "redownload" | "resume" | "retry" | "status" | "switch_smaller" | "use_cloud" | "use_local";
|
|
@@ -71,6 +71,14 @@ export interface ChatActionResultSummary {
|
|
|
71
71
|
export interface ChatGenerateOptions {
|
|
72
72
|
onChunk?: (chunk: string) => void;
|
|
73
73
|
onSnapshot?: (text: string) => void;
|
|
74
|
+
/**
|
|
75
|
+
* In-flight phase changes for the rich status indicator. Emitted additively
|
|
76
|
+
* alongside `onChunk`/`onSnapshot` — `thinking` before the first visible
|
|
77
|
+
* token, then `streaming` (LLM tokens) or `running_action` (an action handler
|
|
78
|
+
* is producing the reply, carrying `actionName`). Never required for the reply
|
|
79
|
+
* itself; a caller that omits it loses only the status surface.
|
|
80
|
+
*/
|
|
81
|
+
onStatus?: (status: ChatTurnStatus) => void;
|
|
74
82
|
isAborted?: () => boolean;
|
|
75
83
|
abortSignal?: AbortSignal;
|
|
76
84
|
resolveNoResponseText?: () => string;
|
|
@@ -96,6 +104,25 @@ export declare function normalizeChatResponseText(text: string, logBuffer: LogEn
|
|
|
96
104
|
export declare function initSse(res: http.ServerResponse): void;
|
|
97
105
|
export declare function writeSse(res: http.ServerResponse, payload: Record<string, unknown>): void;
|
|
98
106
|
export declare function writeChatTokenSse(res: http.ServerResponse, text: string, fullText: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* In-flight assistant-turn status, surfaced to the UI as an additive SSE
|
|
109
|
+
* `{ type: "status", ... }` event so the chat can show what the agent is *doing*
|
|
110
|
+
* rather than just breathing dots. The `token` / `done` / `error` contract is
|
|
111
|
+
* unchanged — a client that ignores `status` events behaves exactly as before.
|
|
112
|
+
*
|
|
113
|
+
* The canonical (and only consumer-facing) definition lives in
|
|
114
|
+
* `@elizaos/ui` `api/client-types-chat.ts` (`ChatTurnStatus`). It is re-declared
|
|
115
|
+
* here — not imported — because the server must not depend on the React UI
|
|
116
|
+
* package; this mirrors the existing `ChatFailureKind` arrangement. The two
|
|
117
|
+
* declarations are kept structurally identical by the SSE-status unit test.
|
|
118
|
+
*/
|
|
119
|
+
export interface ChatTurnStatus {
|
|
120
|
+
kind: "thinking" | "streaming" | "running_action" | "running_tool" | "evaluating" | "waking" | "speaking";
|
|
121
|
+
label?: string;
|
|
122
|
+
actionName?: string;
|
|
123
|
+
toolName?: string;
|
|
124
|
+
}
|
|
125
|
+
export declare function writeChatStatusSse(res: http.ServerResponse, status: ChatTurnStatus): void;
|
|
99
126
|
export declare function writeSseData(res: http.ServerResponse, data: string, event?: string): void;
|
|
100
127
|
export declare function writeSseJson(res: http.ServerResponse, payload: unknown, event?: string): void;
|
|
101
128
|
export declare function persistConversationMemory(runtime: AgentRuntime, memory: ReturnType<typeof createMessageMemory>): Promise<void>;
|
package/api/chat-routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-routes.d.ts","sourceRoot":"","sources":["../../src/api/chat-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAEL,KAAK,YAAY,EACjB,WAAW,EACX,KAAK,OAAO,EACZ,mBAAmB,EAInB,KAAK,mBAAmB,EAGxB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA+CvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC;AAI9C,KAAK,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1D,KAAK,2BAA2B,GAC5B,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,gBAAgB,GAChB,WAAW,GACX,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-routes.d.ts","sourceRoot":"","sources":["../../src/api/chat-routes.ts"],"names":[],"mappings":"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"}
|