Skip to content

Commit a27f376

Browse files
authored
feat(connectors): add Bitbucket, Databricks, Google Chat, and Workday Help KB connectors (#6895)
* feat(connectors): add Bitbucket, Databricks, Google Chat, and Workday Help KB connectors Adds four knowledge base connectors, closing the gap where Sim shipped tool blocks for these services but could not index their content. - Bitbucket: repository source files and pull request descriptions over the existing Bitbucket OAuth credential - Databricks: notebooks (Workspace API) and saved SQL queries, PAT auth - Google Chat: spaces indexed as message transcripts, new google-chat OAuth service under the shared Google client - Workday Help: knowledge article versions via the public helpArticle/v1 API * fix(connectors): second-pass validation fixes and test coverage Adversarial re-validation of all four connectors plus a combined-change regression audit. - bitbucket: stop declaring incremental sync (deletion reconciliation is disabled for incremental runs, so deleted files were never removed on the default code configuration); drop a wasted listing round-trip after the frontier drains; add 33 tests - databricks: reject an explicit maxDocuments of 0, which meant unlimited; add 34 tests - google-chat: correct the sender displayName documentation (user auth populates only name and type) and emit second-precision RFC-3339 in the message filter; 15 -> 24 tests - workday: fix a crash when maxVersions is persisted as a number; refuse a configuration whose status filter Workday did not honor; cap the unresolved-name error; 18 -> 27 tests - document the Google Chat service-account omission - docs: list all four connectors and correct the connector count * fix(connectors): index Google Chat spaces with no messages in the window Review round 1. - orderBy takes a full ordering expression, not a bare direction. The reference documents the default as `createTime ASC`, so send `createTime DESC`; a bare `DESC` either 400s every hydration or is ignored, which would make the cap keep the oldest traffic and the later reverse render the transcript backwards. - getDocument no longer returns null when the message window is empty. A space with no messages is still a live space, and null is the "document is gone" signal the engine treats as last-known-good: returning it dropped spaces whose only prose is their description or guidelines, and left a stale transcript indexed after a space was cleared or lookbackDays was tightened past every message. - The transcript header is omitted when no message contributed text. * fix(connectors): only flag a Bitbucket listing capped when the cap withheld something Review round 2. takeIndexableWithinCap reports capReached as soon as the running total equals maxItems, which is also true of a listing that ended at exactly that count. Setting listingCapped there suppressed deletion reconciliation for a complete listing, so upstream-deleted files and pull requests could stay in the knowledge base indefinitely. applyMaxItemsCap now takes whether Bitbucket had more content beyond the page -- a next link, or directories still queued on the frontier -- and flags the listing only when the cap actually withheld something, matching the Databricks, Google Chat, and Workday connectors. * fix(connectors): keep the Bitbucket cap flag set when it skips the pull request phase Review round 3. Fixes a regression from 622a21b. maxItems is shared across the code and pull request phases, so a code walk that ends with exactly maxItems documents and no next link or frontier stops pagination before the pull request phase runs. Scoping listingCapped to "this phase had more" left the flag unset in that case, and the engine then treated the run as a complete enumeration and could hard-delete previously indexed pr:* documents that were never listed. The cap flag now asks whether anything the connector was configured to list remains unlisted -- including a later phase the cap is about to stop us reaching.
1 parent d374ebc commit a27f376

28 files changed

Lines changed: 6323 additions & 5 deletions

File tree

apps/docs/components/icons.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7269,6 +7269,44 @@ export function GoogleGroupsIcon(props: SVGProps<SVGSVGElement>) {
72697269
)
72707270
}
72717271

7272+
/**
7273+
* Google Chat product mark: a hollow four-colour speech bubble with a chamfered
7274+
* upper-right corner, traced from the official 2023 icon
7275+
* (https://commons.wikimedia.org/wiki/File:Google_Chat_icon_(2023).svg) and
7276+
* using the shared Google Workspace two-tone palette the other Google marks in
7277+
* this file already carry.
7278+
*/
7279+
export function GoogleChatIcon(props: SVGProps<SVGSVGElement>) {
7280+
return (
7281+
<svg {...props} xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 311 320'>
7282+
<path
7283+
fill='#0066da'
7284+
d='M76.37 0.51L76.38 76.98L0 76.96L0 20.77Q0.85 14.81 3.53 10.76Q10.14 0.74 22.75 0.67Q49.41 0.53 76.37 0.51Z'
7285+
/>
7286+
<path
7287+
fill='#fbbc04'
7288+
d='M76.37 0.51L233.79 0.53A1.61 1.57 -26.7 0 1 234.71 0.82L235.08 1.09Q234.92 1.15 234.81 1.22Q234.64 1.31 234.64 1.5L234.62 77.01Q234.6 77.01 234.57 77.01L76.41 77.01Q76.4 77 76.38 76.98L76.37 0.51Z'
7289+
/>
7290+
<path
7291+
fill='#ea4335'
7292+
d='M235.08 1.09L310.53 76.77L234.62 77.01L234.64 1.5Q234.64 1.31 234.81 1.22Q234.92 1.15 235.08 1.09Z'
7293+
/>
7294+
<path
7295+
fill='#2684fc'
7296+
d='M0 76.96L76.38 76.98Q76.4 77 76.41 77.01L76.43 182.69L0 182.67L0 76.96Z'
7297+
/>
7298+
<path
7299+
fill='#00ac47'
7300+
d='M310.53 76.77L311 77.11L311 239.01Q308.34 253.54 295.94 257.78Q291.52 259.3 282.91 259.28Q227.02 259.19 169.99 259.11Q161.71 259.1 153.19 259.23Q152.72 259.24 152.39 259.57Q124.49 287.34 96.39 315.59C93.52 318.48 90.27 320.09 86.15 319.48Q80.39 318.63 77.66 313.54Q76.51 311.38 76.49 305.66Q76.42 282.47 76.44 259.13L76.43 220.85L114.21 183.07A1.79 1.77 22.3 0 1 115.47 182.55L233.77 182.59A0.83 0.83 0 0 0 234.6 181.76L234.57 77.01Q234.6 77.01 234.62 77.01L310.53 76.77Z'
7301+
/>
7302+
<path
7303+
fill='#00832d'
7304+
d='M76.43 182.69L76.43 220.85L76.44 259.13Q52.47 259.27 28.91 259.22Q19.09 259.2 14.76 257.68Q2.62 253.44 0 238.88L0 182.67L76.43 182.69Z'
7305+
/>
7306+
</svg>
7307+
)
7308+
}
7309+
72727310
export function GoogleMeetIcon(props: SVGProps<SVGSVGElement>) {
72737311
return (
72747312
<svg {...props} xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 87.5 72'>

apps/docs/content/docs/en/knowledgebase/connectors.mdx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,24 @@ Connectors continuously sync documents from external services into your knowledg
1414

1515
<Image src="/static/connectors/connectors-sources.png" alt="Connect Source picker showing a searchable list of available connectors including Airtable, Asana, Confluence, Discord, Dropbox, Fireflies, GitHub, and Gmail" width={800} height={500} />
1616

17-
Sim ships with 60 built-in connectors:
17+
Sim ships with 64 built-in connectors:
1818

1919
| Category | Connectors |
2020
|----------|-----------|
2121
| **Productivity** | Notion, Confluence, Asana, Linear, Jira, Jira Service Management, Monday, Trello, ClickUp, Google Calendar, Google Sheets, Google Forms, Microsoft Excel, Typeform |
2222
| **Cloud Storage** | Google Drive, Dropbox, OneDrive, SharePoint, Box, Amazon S3, SFTP |
2323
| **Documents** | Google Docs, Google Slides, Mintlify, WordPress, Webflow, DocuSign |
24-
| **Development** | GitHub, GitLab, Azure DevOps, Sentry |
25-
| **Communication** | Slack, Discord, Microsoft Teams, Reddit, X, YouTube |
24+
| **Development** | GitHub, GitLab, Bitbucket, Azure DevOps, Sentry |
25+
| **Communication** | Slack, Discord, Microsoft Teams, Google Chat, Reddit, X, YouTube |
2626
| **Email** | Gmail, Outlook |
2727
| **CRM** | HubSpot, Salesforce |
2828
| **Support** | Intercom, ServiceNow, Zendesk, Zoho Desk |
2929
| **Incident Management** | incident.io, Rootly, PagerDuty |
30-
| **Data** | Airtable |
30+
| **Data** | Airtable, Databricks |
3131
| **Note-taking** | Obsidian |
3232
| **Meetings** | Zoom, Google Meet, Gong, Grain, Granola, Fathom, Fireflies |
3333
| **Recruiting** | Greenhouse, Ashby |
34+
| **HR** | Workday Help |
3435
| **Compliance** | Google Vault |
3536

3637
## Adding a Connector
@@ -58,6 +59,8 @@ Other connectors use **API keys** or **personal access tokens** instead. The set
5859
| **PagerDuty** | REST API key from Integrations → API Access Keys |
5960
| **SFTP** | Password or unencrypted private key, plus a required SHA-256 host key fingerprint (host, port, username, and root path are entered as config fields) |
6061
| **Mintlify** | API key — optional for public documentation sites, which sync from `llms.txt` |
62+
| **Databricks** | Personal access token from your workspace's user settings (the workspace host is entered as a config field) |
63+
| **Workday Help** | Register an API client for integrations in your tenant, then enter the client secret and refresh token together as `clientSecret:refreshToken` (the client ID, tenant host, and tenant name are entered as config fields) |
6164

6265
<Callout type="info">
6366
If you rotate an API key in the external service, update it in Sim as well — OAuth tokens refresh automatically, but API keys do not.

apps/docs/content/docs/en/platform/self-hosting/integrations-oauth.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ One OAuth client in [Google Cloud Console](https://console.cloud.google.com/apis
100100

101101
| Environment variables | Provider IDs |
102102
|---|---|
103-
| `GOOGLE_CLIENT_ID`<br />`GOOGLE_CLIENT_SECRET` | `google-email`, `google-drive`, `google-sheets`, `google-docs`, `google-calendar`, `google-contacts`, `google-forms`, `google-tasks`, `google-meet`, `google-groups`, `google-ads`, `google-bigquery`, `google-vault`, `vertex-ai` |
103+
| `GOOGLE_CLIENT_ID`<br />`GOOGLE_CLIENT_SECRET` | `google-email`, `google-drive`, `google-sheets`, `google-docs`, `google-calendar`, `google-contacts`, `google-forms`, `google-tasks`, `google-meet`, `google-groups`, `google-chat`, `google-ads`, `google-bigquery`, `google-vault`, `vertex-ai` |
104104

105105
The same variables also power "Sign in with Google". See [Authentication](/platform/self-hosting/authentication).
106106

apps/sim/components/icons.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7269,6 +7269,44 @@ export function GoogleGroupsIcon(props: SVGProps<SVGSVGElement>) {
72697269
)
72707270
}
72717271

7272+
/**
7273+
* Google Chat product mark: a hollow four-colour speech bubble with a chamfered
7274+
* upper-right corner, traced from the official 2023 icon
7275+
* (https://commons.wikimedia.org/wiki/File:Google_Chat_icon_(2023).svg) and
7276+
* using the shared Google Workspace two-tone palette the other Google marks in
7277+
* this file already carry.
7278+
*/
7279+
export function GoogleChatIcon(props: SVGProps<SVGSVGElement>) {
7280+
return (
7281+
<svg {...props} xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 311 320'>
7282+
<path
7283+
fill='#0066da'
7284+
d='M76.37 0.51L76.38 76.98L0 76.96L0 20.77Q0.85 14.81 3.53 10.76Q10.14 0.74 22.75 0.67Q49.41 0.53 76.37 0.51Z'
7285+
/>
7286+
<path
7287+
fill='#fbbc04'
7288+
d='M76.37 0.51L233.79 0.53A1.61 1.57 -26.7 0 1 234.71 0.82L235.08 1.09Q234.92 1.15 234.81 1.22Q234.64 1.31 234.64 1.5L234.62 77.01Q234.6 77.01 234.57 77.01L76.41 77.01Q76.4 77 76.38 76.98L76.37 0.51Z'
7289+
/>
7290+
<path
7291+
fill='#ea4335'
7292+
d='M235.08 1.09L310.53 76.77L234.62 77.01L234.64 1.5Q234.64 1.31 234.81 1.22Q234.92 1.15 235.08 1.09Z'
7293+
/>
7294+
<path
7295+
fill='#2684fc'
7296+
d='M0 76.96L76.38 76.98Q76.4 77 76.41 77.01L76.43 182.69L0 182.67L0 76.96Z'
7297+
/>
7298+
<path
7299+
fill='#00ac47'
7300+
d='M310.53 76.77L311 77.11L311 239.01Q308.34 253.54 295.94 257.78Q291.52 259.3 282.91 259.28Q227.02 259.19 169.99 259.11Q161.71 259.1 153.19 259.23Q152.72 259.24 152.39 259.57Q124.49 287.34 96.39 315.59C93.52 318.48 90.27 320.09 86.15 319.48Q80.39 318.63 77.66 313.54Q76.51 311.38 76.49 305.66Q76.42 282.47 76.44 259.13L76.43 220.85L114.21 183.07A1.79 1.77 22.3 0 1 115.47 182.55L233.77 182.59A0.83 0.83 0 0 0 234.6 181.76L234.57 77.01Q234.6 77.01 234.62 77.01L310.53 76.77Z'
7301+
/>
7302+
<path
7303+
fill='#00832d'
7304+
d='M76.43 182.69L76.43 220.85L76.44 259.13Q52.47 259.27 28.91 259.22Q19.09 259.2 14.76 257.68Q2.62 253.44 0 238.88L0 182.67L76.43 182.69Z'
7305+
/>
7306+
</svg>
7307+
)
7308+
}
7309+
72727310
export function GoogleMeetIcon(props: SVGProps<SVGSVGElement>) {
72737311
return (
72747312
<svg {...props} xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 87.5 72'>

0 commit comments

Comments
 (0)