veryfront 0.1.606 → 0.1.608
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/esm/cli/commands/init/catalog.d.ts.map +1 -1
- package/esm/cli/commands/init/catalog.js +7 -3
- package/esm/cli/mcp/tools/catalog-tools.d.ts +1 -1
- package/esm/cli/mcp/tools/catalog-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/catalog-tools.js +61 -145
- package/esm/cli/templates/integration-loader.d.ts +9 -1
- package/esm/cli/templates/integration-loader.d.ts.map +1 -1
- package/esm/cli/templates/integration-loader.js +14 -3
- package/esm/deno.js +1 -1
- package/esm/extensions/ext-document-kreuzberg/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-document-kreuzberg/src/index.js +12 -4
- package/esm/extensions/ext-document-kreuzberg/src/kreuzberg.d.ts.map +1 -1
- package/esm/extensions/ext-document-kreuzberg/src/kreuzberg.js +3 -1
- package/esm/extensions/ext-document-kreuzberg/src/runtime.d.ts +3 -0
- package/esm/extensions/ext-document-kreuzberg/src/runtime.d.ts.map +1 -0
- package/esm/extensions/ext-document-kreuzberg/src/runtime.js +26 -0
- package/esm/extensions/ext-document-kreuzberg/src/upload-extraction-worker.js +20 -0
- package/esm/src/integrations/_data.js +1 -1
- package/esm/src/integrations/feature-flags.d.ts +12 -0
- package/esm/src/integrations/feature-flags.d.ts.map +1 -0
- package/esm/src/integrations/feature-flags.js +118 -0
- package/esm/src/integrations/index.d.ts.map +1 -1
- package/esm/src/integrations/index.js +8 -5
- package/esm/src/integrations/schema.d.ts +4 -4
- package/esm/src/internal-agents/run-stream.d.ts +1 -0
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +34 -0
- package/esm/src/oauth/index.d.ts +5 -1
- package/esm/src/oauth/index.d.ts.map +1 -1
- package/esm/src/oauth/index.js +5 -1
- package/esm/src/oauth/providers/common.d.ts +27 -25
- package/esm/src/oauth/providers/common.d.ts.map +1 -1
- package/esm/src/oauth/providers/common.js +3 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ export const connectors = [
|
|
|
21
21
|
{ "name": "outlook", "displayName": "Microsoft Outlook", "icon": "outlook.svg", "description": "Read, send, and manage Outlook emails", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Mail.Read", "Mail.Send", "Mail.ReadWrite", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (Application ID)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List recent emails from inbox or a specific folder", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders/{folderId}/messages", "params": { "folderId": { "type": "string", "in": "path", "description": "Mail folder ID or well-known name", "required": true, "default": "inbox" }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" }, "$orderby": { "type": "string", "in": "query", "description": "Sort expression", "default": "receivedDateTime desc" }, "$filter": { "type": "string", "in": "query", "description": "OData filter expression" } }, "response": { "transform": "value" } } }, { "id": "get_email", "name": "Get Email", "description": "Get detailed information about a specific email", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Microsoft Graph message ID", "required": true }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } } } }, { "id": "send_email", "name": "Send Email", "description": "Send a new email message", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://graph.microsoft.com/v1.0/me/sendMail", "body": { "message": { "type": "object", "description": "Microsoft Graph message object with subject, body, toRecipients, etc.", "required": true }, "saveToSentItems": { "type": "boolean", "description": "Save sent message to Sent Items", "default": true } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search emails by query, subject, sender, or date", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages", "params": { "$search": { "type": "string", "in": "query", "description": "Search query, e.g. \"subject:roadmap\"", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } }, "response": { "transform": "value" } } }, { "id": "list_folders", "name": "List Folders", "description": "List all mail folders in the mailbox", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders", "params": { "includeHiddenFolders": { "type": "boolean", "in": "query", "description": "Include hidden folders", "default": false }, "$top": { "type": "number", "in": "query", "description": "Maximum folders to return", "default": 100 } }, "response": { "transform": "value" } } }], "prompts": [{ "id": "check_emails", "title": "Check my emails", "prompt": "List my recent unread emails and summarize the most important ones.", "category": "productivity", "icon": "mail" }, { "id": "search_emails", "title": "Search my emails", "prompt": "Search my emails for specific topics, senders, or date ranges.", "category": "productivity", "icon": "search" }, { "id": "draft_email", "title": "Draft an email", "prompt": "Help me draft a professional email with proper formatting and tone.", "category": "productivity", "icon": "compose" }], "suggestedWith": ["teams", "calendar", "gmail"] },
|
|
22
22
|
{ "name": "posthog", "displayName": "PostHog", "icon": "posthog.svg", "description": "Access analytics, feature flags, and user insights from PostHog", "auth": { "type": "api-key", "requiredApis": [{ "name": "PostHog API", "enableUrl": "https://app.posthog.com/project/settings" }], "keyName": "POSTHOG_API_KEY", "headerName": "Authorization", "headerPrefix": "Bearer" }, "envVars": [{ "name": "POSTHOG_API_KEY", "description": "PostHog Personal API Key", "required": true, "sensitive": true, "docsUrl": "https://posthog.com/docs/api/overview" }, { "name": "POSTHOG_HOST", "description": "PostHog API host (defaults to https://app.posthog.com)", "required": false, "sensitive": false, "docsUrl": "https://posthog.com/docs/self-host" }], "tools": [{ "id": "get_trends", "name": "Get Trends", "description": "Retrieve event trends and analytics data", "requiresWrite": false }, { "id": "list_feature_flags", "name": "List Feature Flags", "description": "List all feature flags in your PostHog project", "requiresWrite": false }, { "id": "list_persons", "name": "List Persons", "description": "List persons/users tracked in PostHog", "requiresWrite": false }, { "id": "capture_event", "name": "Capture Event", "description": "Track a custom event in PostHog", "requiresWrite": true }], "prompts": [{ "id": "trend_analysis", "title": "Trend analysis", "prompt": "Show me the trends for key events in my PostHog project over the last 7 days.", "category": "analytics", "icon": "chart" }, { "id": "feature_flag_status", "title": "Feature flag status", "prompt": "List all active feature flags and their current rollout status.", "category": "analytics", "icon": "flag" }, { "id": "user_insights", "title": "User insights", "prompt": "Give me insights about recent user activity and top users in my PostHog project.", "category": "analytics", "icon": "users" }], "suggestedWith": ["slack", "analytics", "monitoring"] },
|
|
23
23
|
{ "name": "salesforce", "displayName": "Salesforce", "icon": "salesforce.svg", "description": "Manage accounts, contacts, opportunities, and leads in your Salesforce CRM", "auth": { "type": "oauth2", "provider": "salesforce", "authorizationUrl": "https://login.salesforce.com/services/oauth2/authorize", "tokenUrl": "https://login.salesforce.com/services/oauth2/token", "scopes": ["api", "refresh_token", "offline_access"], "tokenAuthMethod": "request_body", "requiredApis": [{ "name": "Salesforce Connected App", "enableUrl": "https://login.salesforce.com/" }] }, "envVars": [{ "name": "SALESFORCE_CLIENT_ID", "description": "Salesforce OAuth Consumer Key (from your Connected App)", "required": true, "sensitive": false, "docsUrl": "https://help.salesforce.com/s/articleView?id=sf.connected_app_create.htm" }, { "name": "SALESFORCE_CLIENT_SECRET", "description": "Salesforce OAuth Consumer Secret", "required": true, "sensitive": true, "docsUrl": "https://help.salesforce.com/s/articleView?id=sf.connected_app_create.htm" }], "tools": [{ "id": "list_accounts", "name": "List Accounts", "description": "List accounts from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for accounts", "default": "SELECT Id, Name, Type, Industry, Phone, Website FROM Account ORDER BY LastModifiedDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "get_account", "name": "Get Account", "description": "Get detailed information about a specific account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/sobjects/Account/{accountId}", "params": { "accountId": { "type": "string", "in": "path", "description": "Salesforce Account ID", "required": true } } } }, { "id": "list_contacts", "name": "List Contacts", "description": "List contacts from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for contacts", "default": "SELECT Id, FirstName, LastName, Email, Phone, AccountId FROM Contact ORDER BY LastModifiedDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "list_opportunities", "name": "List Opportunities", "description": "List sales opportunities from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for opportunities", "default": "SELECT Id, Name, StageName, Amount, CloseDate, AccountId FROM Opportunity ORDER BY CloseDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "create_lead", "name": "Create Lead", "description": "Create a new lead in Salesforce CRM", "requiresWrite": true, "endpoint": { "method": "POST", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/sobjects/Lead", "body": { "LastName": { "type": "string", "description": "Lead last name", "required": true }, "Company": { "type": "string", "description": "Lead company", "required": true }, "FirstName": { "type": "string", "description": "Lead first name" }, "Email": { "type": "string", "description": "Lead email address" }, "Phone": { "type": "string", "description": "Lead phone number" }, "Status": { "type": "string", "description": "Lead status" } } } }], "prompts": [{ "id": "find_accounts", "title": "Find accounts", "prompt": "Search for accounts in my Salesforce CRM and show me their key information.", "category": "crm", "icon": "search" }, { "id": "create_lead", "title": "Create a lead", "prompt": "Create a new lead in Salesforce CRM with the information I provide.", "category": "crm", "icon": "plus" }, { "id": "pipeline_summary", "title": "Pipeline summary", "prompt": "Show me a summary of my current sales opportunities and pipeline status.", "category": "crm", "icon": "chart" }, { "id": "contact_lookup", "title": "Contact lookup", "prompt": "Find and display information about specific contacts in my Salesforce CRM.", "category": "crm", "icon": "user" }], "suggestedWith": ["gmail", "slack", "calendar"] },
|
|
24
|
-
{ "name": "sentry", "displayName": "Sentry", "icon": "sentry.svg", "description": "Monitor errors, track issues, and manage Sentry projects", "auth": { "type": "
|
|
24
|
+
{ "name": "sentry", "displayName": "Sentry", "icon": "sentry.svg", "description": "Monitor errors, track issues, and manage Sentry projects", "auth": { "type": "oauth2", "provider": "sentry", "authorizationUrl": "https://sentry.io/oauth/authorize/", "tokenUrl": "https://sentry.io/oauth/token/", "scopes": ["org:read", "project:read", "event:read", "event:write"], "tokenAuthMethod": "none", "pkce": true, "supportsRefreshToken": true, "requiredApis": [{ "name": "Sentry OAuth Application", "enableUrl": "https://sentry.io/settings/account/api/applications/" }] }, "envVars": [{ "name": "SENTRY_CLIENT_ID", "description": "Sentry OAuth Client ID from your public OAuth application", "required": true, "sensitive": false, "docsUrl": "https://docs.sentry.io/api/auth/" }, { "name": "SENTRY_ORG", "description": "Default Sentry organization slug for prompts that do not specify one", "required": false, "sensitive": false, "docsUrl": "https://docs.sentry.io/api/organizations/" }], "tools": [{ "id": "list_organizations", "name": "List Organizations", "description": "List Sentry organizations available to the authenticated user so agents can discover organization slugs before project or issue calls", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/", "params": { "owner": { "type": "boolean", "in": "query", "description": "Restrict results to organizations where the authenticated user is an owner" }, "query": { "type": "string", "in": "query", "description": "Filter organizations by name, slug, status, id, email, or member id" }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "list_projects", "name": "List Projects", "description": "List Sentry projects for an organization", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/projects/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "list_issues", "name": "List Issues", "description": "List Sentry issues for a project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/projects/{organizationSlug}/{projectSlug}/issues/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "projectSlug": { "type": "string", "in": "path", "description": "Sentry project slug", "required": true }, "query": { "type": "string", "in": "query", "description": "Sentry issue search query, for example is:unresolved" }, "statsPeriod": { "type": "string", "in": "query", "description": "Stats period, for example 24h, 14d, or 30d" }, "limit": { "type": "number", "in": "query", "description": "Maximum number of issues to return" }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get details for a Sentry issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/issues/{issueId}/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "issueId": { "type": "string", "in": "path", "description": "Sentry issue ID", "required": true }, "collapse": { "type": "string[]", "in": "query", "description": "Optional response sections to collapse" } } } }, { "id": "resolve_issue", "name": "Resolve Issue", "description": "Resolve a Sentry issue", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/issues/{issueId}/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "issueId": { "type": "string", "in": "path", "description": "Sentry issue ID", "required": true } }, "body": { "status": { "type": "string", "description": "New issue status", "default": "resolved" }, "statusDetails": { "type": "object", "description": "Optional Sentry status details" } } } }], "prompts": [{ "id": "check_errors", "title": "Check recent errors", "prompt": "Show me recent errors and issues in my Sentry projects and help me prioritize which ones to fix.", "category": "development", "icon": "alert-triangle" }, { "id": "analyze_issue", "title": "Analyze an issue", "prompt": "Help me analyze a specific Sentry issue, understand its root cause, and suggest a fix.", "category": "development", "icon": "bug" }, { "id": "project_health", "title": "Project health check", "prompt": "Give me an overview of the health of my Sentry projects, including error rates and trending issues.", "category": "analytics", "icon": "activity" }], "suggestedWith": ["github", "slack", "linear"], "category": "development" },
|
|
25
25
|
{ "name": "servicenow", "displayName": "ServiceNow", "icon": "servicenow.svg", "description": "IT Service Management - incidents, changes, and service requests", "auth": { "type": "oauth2", "provider": "servicenow", "scopes": ["useraccount", "openid"] }, "envVars": [{ "name": "SERVICENOW_INSTANCE", "description": "ServiceNow instance URL (e.g. your-instance.service-now.com)", "required": true }, { "name": "SERVICENOW_CLIENT_ID", "description": "ServiceNow OAuth Client ID", "required": true }, { "name": "SERVICENOW_CLIENT_SECRET", "description": "ServiceNow OAuth Client Secret", "required": true, "sensitive": true }], "tools": [{ "id": "list_incidents", "name": "List Incidents", "description": "List ServiceNow incidents with optional filters" }, { "id": "get_incident", "name": "Get Incident", "description": "Get details of a specific incident" }, { "id": "create_incident", "name": "Create Incident", "description": "Create a new incident in ServiceNow" }, { "id": "update_incident", "name": "Update Incident", "description": "Update an existing incident" }, { "id": "search_knowledge", "name": "Search Knowledge Base", "description": "Search ServiceNow knowledge base articles" }], "prompts": [{ "id": "check_ticket_status", "title": "Check ticket status", "prompt": "Check the status of my recent ServiceNow incidents and summarize any that need attention.", "category": "productivity" }, { "id": "create_incident_report", "title": "Create incident", "prompt": "Help me create a new incident in ServiceNow with the appropriate priority and category.", "category": "productivity" }, { "id": "search_kb", "title": "Search knowledge base", "prompt": "Search the ServiceNow knowledge base for solutions to common issues.", "category": "research" }], "suggestedWith": ["slack", "jira"], "category": "enterprise" },
|
|
26
26
|
{ "name": "sharepoint", "displayName": "SharePoint", "icon": "sharepoint.svg", "description": "Access and manage SharePoint sites, document libraries, and files", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Sites.Read.All", "Sites.ReadWrite.All", "Files.Read.All", "Files.ReadWrite.All", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (shared with Outlook/Teams)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_sites", "name": "List SharePoint Sites", "description": "List all SharePoint sites the user has access to", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites", "params": { "search": { "type": "string", "in": "query", "description": "Search term for SharePoint sites", "default": "*" }, "$top": { "type": "number", "in": "query", "description": "Maximum number of sites to return", "default": 200 } }, "response": { "transform": "value" } } }, { "id": "get_site", "name": "Get Site Details", "description": "Get detailed information about a specific SharePoint site", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true } } } }, { "id": "list_files", "name": "List Files", "description": "List files and folders in a SharePoint document library", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/root/children", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum number of items to return", "default": 200 } } } }, { "id": "get_file", "name": "Get File", "description": "Get file metadata and content from SharePoint", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/items/{itemId}", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "itemId": { "type": "string", "in": "path", "description": "Drive item ID", "required": true } } } }, { "id": "upload_file", "name": "Upload File", "description": "Upload a file to a SharePoint document library", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/items/{parentFolderId}:/{fileName}:/content", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "parentFolderId": { "type": "string", "in": "path", "description": "Parent folder item ID, or root", "default": "root" }, "fileName": { "type": "string", "in": "path", "description": "Name of the file to upload", "required": true } }, "body": { "content": { "type": "string", "description": "File content to upload", "required": true } }, "contentType": "application/octet-stream" } }], "prompts": [{ "id": "search_documents", "title": "Search documents", "prompt": "Search for documents in SharePoint sites and summarize their content.", "category": "productivity", "icon": "search" }, { "id": "list_recent_files", "title": "List recent files", "prompt": "Show me the most recently modified files across all SharePoint sites I have access to.", "category": "productivity", "icon": "document" }, { "id": "organize_documents", "title": "Organize documents", "prompt": "Help me organize and categorize documents in a SharePoint library.", "category": "productivity", "icon": "folder" }], "suggestedWith": ["outlook", "teams", "onedrive"] },
|
|
27
27
|
{ "name": "sheets", "displayName": "Google Sheets", "icon": "sheets.svg", "description": "Read, write, and manage Google Sheets spreadsheets", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/drive.file"], "requiredApis": [{ "name": "Google Sheets API", "enableUrl": "https://console.cloud.google.com/apis/library/sheets.googleapis.com" }, { "name": "Google Drive API", "enableUrl": "https://console.cloud.google.com/apis/library/drive.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_spreadsheets", "name": "List Spreadsheets", "description": "List recent Google Sheets spreadsheets from Drive", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://www.googleapis.com/drive/v3/files", "params": { "q": { "type": "string", "in": "query", "description": "Drive query limited to Google Sheets spreadsheets", "default": "mimeType='application/vnd.google-apps.spreadsheet' and trashed=false" }, "pageSize": { "type": "number", "in": "query", "description": "Maximum number of spreadsheets to return", "default": 100 }, "pageToken": { "type": "string", "in": "query", "description": "Pagination token" }, "fields": { "type": "string", "in": "query", "description": "Partial response field selector", "default": "nextPageToken, files(id, name, webViewLink, modifiedTime)" } }, "response": { "transform": "files" } } }, { "id": "get_spreadsheet", "name": "Get Spreadsheet", "description": "Get spreadsheet metadata including sheet names and properties", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "includeGridData": { "type": "boolean", "in": "query", "description": "Whether to include grid data", "default": false }, "ranges": { "type": "string[]", "in": "query", "description": "Ranges to include when includeGridData is true" } } } }, { "id": "read_range", "name": "Read Range", "description": "Read cell data from a spreadsheet range", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to read", "required": true }, "majorDimension": { "type": "string", "in": "query", "description": "Major dimension for returned values" }, "valueRenderOption": { "type": "string", "in": "query", "description": "How values should be rendered" } } } }, { "id": "write_range", "name": "Write Range", "description": "Write data to a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to write", "required": true }, "valueInputOption": { "type": "string", "in": "query", "description": "How input values should be interpreted", "default": "USER_ENTERED" }, "includeValuesInResponse": { "type": "boolean", "in": "query", "description": "Whether the response should include written values", "default": false } }, "body": { "values": { "type": "array", "description": "2D array of row values to write", "required": true }, "majorDimension": { "type": "string", "description": "Major dimension of provided values", "default": "ROWS" } } } }, { "id": "create_spreadsheet", "name": "Create Spreadsheet", "description": "Create a new spreadsheet with optional initial data", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets", "body": { "properties": { "type": "object", "description": "Spreadsheet properties such as title", "required": true }, "sheets": { "type": "array", "description": "Optional initial sheet definitions" } } } }, { "id": "append_rows", "name": "Append Rows", "description": "Append rows to a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:append", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range/table to append to", "required": true }, "valueInputOption": { "type": "string", "in": "query", "description": "How input values should be interpreted", "default": "USER_ENTERED" }, "insertDataOption": { "type": "string", "in": "query", "description": "How inserted data should be handled", "default": "INSERT_ROWS" }, "includeValuesInResponse": { "type": "boolean", "in": "query", "description": "Whether the response should include appended values", "default": false } }, "body": { "values": { "type": "array", "description": "2D array of row values to append", "required": true }, "majorDimension": { "type": "string", "description": "Major dimension of provided values", "default": "ROWS" } } } }, { "id": "clear_range", "name": "Clear Range", "description": "Clear values from a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:clear", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to clear", "required": true } }, "body": {} } }, { "id": "batch_update", "name": "Batch Update", "description": "Run raw Google Sheets batchUpdate requests for formatting and structural changes", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "Google Sheets API batchUpdate request objects", "required": true }, "includeSpreadsheetInResponse": { "type": "boolean", "description": "Whether to include the updated spreadsheet in the response" } } } }, { "id": "add_sheet", "name": "Add Sheet", "description": "Add a new sheet/tab to a spreadsheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an addSheet request", "required": true } } } }, { "id": "delete_sheet", "name": "Delete Sheet", "description": "Delete a sheet/tab from a spreadsheet by sheet ID", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a deleteSheet request", "required": true } } } }, { "id": "rename_sheet", "name": "Rename Sheet", "description": "Rename a sheet/tab by sheet ID", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an updateSheetProperties request", "required": true } } } }, { "id": "delete_spreadsheet", "name": "Delete Spreadsheet", "description": "Move an app-accessible spreadsheet file to trash", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://www.googleapis.com/drive/v3/files/{spreadsheetId}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID / Drive file ID", "required": true } }, "body": { "trashed": { "type": "boolean", "description": "Whether to move the spreadsheet file to trash", "default": true } } } }, { "id": "find_replace", "name": "Find and Replace", "description": "Find and replace text in a spreadsheet or sheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a findReplace request", "required": true } } } }, { "id": "copy_sheet", "name": "Copy Sheet", "description": "Copy a sheet/tab to another spreadsheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Source spreadsheet ID", "required": true }, "sheetId": { "type": "number", "in": "path", "description": "Source sheet ID", "required": true } }, "body": { "destinationSpreadsheetId": { "type": "string", "description": "Destination spreadsheet ID", "required": true } } } }, { "id": "create_chart", "name": "Create Chart", "description": "Create an embedded chart using a Sheets API chart specification", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an addChart request", "required": true } } } }, { "id": "set_data_validation", "name": "Set Data Validation", "description": "Set data validation rules on a sheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a setDataValidation request", "required": true } } } }], "prompts": [{ "id": "analyze_data", "title": "Analyze spreadsheet data", "prompt": "Read and analyze data from a Google Sheets spreadsheet. Provide insights, trends, and statistics.", "category": "productivity", "icon": "chart" }, { "id": "create_report", "title": "Create a report spreadsheet", "prompt": "Create a new Google Sheets spreadsheet with formatted data, headers, and calculations.", "category": "productivity", "icon": "plus" }, { "id": "update_tracker", "title": "Update a tracker", "prompt": "Update a tracking spreadsheet with new data. Add rows, update values, or calculate totals.", "category": "productivity", "icon": "edit" }], "suggestedWith": ["gmail", "calendar", "notion"] },
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const EXPERIMENTAL_INTEGRATIONS_ENV = "VERYFRONT_EXPERIMENTAL_INTEGRATIONS";
|
|
2
|
+
export declare const SUPPORTED_INTEGRATION_NAMES: readonly ["airtable", "asana", "calendar", "confluence", "docs-google", "drive", "figma", "github", "gitlab", "gmail", "jira", "linear", "notion", "onedrive", "outlook", "sentry", "sharepoint", "sheets", "slack", "teams"];
|
|
3
|
+
export declare const DECLARED_INTEGRATION_NAMES: readonly ["gmail", "slack", "github", "calendar", "jira", "notion", "servicenow", "confluence", "linear", "gitlab", "outlook", "teams", "figma", "sheets", "airtable", "supabase", "neon", "sharepoint", "stripe", "salesforce", "twitter", "onedrive", "bitbucket", "sentry", "posthog", "zendesk", "asana", "monday", "zoom", "trello", "box", "shopify", "clickup", "intercom", "pipedrive", "mailchimp", "webex", "freshdesk", "quickbooks", "xero", "drive", "docs-google", "snowflake", "mixpanel", "twilio", "anthropic", "aws", "hubspot"];
|
|
4
|
+
export declare function isDeclaredIntegration(name: string | null | undefined): boolean;
|
|
5
|
+
export declare function isSupportedIntegration(name: string | null | undefined): boolean;
|
|
6
|
+
export declare function isExperimentalIntegrationEnabled(name: string | null | undefined): boolean;
|
|
7
|
+
export declare function isVisibleIntegration(name: string | null | undefined): boolean;
|
|
8
|
+
export declare function filterVisibleIntegrations<T extends {
|
|
9
|
+
id?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
}>(integrations: readonly T[]): T[];
|
|
12
|
+
//# sourceMappingURL=feature-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/feature-flags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AAEnF,eAAO,MAAM,2BAA2B,+NAqB9B,CAAC;AAEX,eAAO,MAAM,0BAA0B,ohBAiD7B,CAAC;AAqBX,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAezF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,YAAY,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,EAAE,CAIL"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
export const EXPERIMENTAL_INTEGRATIONS_ENV = "VERYFRONT_EXPERIMENTAL_INTEGRATIONS";
|
|
3
|
+
export const SUPPORTED_INTEGRATION_NAMES = [
|
|
4
|
+
"airtable",
|
|
5
|
+
"asana",
|
|
6
|
+
"calendar",
|
|
7
|
+
"confluence",
|
|
8
|
+
"docs-google",
|
|
9
|
+
"drive",
|
|
10
|
+
"figma",
|
|
11
|
+
"github",
|
|
12
|
+
"gitlab",
|
|
13
|
+
"gmail",
|
|
14
|
+
"jira",
|
|
15
|
+
"linear",
|
|
16
|
+
"notion",
|
|
17
|
+
"onedrive",
|
|
18
|
+
"outlook",
|
|
19
|
+
"sentry",
|
|
20
|
+
"sharepoint",
|
|
21
|
+
"sheets",
|
|
22
|
+
"slack",
|
|
23
|
+
"teams",
|
|
24
|
+
];
|
|
25
|
+
export const DECLARED_INTEGRATION_NAMES = [
|
|
26
|
+
"gmail",
|
|
27
|
+
"slack",
|
|
28
|
+
"github",
|
|
29
|
+
"calendar",
|
|
30
|
+
"jira",
|
|
31
|
+
"notion",
|
|
32
|
+
"servicenow",
|
|
33
|
+
"confluence",
|
|
34
|
+
"linear",
|
|
35
|
+
"gitlab",
|
|
36
|
+
"outlook",
|
|
37
|
+
"teams",
|
|
38
|
+
"figma",
|
|
39
|
+
"sheets",
|
|
40
|
+
"airtable",
|
|
41
|
+
"supabase",
|
|
42
|
+
"neon",
|
|
43
|
+
"sharepoint",
|
|
44
|
+
"stripe",
|
|
45
|
+
"salesforce",
|
|
46
|
+
"twitter",
|
|
47
|
+
"onedrive",
|
|
48
|
+
"bitbucket",
|
|
49
|
+
"sentry",
|
|
50
|
+
"posthog",
|
|
51
|
+
"zendesk",
|
|
52
|
+
"asana",
|
|
53
|
+
"monday",
|
|
54
|
+
"zoom",
|
|
55
|
+
"trello",
|
|
56
|
+
"box",
|
|
57
|
+
"shopify",
|
|
58
|
+
"clickup",
|
|
59
|
+
"intercom",
|
|
60
|
+
"pipedrive",
|
|
61
|
+
"mailchimp",
|
|
62
|
+
"webex",
|
|
63
|
+
"freshdesk",
|
|
64
|
+
"quickbooks",
|
|
65
|
+
"xero",
|
|
66
|
+
"drive",
|
|
67
|
+
"docs-google",
|
|
68
|
+
"snowflake",
|
|
69
|
+
"mixpanel",
|
|
70
|
+
"twilio",
|
|
71
|
+
"anthropic",
|
|
72
|
+
"aws",
|
|
73
|
+
"hubspot",
|
|
74
|
+
];
|
|
75
|
+
const supportedIntegrations = new Set(SUPPORTED_INTEGRATION_NAMES);
|
|
76
|
+
const declaredIntegrations = new Set(DECLARED_INTEGRATION_NAMES);
|
|
77
|
+
function normalizeIntegrationName(name) {
|
|
78
|
+
return name.trim().toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
function readEnv(name) {
|
|
81
|
+
try {
|
|
82
|
+
return dntShim.dntGlobalThis.Deno?.env?.get(name);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Deno throws without --allow-env. Treat missing permission like an unset flag.
|
|
86
|
+
}
|
|
87
|
+
const processEnv = dntShim.dntGlobalThis
|
|
88
|
+
.process?.env;
|
|
89
|
+
return processEnv?.[name];
|
|
90
|
+
}
|
|
91
|
+
export function isDeclaredIntegration(name) {
|
|
92
|
+
return typeof name === "string" && declaredIntegrations.has(normalizeIntegrationName(name));
|
|
93
|
+
}
|
|
94
|
+
export function isSupportedIntegration(name) {
|
|
95
|
+
return typeof name === "string" && supportedIntegrations.has(normalizeIntegrationName(name));
|
|
96
|
+
}
|
|
97
|
+
export function isExperimentalIntegrationEnabled(name) {
|
|
98
|
+
if (typeof name !== "string" || !isDeclaredIntegration(name))
|
|
99
|
+
return false;
|
|
100
|
+
const value = readEnv(EXPERIMENTAL_INTEGRATIONS_ENV);
|
|
101
|
+
if (!value)
|
|
102
|
+
return false;
|
|
103
|
+
const normalizedName = normalizeIntegrationName(name);
|
|
104
|
+
const normalizedValue = value.trim().toLowerCase();
|
|
105
|
+
if (["1", "true", "all", "*"].includes(normalizedValue))
|
|
106
|
+
return true;
|
|
107
|
+
return normalizedValue
|
|
108
|
+
.split(",")
|
|
109
|
+
.map((item) => item.trim())
|
|
110
|
+
.filter(Boolean)
|
|
111
|
+
.includes(normalizedName);
|
|
112
|
+
}
|
|
113
|
+
export function isVisibleIntegration(name) {
|
|
114
|
+
return isSupportedIntegration(name) || isExperimentalIntegrationEnabled(name);
|
|
115
|
+
}
|
|
116
|
+
export function filterVisibleIntegrations(integrations) {
|
|
117
|
+
return integrations.filter((integration) => isVisibleIntegration(integration.id ?? integration.name));
|
|
118
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,yBAAyB,CAAC;AAEjC,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,yBAAyB,CAAC;AAEjC,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAItE,wBAAwB;AACxB,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAG1F;AAED,uBAAuB;AACvB,wBAAgB,cAAc,IAAI,SAAS,iBAAiB,EAAE,CAE7D;AAED,8BAA8B;AAC9B,wBAAgB,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAErD;AAED,mBAAmB;AACnB,wBAAgB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAG1E;AAGD,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -20,23 +20,26 @@
|
|
|
20
20
|
import "../../_dnt.polyfills.js";
|
|
21
21
|
export { EnvVarSchema, IntegrationConfigSchema, IntegrationNameSchema, IntegrationPromptSchema, IntegrationToolSchema, OAuthConfigSchema, OAuthFieldSchema, } from "./schema.js";
|
|
22
22
|
import { connectors, icons } from "./_data.js";
|
|
23
|
-
|
|
23
|
+
import { filterVisibleIntegrations, isVisibleIntegration } from "./feature-flags.js";
|
|
24
24
|
const iconMap = new Map(Object.entries(icons));
|
|
25
|
-
const connectorNames = connectors.map((c) => c.name);
|
|
26
25
|
/** Return connector. */
|
|
27
26
|
export function getConnector(name) {
|
|
28
|
-
|
|
27
|
+
if (!isVisibleIntegration(name))
|
|
28
|
+
return undefined;
|
|
29
|
+
return connectors.find((connector) => connector.name === name);
|
|
29
30
|
}
|
|
30
31
|
/** List connectors. */
|
|
31
32
|
export function listConnectors() {
|
|
32
|
-
return connectors;
|
|
33
|
+
return filterVisibleIntegrations(connectors);
|
|
33
34
|
}
|
|
34
35
|
/** Return connector names. */
|
|
35
36
|
export function getConnectorNames() {
|
|
36
|
-
return
|
|
37
|
+
return listConnectors().map((connector) => connector.name);
|
|
37
38
|
}
|
|
38
39
|
/** Return icon. */
|
|
39
40
|
export function getIcon(name) {
|
|
41
|
+
if (!isVisibleIntegration(name))
|
|
42
|
+
return undefined;
|
|
40
43
|
return iconMap.get(name);
|
|
41
44
|
}
|
|
42
45
|
// Remote integration tool helpers (per-request, no global registration)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { InferSchema } from "../extensions/schema/index.js";
|
|
2
|
-
export declare const getIntegrationNameSchema: () => import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "
|
|
2
|
+
export declare const getIntegrationNameSchema: () => import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "airtable" | "asana" | "docs-google" | "figma" | "gitlab" | "notion" | "sentry" | "servicenow" | "supabase" | "neon" | "stripe" | "salesforce" | "posthog" | "zendesk" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "snowflake" | "mixpanel" | "twilio" | "aws">;
|
|
3
3
|
/** Zod schema for integration name. */
|
|
4
|
-
export declare const IntegrationNameSchema: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "
|
|
4
|
+
export declare const IntegrationNameSchema: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "airtable" | "asana" | "docs-google" | "figma" | "gitlab" | "notion" | "sentry" | "servicenow" | "supabase" | "neon" | "stripe" | "salesforce" | "posthog" | "zendesk" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "snowflake" | "mixpanel" | "twilio" | "aws">;
|
|
5
5
|
export declare const getEnvVarSchema: () => import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
6
6
|
name: import("../internal-agents/schema.js").Schema<string>;
|
|
7
7
|
description: import("../internal-agents/schema.js").Schema<string>;
|
|
@@ -258,7 +258,7 @@ export declare const IntegrationPromptSchema: import("../internal-agents/schema.
|
|
|
258
258
|
icon: import("../internal-agents/schema.js").Schema<string | undefined>;
|
|
259
259
|
}>>;
|
|
260
260
|
export declare const getIntegrationConfigSchema: () => import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
261
|
-
name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "
|
|
261
|
+
name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "airtable" | "asana" | "docs-google" | "figma" | "gitlab" | "notion" | "sentry" | "servicenow" | "supabase" | "neon" | "stripe" | "salesforce" | "posthog" | "zendesk" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "snowflake" | "mixpanel" | "twilio" | "aws">;
|
|
262
262
|
displayName: import("../internal-agents/schema.js").Schema<string>;
|
|
263
263
|
icon: import("../internal-agents/schema.js").Schema<string | undefined>;
|
|
264
264
|
description: import("../internal-agents/schema.js").Schema<string>;
|
|
@@ -357,7 +357,7 @@ export declare const getIntegrationConfigSchema: () => import("../internal-agent
|
|
|
357
357
|
}>>;
|
|
358
358
|
/** Zod schema for integration config. */
|
|
359
359
|
export declare const IntegrationConfigSchema: import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
360
|
-
name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "
|
|
360
|
+
name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "slack" | "gmail" | "calendar" | "sheets" | "drive" | "outlook" | "teams" | "sharepoint" | "onedrive" | "jira" | "confluence" | "bitbucket" | "airtable" | "asana" | "docs-google" | "figma" | "gitlab" | "notion" | "sentry" | "servicenow" | "supabase" | "neon" | "stripe" | "salesforce" | "posthog" | "zendesk" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "snowflake" | "mixpanel" | "twilio" | "aws">;
|
|
361
361
|
displayName: import("../internal-agents/schema.js").Schema<string>;
|
|
362
362
|
icon: import("../internal-agents/schema.js").Schema<string | undefined>;
|
|
363
363
|
description: import("../internal-agents/schema.js").Schema<string>;
|
|
@@ -8,6 +8,7 @@ export interface RuntimeAgentStreamExecutionDeps {
|
|
|
8
8
|
apiUrl?: string;
|
|
9
9
|
authToken?: string;
|
|
10
10
|
projectId?: string | null;
|
|
11
|
+
sandboxEndpoint?: string;
|
|
11
12
|
};
|
|
12
13
|
createBashTool?: AgentServiceSandboxToolsOptions["createBashTool"];
|
|
13
14
|
createAgentServiceSandboxTools?: (input: AgentServiceSandboxToolsOptions) => Promise<AgentServiceSandboxToolsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAkB7B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAuBxD,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,sBAAsB,CAAC;IACvC,mBAAmB,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAClC;QACH,MAAM,EAAE,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;SAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH;AA4OD,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,QAAQ,CAAC,CAmSnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
1
2
|
import { AgentRuntime, } from "../agent/index.js";
|
|
2
3
|
import { normalizeAgUiRuntimeMessages } from "../agent/ag-ui/runtime-support.js";
|
|
3
4
|
import { createAgentServiceSandboxTools } from "../sandbox/index.js";
|
|
@@ -13,6 +14,8 @@ const getAnyObjectSchema = defineSchema((v) => v.record(v.string(), v.unknown())
|
|
|
13
14
|
const anyObjectSchema = lazySchema(getAnyObjectSchema);
|
|
14
15
|
const logger = serverLogger.component("internal-agent-run-stream");
|
|
15
16
|
const PROJECT_AGENT_SANDBOX_BASH_TOOL_NAME = "bash";
|
|
17
|
+
const INTERNAL_AGENT_RUNTIME_HEARTBEAT_INTERVAL_MS = 25_000;
|
|
18
|
+
const INTERNAL_AGENT_RUNTIME_HEARTBEAT_FRAME = new TextEncoder().encode(": internal-agent-runtime-heartbeat\n\n");
|
|
16
19
|
function getAgentAllowedRemoteToolNames(agent) {
|
|
17
20
|
const raw = agent.config.allowedRemoteTools;
|
|
18
21
|
return Array.isArray(raw) && raw.every((toolName) => typeof toolName === "string") ? raw : [];
|
|
@@ -104,6 +107,7 @@ function getAgentSandboxConfig(agent) {
|
|
|
104
107
|
}
|
|
105
108
|
return {
|
|
106
109
|
sandboxId: getStringProperty(config.sandbox, ["id", "sandboxId", "sessionId"]),
|
|
110
|
+
sandboxEndpoint: getStringProperty(config.sandbox, ["endpoint", "sandboxEndpoint"]),
|
|
107
111
|
projectId: getStringProperty(config.sandbox, ["projectId"]),
|
|
108
112
|
};
|
|
109
113
|
}
|
|
@@ -130,6 +134,12 @@ async function buildProjectAgentSandboxTools(input) {
|
|
|
130
134
|
...(sandboxConfig.sandboxId
|
|
131
135
|
? { sandboxId: sandboxConfig.sandboxId, deleteOnClose: false }
|
|
132
136
|
: {}),
|
|
137
|
+
...(sandboxConfig.sandboxEndpoint ?? input.deps.projectAgentSandbox?.sandboxEndpoint
|
|
138
|
+
? {
|
|
139
|
+
sandboxEndpoint: sandboxConfig.sandboxEndpoint ??
|
|
140
|
+
input.deps.projectAgentSandbox?.sandboxEndpoint,
|
|
141
|
+
}
|
|
142
|
+
: {}),
|
|
133
143
|
getProjectId: () => sandboxConfig.projectId ?? input.deps.projectAgentSandbox?.projectId,
|
|
134
144
|
});
|
|
135
145
|
const bash = sandboxResult.tools[PROJECT_AGENT_SANDBOX_BASH_TOOL_NAME];
|
|
@@ -251,6 +261,7 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
251
261
|
});
|
|
252
262
|
throw error;
|
|
253
263
|
}
|
|
264
|
+
let stopHeartbeat;
|
|
254
265
|
const response = new ReadableStream({
|
|
255
266
|
start: async (controller) => {
|
|
256
267
|
const state = createStreamTransformState();
|
|
@@ -258,6 +269,13 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
258
269
|
const decoder = new TextDecoder();
|
|
259
270
|
let remainder = "";
|
|
260
271
|
let aborted = false;
|
|
272
|
+
let heartbeatTimer;
|
|
273
|
+
stopHeartbeat = () => {
|
|
274
|
+
if (heartbeatTimer) {
|
|
275
|
+
clearInterval(heartbeatTimer);
|
|
276
|
+
heartbeatTimer = undefined;
|
|
277
|
+
}
|
|
278
|
+
};
|
|
261
279
|
const enqueueIfAttached = (event, payload) => {
|
|
262
280
|
const encodedEvent = formatAgUiEvent(event, payload);
|
|
263
281
|
if (!clientAttached) {
|
|
@@ -270,6 +288,17 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
270
288
|
clientAttached = false;
|
|
271
289
|
}
|
|
272
290
|
};
|
|
291
|
+
const enqueueHeartbeatIfAttached = () => {
|
|
292
|
+
if (!clientAttached) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
try {
|
|
296
|
+
controller.enqueue(INTERNAL_AGENT_RUNTIME_HEARTBEAT_FRAME);
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
clientAttached = false;
|
|
300
|
+
}
|
|
301
|
+
};
|
|
273
302
|
const prepareToolResultIfNeeded = (event, payload) => {
|
|
274
303
|
if (event !== "ToolCallStart" && event !== "ToolCallArgs" &&
|
|
275
304
|
event !== "ToolCallEnd") {
|
|
@@ -301,6 +330,7 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
301
330
|
threadId: input.threadId,
|
|
302
331
|
agentId: agent.id,
|
|
303
332
|
});
|
|
333
|
+
heartbeatTimer = dntShim.setInterval(enqueueHeartbeatIfAttached, INTERNAL_AGENT_RUNTIME_HEARTBEAT_INTERVAL_MS);
|
|
304
334
|
try {
|
|
305
335
|
while (true) {
|
|
306
336
|
throwIfAborted();
|
|
@@ -375,6 +405,8 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
375
405
|
}
|
|
376
406
|
}
|
|
377
407
|
finally {
|
|
408
|
+
stopHeartbeat?.();
|
|
409
|
+
stopHeartbeat = undefined;
|
|
378
410
|
abortSignal.removeEventListener("abort", abortHandler);
|
|
379
411
|
if (clientAttached) {
|
|
380
412
|
controller.close();
|
|
@@ -396,6 +428,8 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
396
428
|
},
|
|
397
429
|
cancel() {
|
|
398
430
|
clientAttached = false;
|
|
431
|
+
stopHeartbeat?.();
|
|
432
|
+
stopHeartbeat = undefined;
|
|
399
433
|
logger.info("Internal agent runtime client detached", {
|
|
400
434
|
runId: input.runId,
|
|
401
435
|
threadId: input.threadId,
|
package/esm/src/oauth/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* OAuth 2.0 with
|
|
2
|
+
* OAuth 2.0 with pre-configured providers.
|
|
3
|
+
*
|
|
4
|
+
* Default supported integrations are visible in the CLI/MCP/runtime connector
|
|
5
|
+
* surface. Additional provider configs are retained for feature-gated
|
|
6
|
+
* integrations enabled with VERYFRONT_EXPERIMENTAL_INTEGRATIONS.
|
|
3
7
|
*
|
|
4
8
|
* @example
|
|
5
9
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/oauth/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/oauth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC"}
|
package/esm/src/oauth/index.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* OAuth 2.0 with
|
|
2
|
+
* OAuth 2.0 with pre-configured providers.
|
|
3
|
+
*
|
|
4
|
+
* Default supported integrations are visible in the CLI/MCP/runtime connector
|
|
5
|
+
* surface. Additional provider configs are retained for feature-gated
|
|
6
|
+
* integrations enabled with VERYFRONT_EXPERIMENTAL_INTEGRATIONS.
|
|
3
7
|
*
|
|
4
8
|
* @example
|
|
5
9
|
* ```typescript
|