From f5db2184c7d1cc2aba71c308b3d49b82dfb5518c Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Tue, 10 Mar 2026 16:20:11 +0200 Subject: [PATCH] per-connector defaults, periodic sync, and double-trigger guard --- .../constants/connector-constants.ts | 38 +++++++++++-------- .../hooks/use-connector-dialog.ts | 31 +++++++++++++-- 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/surfsense_web/components/assistant-ui/connector-popup/constants/connector-constants.ts b/surfsense_web/components/assistant-ui/connector-popup/constants/connector-constants.ts index a14932d93..5d138af06 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/constants/connector-constants.ts +++ b/surfsense_web/components/assistant-ui/connector-popup/constants/connector-constants.ts @@ -241,22 +241,28 @@ export const COMPOSIO_TOOLKITS = [ }, ] as const; -// Skip IndexingConfigurationView and auto-index with defaults after OAuth -export const AUTO_INDEX_CONNECTOR_TYPES = new Set([ - EnumConnectorName.GOOGLE_GMAIL_CONNECTOR, - EnumConnectorName.GOOGLE_CALENDAR_CONNECTOR, - EnumConnectorName.COMPOSIO_GMAIL_CONNECTOR, - EnumConnectorName.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR, - EnumConnectorName.AIRTABLE_CONNECTOR, - EnumConnectorName.NOTION_CONNECTOR, - EnumConnectorName.LINEAR_CONNECTOR, - EnumConnectorName.SLACK_CONNECTOR, - EnumConnectorName.TEAMS_CONNECTOR, - EnumConnectorName.DISCORD_CONNECTOR, - EnumConnectorName.JIRA_CONNECTOR, - EnumConnectorName.CONFLUENCE_CONNECTOR, - EnumConnectorName.CLICKUP_CONNECTOR, -]); +// Per-connector defaults for auto-indexing after OAuth (days back, days forward, periodic frequency in minutes) +export const AUTO_INDEX_DEFAULTS: Record = { + // Messaging — high volume, recent messages matter most + [EnumConnectorName.GOOGLE_GMAIL_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.COMPOSIO_GMAIL_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.SLACK_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.DISCORD_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.TEAMS_CONNECTOR]: { daysBack: 30, daysForward: 0, frequencyMinutes: 1440 }, + // Calendar — past context + upcoming events + [EnumConnectorName.GOOGLE_CALENDAR_CONNECTOR]: { daysBack: 90, daysForward: 90, frequencyMinutes: 1440 }, + [EnumConnectorName.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR]: { daysBack: 90, daysForward: 90, frequencyMinutes: 1440 }, + // Project management — medium-term relevance + [EnumConnectorName.LINEAR_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.JIRA_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.CLICKUP_CONNECTOR]: { daysBack: 90, daysForward: 0, frequencyMinutes: 1440 }, + // Knowledge bases — evergreen content + [EnumConnectorName.NOTION_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.CONFLUENCE_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 }, + [EnumConnectorName.AIRTABLE_CONNECTOR]: { daysBack: 365, daysForward: 0, frequencyMinutes: 1440 }, +}; + +export const AUTO_INDEX_CONNECTOR_TYPES = new Set(Object.keys(AUTO_INDEX_DEFAULTS)); // Re-export IndexingConfigState from schemas for backward compatibility export type { IndexingConfigState } from "./connector-popup.schemas"; diff --git a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts index 8a2577479..57f213334 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts +++ b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts @@ -29,6 +29,7 @@ import { queryClient } from "@/lib/query-client/client"; import type { IndexingConfigState } from "../constants/connector-constants"; import { AUTO_INDEX_CONNECTOR_TYPES, + AUTO_INDEX_DEFAULTS, COMPOSIO_CONNECTORS, OAUTH_CONNECTORS, OTHER_CONNECTORS, @@ -81,6 +82,7 @@ export const useConnectorDialog = () => { const [connectingConnectorType, setConnectingConnectorType] = useState(null); const [isCreatingConnector, setIsCreatingConnector] = useState(false); const isCreatingConnectorRef = useRef(false); + const isAutoIndexingRef = useRef(false); // Accounts list view state (for OAuth connectors with multiple accounts) const [viewingAccountsType, setViewingAccountsType] = useState<{ @@ -126,20 +128,40 @@ export const useConnectorDialog = () => { connectorTitle: string, connectorType: string ) => { - if (!searchSpaceId) return; + if (!searchSpaceId || isAutoIndexingRef.current) return; + isAutoIndexingRef.current = true; + + const defaults = AUTO_INDEX_DEFAULTS[connectorType]; + const now = new Date(); + const startDate = new Date(now); + startDate.setDate(startDate.getDate() - (defaults?.daysBack ?? 365)); + const endDate = new Date(now); + endDate.setDate(endDate.getDate() + (defaults?.daysForward ?? 0)); setIsOpen(true); try { + await updateConnector({ + id: connector.id, + data: { + periodic_indexing_enabled: true, + indexing_frequency_minutes: defaults?.frequencyMinutes ?? 1440, + }, + }); + await indexConnector({ connector_id: connector.id, - queryParams: { search_space_id: searchSpaceId }, + queryParams: { + search_space_id: searchSpaceId, + start_date: format(startDate, "yyyy-MM-dd"), + end_date: format(endDate, "yyyy-MM-dd"), + }, }); trackIndexWithDateRangeStarted( Number(searchSpaceId), connectorType, connector.id, - { hasStartDate: false, hasEndDate: false } + { hasStartDate: true, hasEndDate: true } ); toast.success(`${connectorTitle} connected!`, { @@ -166,8 +188,9 @@ export const useConnectorDialog = () => { queryKey: cacheKeys.logs.summary(Number(searchSpaceId)), }); await refetchAllConnectors(); + isAutoIndexingRef.current = false; }, - [searchSpaceId, indexConnector, refetchAllConnectors, setIsOpen, router] + [searchSpaceId, indexConnector, updateConnector, refetchAllConnectors, setIsOpen, router] ); // Synchronize state with URL query params