@agent-native/core 0.7.14 → 0.7.16
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/README.md +56 -6
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +149 -24
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +180 -51
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/task-store.d.ts +10 -1
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +36 -2
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/action.d.ts +16 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +11 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/default-model.d.ts +21 -0
- package/dist/agent/default-model.d.ts.map +1 -0
- package/dist/agent/default-model.js +21 -0
- package/dist/agent/default-model.js.map +1 -0
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +7 -4
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +10 -4
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +4 -1
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +27 -7
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +101 -20
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/production-agent.d.ts +32 -7
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +230 -70
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +0 -3
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/types.d.ts +0 -4
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/handlers.js +10 -6
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts +1 -1
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +12 -8
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +19 -10
- package/dist/application-state/store.js.map +1 -1
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +4 -1
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/create.d.ts +3 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +106 -16
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +97 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates-meta.d.ts +4 -0
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +56 -12
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts +2 -0
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +5 -4
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +5 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +64 -25
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts.map +1 -1
- package/dist/client/AgentTaskCard.js +3 -2
- package/dist/client/AgentTaskCard.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +0 -6
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +98 -100
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
- package/dist/client/ConnectBuilderCard.js +2 -1
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/DefaultSpinner.d.ts +1 -1
- package/dist/client/DefaultSpinner.d.ts.map +1 -1
- package/dist/client/DefaultSpinner.js +2 -9
- package/dist/client/DefaultSpinner.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +24 -22
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -3
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +6 -4
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +70 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/api-path.d.ts +5 -0
- package/dist/client/api-path.d.ts.map +1 -0
- package/dist/client/api-path.js +48 -0
- package/dist/client/api-path.js.map +1 -0
- package/dist/client/components/ApiKeySettings.d.ts.map +1 -1
- package/dist/client/components/ApiKeySettings.js +3 -2
- package/dist/client/components/ApiKeySettings.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +3 -2
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +17 -9
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/draft-key.d.ts +2 -0
- package/dist/client/composer/draft-key.d.ts.map +1 -0
- package/dist/client/composer/draft-key.js +8 -0
- package/dist/client/composer/draft-key.js.map +1 -0
- package/dist/client/composer/use-file-search.d.ts.map +1 -1
- package/dist/client/composer/use-file-search.js +2 -1
- package/dist/client/composer/use-file-search.js.map +1 -1
- package/dist/client/composer/use-mention-search.d.ts.map +1 -1
- package/dist/client/composer/use-mention-search.js +2 -1
- package/dist/client/composer/use-mention-search.js.map +1 -1
- package/dist/client/composer/use-skills.d.ts.map +1 -1
- package/dist/client/composer/use-skills.js +2 -1
- package/dist/client/composer/use-skills.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +16 -8
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/dev-mode.d.ts +14 -0
- package/dist/client/dev-mode.d.ts.map +1 -0
- package/dist/client/dev-mode.js +14 -0
- package/dist/client/dev-mode.js.map +1 -0
- package/dist/client/dev-overlay/DevOverlay.d.ts +26 -0
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -0
- package/dist/client/dev-overlay/DevOverlay.js +315 -0
- package/dist/client/dev-overlay/DevOverlay.js.map +1 -0
- package/dist/client/dev-overlay/builtins.d.ts +6 -0
- package/dist/client/dev-overlay/builtins.d.ts.map +1 -0
- package/dist/client/dev-overlay/builtins.js +35 -0
- package/dist/client/dev-overlay/builtins.js.map +1 -0
- package/dist/client/dev-overlay/index.d.ts +6 -0
- package/dist/client/dev-overlay/index.d.ts.map +1 -0
- package/dist/client/dev-overlay/index.js +5 -0
- package/dist/client/dev-overlay/index.js.map +1 -0
- package/dist/client/dev-overlay/registry.d.ts +13 -0
- package/dist/client/dev-overlay/registry.d.ts.map +1 -0
- package/dist/client/dev-overlay/registry.js +63 -0
- package/dist/client/dev-overlay/registry.js.map +1 -0
- package/dist/client/dev-overlay/types.d.ts +56 -0
- package/dist/client/dev-overlay/types.d.ts.map +1 -0
- package/dist/client/dev-overlay/types.js +9 -0
- package/dist/client/dev-overlay/types.js.map +1 -0
- package/dist/client/dev-overlay/use-dev-option.d.ts +12 -0
- package/dist/client/dev-overlay/use-dev-option.d.ts.map +1 -0
- package/dist/client/dev-overlay/use-dev-option.js +73 -0
- package/dist/client/dev-overlay/use-dev-option.js.map +1 -0
- package/dist/client/dev-overlay/use-dev-overlay-shortcut.d.ts +6 -0
- package/dist/client/dev-overlay/use-dev-overlay-shortcut.d.ts.map +1 -0
- package/dist/client/dev-overlay/use-dev-overlay-shortcut.js +29 -0
- package/dist/client/dev-overlay/use-dev-overlay-shortcut.js.map +1 -0
- package/dist/client/frame-protocol.d.ts +61 -10
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame.d.ts +1 -0
- package/dist/client/frame.d.ts.map +1 -1
- package/dist/client/frame.js +37 -16
- package/dist/client/frame.js.map +1 -1
- package/dist/client/index.d.ts +5 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +3 -2
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +3 -2
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/integrations/useIntegrationStatus.d.ts.map +1 -1
- package/dist/client/integrations/useIntegrationStatus.js +2 -1
- package/dist/client/integrations/useIntegrationStatus.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
- package/dist/client/notifications/NotificationsBell.js +26 -8
- package/dist/client/notifications/NotificationsBell.js.map +1 -1
- package/dist/client/observability/ThumbsFeedback.d.ts.map +1 -1
- package/dist/client/observability/ThumbsFeedback.js +2 -1
- package/dist/client/observability/ThumbsFeedback.js.map +1 -1
- package/dist/client/observability/useObservability.d.ts.map +1 -1
- package/dist/client/observability/useObservability.js +2 -1
- package/dist/client/observability/useObservability.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.d.ts +0 -7
- package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +20 -10
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/onboarding/index.d.ts +1 -0
- package/dist/client/onboarding/index.d.ts.map +1 -1
- package/dist/client/onboarding/index.js +1 -0
- package/dist/client/onboarding/index.js.map +1 -1
- package/dist/client/onboarding/use-onboarding.d.ts +1 -7
- package/dist/client/onboarding/use-onboarding.d.ts.map +1 -1
- package/dist/client/onboarding/use-onboarding.js +27 -13
- package/dist/client/onboarding/use-onboarding.js.map +1 -1
- package/dist/client/onboarding/use-preview-mode.d.ts +10 -0
- package/dist/client/onboarding/use-preview-mode.d.ts.map +1 -0
- package/dist/client/onboarding/use-preview-mode.js +35 -0
- package/dist/client/onboarding/use-preview-mode.js.map +1 -0
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +2 -1
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +7 -5
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +2 -1
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +2 -1
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/McpServerDetail.d.ts +0 -8
- package/dist/client/resources/McpServerDetail.d.ts.map +1 -1
- package/dist/client/resources/McpServerDetail.js +6 -1
- package/dist/client/resources/McpServerDetail.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +2 -1
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +2 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
- package/dist/client/resources/use-mcp-servers.js +7 -2
- package/dist/client/resources/use-mcp-servers.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +9 -7
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/settings/AgentsSection.d.ts.map +1 -1
- package/dist/client/settings/AgentsSection.js +7 -5
- package/dist/client/settings/AgentsSection.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +9 -5
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.js +2 -1
- package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +12 -4
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +15 -23
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/UsageSection.d.ts.map +1 -1
- package/dist/client/settings/UsageSection.js +2 -1
- package/dist/client/settings/UsageSection.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts +2 -4
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +66 -23
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +9 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +31 -3
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +7 -2
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +4 -3
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +1 -3
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +3 -24
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts +1 -0
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +14 -10
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/tools/EmbeddedTool.d.ts +20 -0
- package/dist/client/tools/EmbeddedTool.d.ts.map +1 -0
- package/dist/client/tools/EmbeddedTool.js +154 -0
- package/dist/client/tools/EmbeddedTool.js.map +1 -0
- package/dist/client/tools/ExtensionSlot.d.ts +27 -0
- package/dist/client/tools/ExtensionSlot.d.ts.map +1 -0
- package/dist/client/tools/ExtensionSlot.js +96 -0
- package/dist/client/tools/ExtensionSlot.js.map +1 -0
- package/dist/client/tools/ToolEditor.d.ts.map +1 -1
- package/dist/client/tools/ToolEditor.js +5 -4
- package/dist/client/tools/ToolEditor.js.map +1 -1
- package/dist/client/tools/ToolViewer.d.ts.map +1 -1
- package/dist/client/tools/ToolViewer.js +75 -44
- package/dist/client/tools/ToolViewer.js.map +1 -1
- package/dist/client/tools/ToolViewerPage.d.ts.map +1 -1
- package/dist/client/tools/ToolViewerPage.js +2 -1
- package/dist/client/tools/ToolViewerPage.js.map +1 -1
- package/dist/client/tools/ToolsListPage.d.ts.map +1 -1
- package/dist/client/tools/ToolsListPage.js +3 -2
- package/dist/client/tools/ToolsListPage.js.map +1 -1
- package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -1
- package/dist/client/tools/ToolsSidebarSection.js +4 -3
- package/dist/client/tools/ToolsSidebarSection.js.map +1 -1
- package/dist/client/tools/iframe-bridge.d.ts +38 -0
- package/dist/client/tools/iframe-bridge.d.ts.map +1 -0
- package/dist/client/tools/iframe-bridge.js +207 -0
- package/dist/client/tools/iframe-bridge.js.map +1 -0
- package/dist/client/tools/index.d.ts +2 -0
- package/dist/client/tools/index.d.ts.map +1 -1
- package/dist/client/tools/index.js +2 -0
- package/dist/client/tools/index.js.map +1 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +2 -1
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-chat.js +2 -2
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/use-avatar.d.ts.map +1 -1
- package/dist/client/use-avatar.js +3 -2
- package/dist/client/use-avatar.js.map +1 -1
- package/dist/client/use-builder-enabled.d.ts.map +1 -1
- package/dist/client/use-builder-enabled.js +2 -1
- package/dist/client/use-builder-enabled.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +2 -1
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +3 -2
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-dev-mode.d.ts.map +1 -1
- package/dist/client/use-dev-mode.js +2 -1
- package/dist/client/use-dev-mode.js.map +1 -1
- package/dist/client/use-send-to-agent-chat.d.ts.map +1 -1
- package/dist/client/use-send-to-agent-chat.js +5 -3
- package/dist/client/use-send-to-agent-chat.js.map +1 -1
- package/dist/client/use-session.d.ts.map +1 -1
- package/dist/client/use-session.js +2 -1
- package/dist/client/use-session.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +4 -3
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +3 -2
- package/dist/collab/client.js.map +1 -1
- package/dist/credentials/index.d.ts +27 -10
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +61 -19
- package/dist/credentials/index.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +10 -1
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrations.d.ts +13 -5
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +9 -2
- package/dist/db/migrations.js.map +1 -1
- package/dist/deploy/build.d.ts +12 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +195 -23
- package/dist/deploy/build.js.map +1 -1
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +25 -1
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/email.d.ts.map +1 -1
- package/dist/integrations/adapters/email.js +152 -32
- package/dist/integrations/adapters/email.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts +13 -0
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +302 -32
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +37 -2
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +91 -12
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +5 -2
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/internal-token.d.ts.map +1 -1
- package/dist/integrations/internal-token.js +17 -1
- package/dist/integrations/internal-token.js.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +23 -9
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/pending-tasks-store.d.ts +16 -0
- package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-store.js +58 -5
- package/dist/integrations/pending-tasks-store.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +198 -15
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/types.d.ts +33 -2
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +6 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +141 -61
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/cron.d.ts.map +1 -1
- package/dist/jobs/cron.js +12 -4
- package/dist/jobs/cron.js.map +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +141 -16
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +94 -3
- package/dist/jobs/tools.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +128 -62
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-client/hub-routes.d.ts +14 -0
- package/dist/mcp-client/hub-routes.d.ts.map +1 -1
- package/dist/mcp-client/hub-routes.js +42 -2
- package/dist/mcp-client/hub-routes.js.map +1 -1
- package/dist/mcp-client/index.d.ts +1 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +1 -1
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/manager.d.ts.map +1 -1
- package/dist/mcp-client/manager.js +28 -3
- package/dist/mcp-client/manager.js.map +1 -1
- package/dist/mcp-client/remote-store.d.ts +49 -1
- package/dist/mcp-client/remote-store.d.ts.map +1 -1
- package/dist/mcp-client/remote-store.js +253 -6
- package/dist/mcp-client/remote-store.js.map +1 -1
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +11 -9
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/mcp-client/visibility.d.ts +7 -3
- package/dist/mcp-client/visibility.d.ts.map +1 -1
- package/dist/mcp-client/visibility.js +16 -7
- package/dist/mcp-client/visibility.js.map +1 -1
- package/dist/notifications/actions.d.ts.map +1 -1
- package/dist/notifications/actions.js +7 -1
- package/dist/notifications/actions.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/notifications/routes.d.ts.map +1 -1
- package/dist/notifications/routes.js +20 -3
- package/dist/notifications/routes.js.map +1 -1
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/notifications/store.js +6 -1
- package/dist/notifications/store.js.map +1 -1
- package/dist/oauth-tokens/store.d.ts +43 -2
- package/dist/oauth-tokens/store.d.ts.map +1 -1
- package/dist/oauth-tokens/store.js +83 -14
- package/dist/oauth-tokens/store.js.map +1 -1
- package/dist/observability/cleanup-job.d.ts +38 -0
- package/dist/observability/cleanup-job.d.ts.map +1 -0
- package/dist/observability/cleanup-job.js +107 -0
- package/dist/observability/cleanup-job.js.map +1 -0
- package/dist/observability/experiments.js +5 -5
- package/dist/observability/experiments.js.map +1 -1
- package/dist/observability/index.d.ts +2 -1
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +2 -1
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/plugin.d.ts.map +1 -1
- package/dist/observability/plugin.js +11 -0
- package/dist/observability/plugin.js.map +1 -1
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +37 -8
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/store.d.ts +16 -0
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +54 -3
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +5 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +44 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/types.d.ts +7 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +1 -2
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/onboarding/plugin.d.ts.map +1 -1
- package/dist/onboarding/plugin.js +63 -32
- package/dist/onboarding/plugin.js.map +1 -1
- package/dist/onboarding/types.d.ts +6 -1
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +2 -1
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +10 -1
- package/dist/progress/actions.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/progress/routes.d.ts.map +1 -1
- package/dist/progress/routes.js +20 -3
- package/dist/progress/routes.js.map +1 -1
- package/dist/progress/store.d.ts.map +1 -1
- package/dist/progress/store.js +6 -1
- package/dist/progress/store.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +35 -7
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +15 -3
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +12 -4
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/call-agent.d.ts +1 -0
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +78 -40
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +3 -2
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/scripts/db/exec.d.ts +1 -1
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +171 -5
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/migrate-user-api-keys.d.ts.map +1 -1
- package/dist/scripts/db/migrate-user-api-keys.js +10 -0
- package/dist/scripts/db/migrate-user-api-keys.js.map +1 -1
- package/dist/scripts/db/query.d.ts +1 -1
- package/dist/scripts/db/query.d.ts.map +1 -1
- package/dist/scripts/db/query.js +104 -4
- package/dist/scripts/db/query.js.map +1 -1
- package/dist/scripts/db/scoping.d.ts.map +1 -1
- package/dist/scripts/db/scoping.js +35 -10
- package/dist/scripts/db/scoping.js.map +1 -1
- package/dist/scripts/dev/shell.d.ts.map +1 -1
- package/dist/scripts/dev/shell.js +3 -1
- package/dist/scripts/dev/shell.js.map +1 -1
- package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
- package/dist/scripts/resources/delete-memory.js +2 -1
- package/dist/scripts/resources/delete-memory.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +2 -1
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +2 -1
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
- package/dist/scripts/resources/migrate-learnings.js +2 -1
- package/dist/scripts/resources/migrate-learnings.js.map +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +2 -1
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/save-memory.d.ts.map +1 -1
- package/dist/scripts/resources/save-memory.js +2 -1
- package/dist/scripts/resources/save-memory.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +2 -1
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/secrets/onboarding.d.ts.map +1 -1
- package/dist/secrets/onboarding.js +24 -16
- package/dist/secrets/onboarding.js.map +1 -1
- package/dist/secrets/routes.d.ts.map +1 -1
- package/dist/secrets/routes.js +139 -37
- package/dist/secrets/routes.js.map +1 -1
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +23 -12
- package/dist/secrets/storage.js.map +1 -1
- package/dist/secrets/substitution.d.ts +24 -2
- package/dist/secrets/substitution.d.ts.map +1 -1
- package/dist/secrets/substitution.js +44 -6
- package/dist/secrets/substitution.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +19 -51
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +61 -15
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +449 -338
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts +8 -0
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +39 -12
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +4 -1
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/analytics.d.ts +0 -1
- package/dist/server/analytics.d.ts.map +1 -1
- package/dist/server/analytics.js +0 -1
- package/dist/server/analytics.js.map +1 -1
- package/dist/server/app-base-path.d.ts +4 -0
- package/dist/server/app-base-path.d.ts.map +1 -0
- package/dist/server/app-base-path.js +33 -0
- package/dist/server/app-base-path.js.map +1 -0
- package/dist/server/app-url.d.ts +4 -1
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +16 -1
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts +15 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +400 -68
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +1 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +67 -15
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts +15 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +90 -4
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/cli-capture.d.ts +31 -0
- package/dist/server/cli-capture.d.ts.map +1 -0
- package/dist/server/cli-capture.js +120 -0
- package/dist/server/cli-capture.js.map +1 -0
- package/dist/server/collab-plugin.d.ts +12 -0
- package/dist/server/collab-plugin.d.ts.map +1 -1
- package/dist/server/collab-plugin.js +63 -21
- package/dist/server/collab-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +467 -130
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.d.ts +2 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +82 -11
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/credential-provider.d.ts +11 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +51 -2
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/csrf.d.ts +58 -0
- package/dist/server/csrf.d.ts.map +1 -0
- package/dist/server/csrf.js +165 -0
- package/dist/server/csrf.js.map +1 -0
- package/dist/server/framework-request-handler.d.ts +20 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +115 -34
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +10 -2
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts +84 -2
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +248 -45
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +5 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/oauth-helpers.d.ts +8 -3
- package/dist/server/oauth-helpers.d.ts.map +1 -1
- package/dist/server/oauth-helpers.js +12 -8
- package/dist/server/oauth-helpers.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +37 -9
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll.d.ts +33 -0
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +43 -2
- package/dist/server/poll.js.map +1 -1
- package/dist/server/request-context.d.ts +102 -3
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +100 -7
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/security-headers.d.ts +51 -0
- package/dist/server/security-headers.d.ts.map +1 -0
- package/dist/server/security-headers.js +90 -0
- package/dist/server/security-headers.js.map +1 -0
- package/dist/server/short-lived-token.d.ts +62 -0
- package/dist/server/short-lived-token.d.ts.map +1 -0
- package/dist/server/short-lived-token.js +118 -0
- package/dist/server/short-lived-token.js.map +1 -0
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +96 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +307 -56
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/server/voice-providers-status.d.ts +12 -0
- package/dist/server/voice-providers-status.d.ts.map +1 -0
- package/dist/server/voice-providers-status.js +71 -0
- package/dist/server/voice-providers-status.js.map +1 -0
- package/dist/shared/agent-chat.js +1 -1
- package/dist/shared/agent-chat.js.map +1 -1
- package/dist/shared/agent-env.js +1 -1
- package/dist/shared/agent-env.js.map +1 -1
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +16 -13
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +3 -0
- package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts +1 -0
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.js +50 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
- package/dist/sharing/actions/unshare-resource.js +2 -0
- package/dist/sharing/actions/unshare-resource.js.map +1 -1
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +54 -0
- package/dist/templates/default/app/root.tsx +1 -1
- package/dist/templates/default/app/routes/_index.tsx +6 -1
- package/dist/templates/default/package.json +1 -1
- package/dist/templates/default/public/favicon.svg +13 -0
- package/dist/templates/default/public/icon-180.svg +12 -3
- package/dist/templates/default/public/icon-192.svg +12 -3
- package/dist/templates/default/public/icon-512.svg +12 -3
- package/dist/templates/workspace-core/package.json +23 -5
- package/dist/templates/workspace-core/src/credentials.ts +32 -5
- package/dist/templates/workspace-core/tsconfig.json +4 -1
- package/dist/terminal/pty-server.d.ts.map +1 -1
- package/dist/terminal/pty-server.js +8 -2
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/terminal/terminal-plugin.js +3 -3
- package/dist/terminal/terminal-plugin.js.map +1 -1
- package/dist/tools/actions.d.ts.map +1 -1
- package/dist/tools/actions.js +130 -0
- package/dist/tools/actions.js.map +1 -1
- package/dist/tools/fetch-tool.d.ts +1 -0
- package/dist/tools/fetch-tool.d.ts.map +1 -1
- package/dist/tools/fetch-tool.js +38 -16
- package/dist/tools/fetch-tool.js.map +1 -1
- package/dist/tools/html-shell.d.ts +44 -1
- package/dist/tools/html-shell.d.ts.map +1 -1
- package/dist/tools/html-shell.js +119 -4
- package/dist/tools/html-shell.js.map +1 -1
- package/dist/tools/proxy-security.d.ts +12 -0
- package/dist/tools/proxy-security.d.ts.map +1 -0
- package/dist/tools/proxy-security.js +158 -0
- package/dist/tools/proxy-security.js.map +1 -0
- package/dist/tools/routes.d.ts.map +1 -1
- package/dist/tools/routes.js +156 -105
- package/dist/tools/routes.js.map +1 -1
- package/dist/tools/schema.d.ts +89 -0
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +34 -0
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/slots/routes.d.ts +15 -0
- package/dist/tools/slots/routes.d.ts.map +1 -0
- package/dist/tools/slots/routes.js +94 -0
- package/dist/tools/slots/routes.js.map +1 -0
- package/dist/tools/slots/schema.d.ts +303 -0
- package/dist/tools/slots/schema.d.ts.map +1 -0
- package/dist/tools/slots/schema.js +76 -0
- package/dist/tools/slots/schema.js.map +1 -0
- package/dist/tools/slots/store.d.ts +66 -0
- package/dist/tools/slots/store.d.ts.map +1 -0
- package/dist/tools/slots/store.js +227 -0
- package/dist/tools/slots/store.js.map +1 -0
- package/dist/tools/store.d.ts.map +1 -1
- package/dist/tools/store.js +35 -37
- package/dist/tools/store.js.map +1 -1
- package/dist/tools/url-safety.d.ts +24 -0
- package/dist/tools/url-safety.d.ts.map +1 -0
- package/dist/tools/url-safety.js +224 -0
- package/dist/tools/url-safety.js.map +1 -0
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +28 -11
- package/dist/tracking/providers.js.map +1 -1
- package/dist/tracking/registry.d.ts.map +1 -1
- package/dist/tracking/registry.js +7 -3
- package/dist/tracking/registry.js.map +1 -1
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +11 -6
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/condition-evaluator.d.ts +8 -0
- package/dist/triggers/condition-evaluator.d.ts.map +1 -1
- package/dist/triggers/condition-evaluator.js +39 -4
- package/dist/triggers/condition-evaluator.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +67 -4
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/usage/store.d.ts +0 -11
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +0 -11
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +8 -5
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/dist/vite/client.d.ts +2 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +216 -4
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.md +32 -0
- package/docs/content/authentication.md +39 -12
- package/docs/content/cloneable-saas.md +13 -15
- package/docs/content/deployment.md +84 -9
- package/docs/content/drop-in-agent.md +2 -2
- package/docs/content/faq.md +4 -1
- package/docs/content/getting-started.md +2 -0
- package/docs/content/messaging.md +195 -155
- package/docs/content/onboarding.md +82 -12
- package/docs/content/security.md +59 -8
- package/docs/content/template-analytics.md +65 -59
- package/docs/content/template-clips.md +7 -9
- package/docs/content/template-design.md +55 -0
- package/docs/content/template-dispatch.md +13 -0
- package/docs/content/template-forms.md +7 -6
- package/docs/content/template-mail.md +78 -80
- package/package.json +4 -3
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +54 -0
- package/src/templates/default/app/root.tsx +1 -1
- package/src/templates/default/app/routes/_index.tsx +6 -1
- package/src/templates/default/package.json +1 -1
- package/src/templates/default/public/favicon.svg +13 -0
- package/src/templates/default/public/icon-180.svg +12 -3
- package/src/templates/default/public/icon-192.svg +12 -3
- package/src/templates/default/public/icon-512.svg +12 -3
- package/src/templates/workspace-core/package.json +23 -5
- package/src/templates/workspace-core/src/credentials.ts +32 -5
- package/src/templates/workspace-core/tsconfig.json +4 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EventHandler as H3EventHandler } from "h3";
|
|
2
|
-
import type { ActionTool, AgentChatEvent } from "./types.js";
|
|
3
|
-
import type { AgentEngine, EngineTool, EngineMessage } from "./engine/types.js";
|
|
2
|
+
import type { ActionTool, AgentChatAttachment, AgentChatEvent } from "./types.js";
|
|
3
|
+
import type { AgentEngine, EngineTool, EngineMessage, EngineContentPart } from "./engine/types.js";
|
|
4
4
|
import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
|
|
5
5
|
import { subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun } from "./run-manager.js";
|
|
6
6
|
import type { ActiveRun } from "./run-manager.js";
|
|
@@ -9,6 +9,12 @@ export { PROVIDER_TO_ENV };
|
|
|
9
9
|
* Look up a user's persisted API key for the given provider. Returns
|
|
10
10
|
* `undefined` for unauthenticated/local callers so the shared platform key
|
|
11
11
|
* is never keyed off `local@localhost` in multi-tenant deployments.
|
|
12
|
+
*
|
|
13
|
+
* Read order:
|
|
14
|
+
* 1. `app_secrets` — encrypted, scope=user, current source of truth.
|
|
15
|
+
* 2. Legacy `user-api-key:<provider>:<email>` settings row — pre-migration
|
|
16
|
+
* data that hasn't been backfilled yet. Surfaced for compat only;
|
|
17
|
+
* writes always go to app_secrets now.
|
|
12
18
|
*/
|
|
13
19
|
export declare function getOwnerApiKey(provider: string, ownerEmail: string | null | undefined): Promise<string | undefined>;
|
|
14
20
|
/**
|
|
@@ -18,7 +24,19 @@ export declare function getOwnerApiKey(provider: string, ownerEmail: string | nu
|
|
|
18
24
|
export declare function engineToProvider(engineName: string): string;
|
|
19
25
|
/**
|
|
20
26
|
* Resolve the active engine's provider and look up the user's API key for it.
|
|
21
|
-
*
|
|
27
|
+
*
|
|
28
|
+
* In multi-tenant deploys we deliberately refuse the deploy-level
|
|
29
|
+
* deploy-level fallback for authenticated users. Without that gate any
|
|
30
|
+
* signed-in user who hasn't configured their own provider key would silently
|
|
31
|
+
* inherit the deployment's key (uncapped billing on the owner's account,
|
|
32
|
+
* prompt logging tied to the deployment owner) — exactly the prior-incident
|
|
33
|
+
* pattern we hit on 2026-04-29.
|
|
34
|
+
*
|
|
35
|
+
* Single-tenant (local-dev, self-hosted SQLite) keeps the env fallback.
|
|
36
|
+
*
|
|
37
|
+
* Callers in `agent-chat-plugin.ts`, `triggers/dispatcher.ts`,
|
|
38
|
+
* `jobs/scheduler.ts`, and `integrations/plugin.ts` historically layer
|
|
39
|
+
* another deployment-key fallback after this must keep the same gate.
|
|
22
40
|
*/
|
|
23
41
|
export declare function getOwnerActiveApiKey(ownerEmail: string | null | undefined): Promise<string | undefined>;
|
|
24
42
|
/** @deprecated Use getOwnerApiKey("anthropic", ownerEmail) instead */
|
|
@@ -36,6 +54,13 @@ export interface ActionEntry {
|
|
|
36
54
|
/** If true, completion does NOT trigger a screen-refresh poll event.
|
|
37
55
|
* Set automatically by `defineAction` when `http.method === "GET"`. */
|
|
38
56
|
readOnly?: boolean;
|
|
57
|
+
/** Whether this action may be invoked from the tools-iframe bridge.
|
|
58
|
+
* **Default-allow opt-out**: only an explicit `false` returns 403.
|
|
59
|
+
* - `true` / `undefined` — allow.
|
|
60
|
+
* - `false` — explicit deny; the tools bridge returns 403.
|
|
61
|
+
* See `defineAction` (`packages/core/src/action.ts`) and audit H5 in
|
|
62
|
+
* `security-audit/05-tools-sandbox.md`. */
|
|
63
|
+
toolCallable?: boolean;
|
|
39
64
|
}
|
|
40
65
|
/** @deprecated Use `ActionEntry` instead */
|
|
41
66
|
export type ScriptEntry = ActionEntry;
|
|
@@ -69,10 +94,6 @@ export interface ProductionAgentOptions {
|
|
|
69
94
|
onEngineResolved?: (engine: AgentEngine, model: string) => void;
|
|
70
95
|
/** Resolve the owner email from the H3 event (for usage tracking) */
|
|
71
96
|
resolveOwnerEmail?: (event: any) => string | Promise<string>;
|
|
72
|
-
/** Enable per-user usage limit checking and token tracking */
|
|
73
|
-
trackUsage?: boolean;
|
|
74
|
-
/** Usage limit in cents (default: 100 = $1.00) */
|
|
75
|
-
usageLimitCents?: number;
|
|
76
97
|
/**
|
|
77
98
|
* Skip auto-injecting the workspace files/skills/agents inventory on the
|
|
78
99
|
* first message of a conversation. Useful for minimal/voice apps where
|
|
@@ -81,6 +102,10 @@ export interface ProductionAgentOptions {
|
|
|
81
102
|
*/
|
|
82
103
|
skipFilesContext?: boolean;
|
|
83
104
|
}
|
|
105
|
+
export declare function buildUserContentWithAttachments(opts: {
|
|
106
|
+
text: string;
|
|
107
|
+
attachments?: AgentChatAttachment[];
|
|
108
|
+
}): EngineContentPart[];
|
|
84
109
|
/** Accumulated token usage from an agent loop run */
|
|
85
110
|
export interface AgentLoopUsage {
|
|
86
111
|
inputTokens: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { defineEventHandler, setResponseHeader, setResponseStatus, getMethod, } from "h3";
|
|
2
|
+
import { DEV_MODE_USER_EMAIL } from "../server/auth.js";
|
|
3
|
+
import { isLocalDatabase } from "../db/client.js";
|
|
4
|
+
import { readDeployCredentialEnv } from "../server/credential-provider.js";
|
|
2
5
|
import { EngineError } from "./engine/types.js";
|
|
3
6
|
import { resolveEngine, registerBuiltinEngines, getStoredModelForEngine, } from "./engine/index.js";
|
|
4
7
|
import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
|
|
@@ -14,17 +17,36 @@ export { PROVIDER_TO_ENV };
|
|
|
14
17
|
* Look up a user's persisted API key for the given provider. Returns
|
|
15
18
|
* `undefined` for unauthenticated/local callers so the shared platform key
|
|
16
19
|
* is never keyed off `local@localhost` in multi-tenant deployments.
|
|
20
|
+
*
|
|
21
|
+
* Read order:
|
|
22
|
+
* 1. `app_secrets` — encrypted, scope=user, current source of truth.
|
|
23
|
+
* 2. Legacy `user-api-key:<provider>:<email>` settings row — pre-migration
|
|
24
|
+
* data that hasn't been backfilled yet. Surfaced for compat only;
|
|
25
|
+
* writes always go to app_secrets now.
|
|
17
26
|
*/
|
|
18
27
|
export async function getOwnerApiKey(provider, ownerEmail) {
|
|
19
|
-
if (!ownerEmail || ownerEmail ===
|
|
28
|
+
if (!ownerEmail || ownerEmail === DEV_MODE_USER_EMAIL)
|
|
20
29
|
return undefined;
|
|
30
|
+
const secretKey = PROVIDER_TO_ENV[provider] ?? `${provider.toUpperCase()}_API_KEY`;
|
|
31
|
+
try {
|
|
32
|
+
const { readAppSecret } = await import("../secrets/storage.js");
|
|
33
|
+
const fromSecrets = await readAppSecret({
|
|
34
|
+
key: secretKey,
|
|
35
|
+
scope: "user",
|
|
36
|
+
scopeId: ownerEmail,
|
|
37
|
+
});
|
|
38
|
+
if (fromSecrets?.value)
|
|
39
|
+
return fromSecrets.value;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// app_secrets table not ready — fall through to legacy lookup.
|
|
43
|
+
}
|
|
21
44
|
try {
|
|
22
45
|
const { getSetting } = await import("../settings/store.js");
|
|
23
46
|
const stored = await getSetting(`user-api-key:${provider}:${ownerEmail}`);
|
|
24
47
|
const key = stored && typeof stored.key === "string" ? stored.key.trim() : "";
|
|
25
48
|
if (key)
|
|
26
49
|
return key;
|
|
27
|
-
// Backward compat: check legacy Anthropic key format
|
|
28
50
|
if (provider === "anthropic") {
|
|
29
51
|
const legacy = await getSetting(`user-anthropic-api-key:${ownerEmail}`);
|
|
30
52
|
const legacyKey = legacy && typeof legacy.key === "string" ? legacy.key.trim() : "";
|
|
@@ -43,9 +65,42 @@ export async function getOwnerApiKey(provider, ownerEmail) {
|
|
|
43
65
|
export function engineToProvider(engineName) {
|
|
44
66
|
return engineName.startsWith("ai-sdk:") ? engineName.slice(7) : engineName;
|
|
45
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns true when this process is acting as a multi-tenant deployment —
|
|
70
|
+
* i.e. a hosted shared-DB environment where one user's identity must NOT be
|
|
71
|
+
* silently substituted with the deploy-level API key.
|
|
72
|
+
*
|
|
73
|
+
* Mirrors the gate in `resolveBuilderCredential` (server/credential-provider.ts).
|
|
74
|
+
*
|
|
75
|
+
* Heuristic:
|
|
76
|
+
* - `NODE_ENV === "production"`, AND
|
|
77
|
+
* - The DB is not a local file (i.e. it's Neon/Postgres/Turso/D1 — any
|
|
78
|
+
* backend that could be shared across multiple users).
|
|
79
|
+
*
|
|
80
|
+
* Self-hosted single-tenant deployments (a local sqlite file, or NODE_ENV
|
|
81
|
+
* unset/development) keep the env-var fallback so the original BYO-server
|
|
82
|
+
* UX continues to work without a per-user key.
|
|
83
|
+
*/
|
|
84
|
+
function isMultiTenantDeploy() {
|
|
85
|
+
if (process.env.NODE_ENV !== "production")
|
|
86
|
+
return false;
|
|
87
|
+
return !isLocalDatabase();
|
|
88
|
+
}
|
|
46
89
|
/**
|
|
47
90
|
* Resolve the active engine's provider and look up the user's API key for it.
|
|
48
|
-
*
|
|
91
|
+
*
|
|
92
|
+
* In multi-tenant deploys we deliberately refuse the deploy-level
|
|
93
|
+
* deploy-level fallback for authenticated users. Without that gate any
|
|
94
|
+
* signed-in user who hasn't configured their own provider key would silently
|
|
95
|
+
* inherit the deployment's key (uncapped billing on the owner's account,
|
|
96
|
+
* prompt logging tied to the deployment owner) — exactly the prior-incident
|
|
97
|
+
* pattern we hit on 2026-04-29.
|
|
98
|
+
*
|
|
99
|
+
* Single-tenant (local-dev, self-hosted SQLite) keeps the env fallback.
|
|
100
|
+
*
|
|
101
|
+
* Callers in `agent-chat-plugin.ts`, `triggers/dispatcher.ts`,
|
|
102
|
+
* `jobs/scheduler.ts`, and `integrations/plugin.ts` historically layer
|
|
103
|
+
* another deployment-key fallback after this must keep the same gate.
|
|
49
104
|
*/
|
|
50
105
|
export async function getOwnerActiveApiKey(ownerEmail) {
|
|
51
106
|
try {
|
|
@@ -56,8 +111,15 @@ export async function getOwnerActiveApiKey(ownerEmail) {
|
|
|
56
111
|
const userKey = await getOwnerApiKey(provider, ownerEmail);
|
|
57
112
|
if (userKey)
|
|
58
113
|
return userKey;
|
|
114
|
+
if (isMultiTenantDeploy()) {
|
|
115
|
+
// Multi-tenant: refuse the env fallback. A null user (unauthenticated /
|
|
116
|
+
// background context with no owner) gets undefined here too — there's
|
|
117
|
+
// no user to bill, and the call site must surface a "configure a key"
|
|
118
|
+
// error to the requester rather than silently using the deploy key.
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
59
121
|
const envVar = PROVIDER_TO_ENV[provider];
|
|
60
|
-
return envVar ?
|
|
122
|
+
return envVar ? readDeployCredentialEnv(envVar) : undefined;
|
|
61
123
|
}
|
|
62
124
|
catch {
|
|
63
125
|
return undefined;
|
|
@@ -74,6 +136,23 @@ function generateRunId() {
|
|
|
74
136
|
return `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
75
137
|
}
|
|
76
138
|
/** Check if an error is transient and should be retried */
|
|
139
|
+
function isContextTooLongError(err) {
|
|
140
|
+
if (!(err instanceof Error))
|
|
141
|
+
return false;
|
|
142
|
+
const msg = err.message.toLowerCase();
|
|
143
|
+
if (msg.includes("context_length_exceeded") ||
|
|
144
|
+
msg.includes("input_too_long") ||
|
|
145
|
+
msg.includes("too many tokens") ||
|
|
146
|
+
msg.includes("prompt is too long") ||
|
|
147
|
+
msg.includes("reduce the length"))
|
|
148
|
+
return true;
|
|
149
|
+
if (err instanceof EngineError) {
|
|
150
|
+
const code = (err.errorCode ?? "").toLowerCase();
|
|
151
|
+
if (code.includes("context_length") || code.includes("input_too_long"))
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
77
156
|
function isRetryableError(err) {
|
|
78
157
|
if (!(err instanceof Error))
|
|
79
158
|
return false;
|
|
@@ -97,6 +176,59 @@ function retryDelay(attempt, signal) {
|
|
|
97
176
|
}, { once: true });
|
|
98
177
|
});
|
|
99
178
|
}
|
|
179
|
+
function isSupportedImageMediaType(mediaType) {
|
|
180
|
+
return (mediaType === "image/jpeg" ||
|
|
181
|
+
mediaType === "image/png" ||
|
|
182
|
+
mediaType === "image/gif" ||
|
|
183
|
+
mediaType === "image/webp");
|
|
184
|
+
}
|
|
185
|
+
function escapeAttachmentAttribute(value) {
|
|
186
|
+
return value
|
|
187
|
+
.replace(/&/g, "&")
|
|
188
|
+
.replace(/"/g, """)
|
|
189
|
+
.replace(/</g, "<")
|
|
190
|
+
.replace(/>/g, ">");
|
|
191
|
+
}
|
|
192
|
+
function formatTextAttachment(att) {
|
|
193
|
+
if (typeof att.text !== "string" || att.text.length === 0)
|
|
194
|
+
return null;
|
|
195
|
+
const attrs = [
|
|
196
|
+
`name="${escapeAttachmentAttribute(att.name || "attachment")}"`,
|
|
197
|
+
att.contentType
|
|
198
|
+
? `contentType="${escapeAttachmentAttribute(att.contentType)}"`
|
|
199
|
+
: null,
|
|
200
|
+
att.type ? `type="${escapeAttachmentAttribute(att.type)}"` : null,
|
|
201
|
+
].filter(Boolean);
|
|
202
|
+
return `<attachment ${attrs.join(" ")}>\n${att.text}\n</attachment>`;
|
|
203
|
+
}
|
|
204
|
+
export function buildUserContentWithAttachments(opts) {
|
|
205
|
+
const userContent = [];
|
|
206
|
+
const textAttachments = [];
|
|
207
|
+
for (const att of opts.attachments ?? []) {
|
|
208
|
+
if (att.type === "image" && att.data) {
|
|
209
|
+
const match = att.data.match(/^data:(image\/[^;]+);base64,(.+)$/);
|
|
210
|
+
if (match && isSupportedImageMediaType(match[1])) {
|
|
211
|
+
userContent.push({
|
|
212
|
+
type: "image",
|
|
213
|
+
data: match[2],
|
|
214
|
+
mediaType: match[1],
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const textAttachment = formatTextAttachment(att);
|
|
220
|
+
if (textAttachment) {
|
|
221
|
+
textAttachments.push(textAttachment);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
userContent.push({
|
|
225
|
+
type: "text",
|
|
226
|
+
text: textAttachments.length > 0
|
|
227
|
+
? `${textAttachments.join("\n\n")}\n\n${opts.text}`
|
|
228
|
+
: opts.text,
|
|
229
|
+
});
|
|
230
|
+
return userContent;
|
|
231
|
+
}
|
|
100
232
|
/** Build enriched message with file/skill/mention references */
|
|
101
233
|
function enrichMessage(message, references) {
|
|
102
234
|
if (references.length === 0)
|
|
@@ -215,6 +347,9 @@ export async function runAgentLoop(opts) {
|
|
|
215
347
|
catch (err) {
|
|
216
348
|
if (signal.aborted)
|
|
217
349
|
throw err;
|
|
350
|
+
if (isContextTooLongError(err)) {
|
|
351
|
+
throw new EngineError("Conversation has grown too long. Start a new conversation to continue.", { errorCode: "context_length_exceeded" });
|
|
352
|
+
}
|
|
218
353
|
if (retry < MAX_RETRIES && isRetryableError(err)) {
|
|
219
354
|
// Clear partial text from the failed attempt so the retry
|
|
220
355
|
// doesn't produce garbled duplicate output
|
|
@@ -262,11 +397,24 @@ export async function runAgentLoop(opts) {
|
|
|
262
397
|
tool: toolCall.name,
|
|
263
398
|
input: toolCall.input,
|
|
264
399
|
});
|
|
400
|
+
const MAX_TOOL_RESULT_CHARS = 50_000;
|
|
401
|
+
const TOOL_TIMEOUT_MS = 60_000;
|
|
265
402
|
let result;
|
|
266
403
|
let isError = false;
|
|
267
404
|
try {
|
|
268
|
-
const
|
|
269
|
-
|
|
405
|
+
const timeoutSignal = AbortSignal.timeout(TOOL_TIMEOUT_MS);
|
|
406
|
+
const raw = await Promise.race([
|
|
407
|
+
actionEntry.run(toolCall.input, { send }),
|
|
408
|
+
new Promise((_, reject) => {
|
|
409
|
+
timeoutSignal.addEventListener("abort", () => reject(new Error("Tool call timed out after 60 seconds")));
|
|
410
|
+
}),
|
|
411
|
+
]);
|
|
412
|
+
let resultStr = typeof raw === "string" ? raw : JSON.stringify(raw, null, 2);
|
|
413
|
+
if (resultStr.length > MAX_TOOL_RESULT_CHARS) {
|
|
414
|
+
const truncated = resultStr.slice(0, MAX_TOOL_RESULT_CHARS);
|
|
415
|
+
resultStr = `${truncated}\n\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${MAX_TOOL_RESULT_CHARS.toLocaleString()} shown]`;
|
|
416
|
+
}
|
|
417
|
+
result = resultStr;
|
|
270
418
|
}
|
|
271
419
|
catch (err) {
|
|
272
420
|
result = `Error running ${toolCall.name}: ${err?.message ?? String(err)}`;
|
|
@@ -344,9 +492,8 @@ export function createProductionAgentHandler(options) {
|
|
|
344
492
|
return { error: "message is required" };
|
|
345
493
|
}
|
|
346
494
|
// Resolve owner first so we can look up a per-owner API key. Users
|
|
347
|
-
// who bring their own key
|
|
348
|
-
//
|
|
349
|
-
// serverless cold starts via the settings table).
|
|
495
|
+
// who bring their own key use their key for this request (durable
|
|
496
|
+
// across serverless cold starts via the settings table).
|
|
350
497
|
let ownerEmail = null;
|
|
351
498
|
if (options.resolveOwnerEmail) {
|
|
352
499
|
try {
|
|
@@ -362,15 +509,28 @@ export function createProductionAgentHandler(options) {
|
|
|
362
509
|
if (requestEngine) {
|
|
363
510
|
const provider = engineToProvider(requestEngine);
|
|
364
511
|
userApiKey = await getOwnerApiKey(provider, ownerEmail);
|
|
365
|
-
if (!userApiKey) {
|
|
512
|
+
if (!userApiKey && !isMultiTenantDeploy()) {
|
|
513
|
+
// Single-tenant only: env fallback for the requested provider.
|
|
514
|
+
// Multi-tenant deploys never silently substitute the deploy-level
|
|
515
|
+
// key for an authenticated user (see getOwnerActiveApiKey for the
|
|
516
|
+
// full rationale).
|
|
366
517
|
const envVar = PROVIDER_TO_ENV[provider];
|
|
367
|
-
userApiKey = envVar ?
|
|
518
|
+
userApiKey = envVar ? readDeployCredentialEnv(envVar) : undefined;
|
|
368
519
|
}
|
|
369
520
|
}
|
|
370
521
|
else {
|
|
371
522
|
userApiKey = await getOwnerActiveApiKey(ownerEmail);
|
|
372
523
|
}
|
|
373
|
-
|
|
524
|
+
// `options.apiKey` is the value the template constructed the plugin with
|
|
525
|
+
// (e.g. wired from a deployment env var). On a multi-tenant deploy this
|
|
526
|
+
// is the same cross-tenant hazard as any deploy-level provider key:
|
|
527
|
+
// accepting it as the final fallback would silently bill every key-less
|
|
528
|
+
// user to the deployment's account. Only honour it in single-tenant mode.
|
|
529
|
+
const effectiveApiKey = isMultiTenantDeploy()
|
|
530
|
+
? userApiKey
|
|
531
|
+
: (userApiKey ??
|
|
532
|
+
options.apiKey ??
|
|
533
|
+
readDeployCredentialEnv("ANTHROPIC_API_KEY"));
|
|
374
534
|
// Resolve engine — per-request engine override takes priority
|
|
375
535
|
let engine;
|
|
376
536
|
try {
|
|
@@ -414,34 +574,6 @@ export function createProductionAgentHandler(options) {
|
|
|
414
574
|
},
|
|
415
575
|
});
|
|
416
576
|
}
|
|
417
|
-
// Check usage limit before starting a run (production hosted mode).
|
|
418
|
-
// Skip when the user has provided their own key — they're paying
|
|
419
|
-
// Anthropic directly, so the platform's free tier doesn't apply.
|
|
420
|
-
if (!userApiKey &&
|
|
421
|
-
options.trackUsage &&
|
|
422
|
-
options.resolveOwnerEmail &&
|
|
423
|
-
ownerEmail &&
|
|
424
|
-
ownerEmail !== "local@localhost") {
|
|
425
|
-
try {
|
|
426
|
-
const { checkUsageLimit } = await import("../usage/store.js");
|
|
427
|
-
const result = await checkUsageLimit(ownerEmail, options.usageLimitCents);
|
|
428
|
-
if (!result.allowed) {
|
|
429
|
-
setResponseHeader(event, "Content-Type", "text/event-stream");
|
|
430
|
-
setResponseHeader(event, "Cache-Control", "no-cache");
|
|
431
|
-
setResponseHeader(event, "Connection", "keep-alive");
|
|
432
|
-
const encoder = new TextEncoder();
|
|
433
|
-
return new ReadableStream({
|
|
434
|
-
start(controller) {
|
|
435
|
-
controller.enqueue(encoder.encode(`data: ${JSON.stringify({ type: "usage_limit_reached", usageCents: result.usageCents, limitCents: result.limitCents })}\n\n`));
|
|
436
|
-
controller.close();
|
|
437
|
-
},
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
catch {
|
|
442
|
-
// Usage check failed — allow the request to proceed
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
577
|
// Run all independent pre-send steps in parallel. Each of these hits
|
|
446
578
|
// the DB or invokes an action; running them sequentially was the
|
|
447
579
|
// single biggest contributor to pre-LLM latency.
|
|
@@ -504,6 +636,27 @@ export function createProductionAgentHandler(options) {
|
|
|
504
636
|
}
|
|
505
637
|
return "";
|
|
506
638
|
})();
|
|
639
|
+
// Selection context: written by the client when the user presses Cmd+I
|
|
640
|
+
// with text selected on the page. Treat anything older than 5 minutes
|
|
641
|
+
// as stale and ignore it.
|
|
642
|
+
const SELECTION_TTL_MS = 5 * 60 * 1000;
|
|
643
|
+
const selectionContextPromise = (async () => {
|
|
644
|
+
try {
|
|
645
|
+
const sel = (await readAppState("pending-selection-context"));
|
|
646
|
+
if (!sel?.text)
|
|
647
|
+
return "";
|
|
648
|
+
const capturedAt = typeof sel.capturedAt === "number" ? sel.capturedAt : 0;
|
|
649
|
+
if (Date.now() - capturedAt > SELECTION_TTL_MS)
|
|
650
|
+
return "";
|
|
651
|
+
return (`\n\nThe user has selected the following text and pressed Cmd+I to focus the agent. ` +
|
|
652
|
+
`Treat this as the immediate context to act on:\n` +
|
|
653
|
+
`<selection>\n${sel.text}\n</selection>`);
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
// DB not ready — skip silently
|
|
657
|
+
}
|
|
658
|
+
return "";
|
|
659
|
+
})();
|
|
507
660
|
// On the first message of a conversation, inject workspace inventory
|
|
508
661
|
// so the agent knows what files, skills, jobs, and custom agents exist.
|
|
509
662
|
// Templates can opt out via `skipFilesContext: true` when the inventory
|
|
@@ -516,7 +669,9 @@ export function createProductionAgentHandler(options) {
|
|
|
516
669
|
try {
|
|
517
670
|
const { resourceListAccessible, SHARED_OWNER, resourceGet } = await import("../resources/store.js");
|
|
518
671
|
const { getResourceKind, parseCustomAgentProfile, parseRemoteAgentManifest, parseSkillMetadata, } = await import("../resources/metadata.js");
|
|
519
|
-
const ownerEmail = getRequestUserEmail()
|
|
672
|
+
const ownerEmail = getRequestUserEmail();
|
|
673
|
+
if (!ownerEmail)
|
|
674
|
+
throw new Error("no authenticated user");
|
|
520
675
|
const allResources = await resourceListAccessible(ownerEmail);
|
|
521
676
|
if (allResources.length > 0) {
|
|
522
677
|
const fileLines = [];
|
|
@@ -577,10 +732,11 @@ export function createProductionAgentHandler(options) {
|
|
|
577
732
|
}
|
|
578
733
|
return filesContext;
|
|
579
734
|
})();
|
|
580
|
-
const [systemPrompt, screenBlock, urlBlock, filesContext] = await Promise.all([
|
|
735
|
+
const [systemPrompt, screenBlock, urlBlock, selectionBlock, filesContext] = await Promise.all([
|
|
581
736
|
systemPromptPromise,
|
|
582
737
|
screenContextPromise,
|
|
583
738
|
urlContextPromise,
|
|
739
|
+
selectionContextPromise,
|
|
584
740
|
filesContextPromise,
|
|
585
741
|
]);
|
|
586
742
|
if (systemPromptError) {
|
|
@@ -595,29 +751,13 @@ export function createProductionAgentHandler(options) {
|
|
|
595
751
|
},
|
|
596
752
|
});
|
|
597
753
|
}
|
|
598
|
-
const screenContext = screenBlock + urlBlock;
|
|
754
|
+
const screenContext = screenBlock + urlBlock + selectionBlock;
|
|
599
755
|
// Pre-compute agent references for A2A resolution inside the run
|
|
600
756
|
const agentRefs = references.filter((r) => r.type === "agent");
|
|
601
757
|
const customAgentRefs = references.filter((r) => r.type === "custom-agent");
|
|
602
|
-
|
|
603
|
-
const userContent = [];
|
|
604
|
-
if (attachments?.length) {
|
|
605
|
-
for (const att of attachments) {
|
|
606
|
-
if (att.type === "image" && att.data) {
|
|
607
|
-
const match = att.data.match(/^data:(image\/[^;]+);base64,(.+)$/);
|
|
608
|
-
if (match) {
|
|
609
|
-
userContent.push({
|
|
610
|
-
type: "image",
|
|
611
|
-
data: match[2],
|
|
612
|
-
mediaType: match[1],
|
|
613
|
-
});
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
userContent.push({
|
|
619
|
-
type: "text",
|
|
758
|
+
const userContent = buildUserContentWithAttachments({
|
|
620
759
|
text: enrichedMessage + screenContext + filesContext,
|
|
760
|
+
attachments,
|
|
621
761
|
});
|
|
622
762
|
const messages = [
|
|
623
763
|
...history
|
|
@@ -628,6 +768,18 @@ export function createProductionAgentHandler(options) {
|
|
|
628
768
|
})),
|
|
629
769
|
{ role: "user", content: userContent },
|
|
630
770
|
];
|
|
771
|
+
// If there's already an active run for this thread, reject with 409 so
|
|
772
|
+
// the client can queue or wait rather than silently aborting the existing run.
|
|
773
|
+
if (threadId) {
|
|
774
|
+
const existingRun = getActiveRunForThread(threadId);
|
|
775
|
+
if (existingRun && existingRun.status === "running") {
|
|
776
|
+
setResponseStatus(event, 409);
|
|
777
|
+
return {
|
|
778
|
+
error: "Run already in progress for this thread",
|
|
779
|
+
activeRunId: existingRun.runId,
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
}
|
|
631
783
|
// Start agent loop in background via run-manager
|
|
632
784
|
const runId = generateRunId();
|
|
633
785
|
startRun(runId, threadId ?? runId, async (send, signal) => {
|
|
@@ -637,7 +789,9 @@ export function createProductionAgentHandler(options) {
|
|
|
637
789
|
}
|
|
638
790
|
// Resolve custom workspace agent mentions first.
|
|
639
791
|
if (customAgentRefs.length > 0) {
|
|
640
|
-
const ownerEmail = getRequestUserEmail()
|
|
792
|
+
const ownerEmail = getRequestUserEmail();
|
|
793
|
+
if (!ownerEmail)
|
|
794
|
+
throw new Error("no authenticated user");
|
|
641
795
|
const { findAccessibleCustomAgent } = await import("../resources/agents.js");
|
|
642
796
|
const customResults = await Promise.allSettled(customAgentRefs.map(async (ref) => {
|
|
643
797
|
send({
|
|
@@ -686,7 +840,11 @@ export function createProductionAgentHandler(options) {
|
|
|
686
840
|
try {
|
|
687
841
|
const ownerEmail = options.resolveOwnerEmail
|
|
688
842
|
? await options.resolveOwnerEmail(event)
|
|
689
|
-
: getRequestUserEmail()
|
|
843
|
+
: getRequestUserEmail();
|
|
844
|
+
if (!ownerEmail) {
|
|
845
|
+
// Skip usage recording for unauthenticated runs.
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
690
848
|
const { recordUsage } = await import("../usage/store.js");
|
|
691
849
|
await recordUsage({
|
|
692
850
|
ownerEmail,
|
|
@@ -828,7 +986,11 @@ export function createProductionAgentHandler(options) {
|
|
|
828
986
|
let effectiveModel = model;
|
|
829
987
|
try {
|
|
830
988
|
const { resolveActiveExperimentConfig } = await import("../observability/experiments.js");
|
|
831
|
-
|
|
989
|
+
if (!ownerEmail) {
|
|
990
|
+
// Without an authenticated owner we can't resolve user-scoped experiments.
|
|
991
|
+
throw new Error("no authenticated user");
|
|
992
|
+
}
|
|
993
|
+
const expConfig = await resolveActiveExperimentConfig(ownerEmail);
|
|
832
994
|
if (expConfig) {
|
|
833
995
|
if (typeof expConfig.configs.model === "string") {
|
|
834
996
|
effectiveModel = expConfig.configs.model;
|
|
@@ -861,7 +1023,7 @@ export function createProductionAgentHandler(options) {
|
|
|
861
1023
|
loopOpts: agentLoopOpts,
|
|
862
1024
|
runId,
|
|
863
1025
|
threadId: threadId ?? null,
|
|
864
|
-
userId: ownerEmail
|
|
1026
|
+
userId: ownerEmail,
|
|
865
1027
|
config: obsConfig,
|
|
866
1028
|
});
|
|
867
1029
|
}
|
|
@@ -875,14 +1037,12 @@ export function createProductionAgentHandler(options) {
|
|
|
875
1037
|
if (!instrumented) {
|
|
876
1038
|
loopUsage = await runAgentLoop(agentLoopOpts);
|
|
877
1039
|
}
|
|
878
|
-
// Record token usage for cost monitoring
|
|
879
|
-
//
|
|
880
|
-
// including local dev. `trackUsage` only controls the pre-request
|
|
881
|
-
// *limit check*; recording happens unconditionally.
|
|
1040
|
+
// Record token usage for cost monitoring so the Usage panel in
|
|
1041
|
+
// settings works in every mode, including local dev.
|
|
882
1042
|
try {
|
|
883
1043
|
const ownerEmail = options.resolveOwnerEmail
|
|
884
1044
|
? await options.resolveOwnerEmail(event)
|
|
885
|
-
: getRequestUserEmail()
|
|
1045
|
+
: getRequestUserEmail();
|
|
886
1046
|
if (ownerEmail &&
|
|
887
1047
|
(loopUsage.inputTokens > 0 ||
|
|
888
1048
|
loopUsage.outputTokens > 0 ||
|