From 6c885f8d3da9ed00d55db95b50121747353dadf6 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 16 Sep 2026 21:31:57 -0700 Subject: [PATCH 01/11] fix(http): substitute path parameters only by their whole name (#7914) * fix(http): substitute path parameters only by their whole name The HTTP request tool replaced each path parameter with a plain string replace of `:${key}` over the whole URL. An empty key stripped the colon from the scheme, so `https://host` became `https//host` and the request was refused as not absolute; a numeric key rewrote the port into the host; and `:id` matched inside `:idx`. Models occasionally send an empty path-parameter entry, which made agent API tool calls fail intermittently. Substitute a key only when it starts like a JavaScript identifier, as path-to-regexp defines `:name` parameters, and end each placeholder where an identifier ends. * fix(http): prefer the longest path parameter key and accept Unicode identifiers --- apps/sim/tools/http/request.test.ts | 37 +++++++++++++++++++++++++++++ apps/sim/tools/http/utils.ts | 36 +++++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/apps/sim/tools/http/request.test.ts b/apps/sim/tools/http/request.test.ts index 661239c7cbd..df59cabbd85 100644 --- a/apps/sim/tools/http/request.test.ts +++ b/apps/sim/tools/http/request.test.ts @@ -70,6 +70,43 @@ describe('HTTP Request Tool', () => { expect(url.includes('chars')).toBe(true) }) + it.concurrent('substitutes path parameters only by their whole name', () => { + expect(processUrl('https://www.google.com', { '': '' })).toBe('https://www.google.com') + expect(processUrl('https://api.example.com:8443/users/:id', { '8443': 'x', id: '42' })).toBe( + 'https://api.example.com:8443/users/42' + ) + expect(processUrl('https://api.example.com/users/:idx/:id', { id: '1', idx: '2' })).toBe( + 'https://api.example.com/users/2/1' + ) + expect(processUrl('https://api.example.com/users/:id-profile', { id: '7' })).toBe( + 'https://api.example.com/users/7-profile' + ) + expect(processUrl('https://api.example.com/users/:user-id', { 'user-id': '9' })).toBe( + 'https://api.example.com/users/9' + ) + expect(processUrl('https://api.example.com/users/:id', { id: '$&' })).toBe( + 'https://api.example.com/users/%24%26' + ) + expect(processUrl('https://api.example.com/users/:user.name', { 'user.name': 'ada' })).toBe( + 'https://api.example.com/users/ada' + ) + expect(processUrl('https://api.example.com/v1/:$ref', { $ref: 'x' })).toBe( + 'https://api.example.com/v1/x' + ) + expect(processUrl('https://api.example.com/users/:id', { '/': 'x', '1': 'y' })).toBe( + 'https://api.example.com/users/:id' + ) + expect( + processUrl('https://api.example.com/:user-id/:user', { user: 'alice', 'user-id': '42' }) + ).toBe('https://api.example.com/42/alice') + expect( + processUrl('https://api.example.com/:user.name', { user: 'alice', 'user.name': 'ada' }) + ).toBe('https://api.example.com/ada') + expect(processUrl('https://api.example.com/:é/:éa', { é: '42', éa: '7' })).toBe( + 'https://api.example.com/42/7' + ) + }) + it.concurrent('canonicalizes first-party API calls before the apex redirect', () => { expect( processUrl('https://sim.ai/api/v2/workflows', undefined, [ diff --git a/apps/sim/tools/http/utils.ts b/apps/sim/tools/http/utils.ts index 22cba3b2647..0495fb3073c 100644 --- a/apps/sim/tools/http/utils.ts +++ b/apps/sim/tools/http/utils.ts @@ -1,3 +1,4 @@ +import { escapeRegExp } from '@/executor/constants' import { transformTable } from '@/tools/shared/table' import type { TableRow } from '@/tools/types' @@ -81,6 +82,37 @@ export const getDefaultHeaders = ( return headers } +/** + * A path parameter key must start like a JavaScript identifier, using the same character classes + * path-to-regexp uses for `:name` parameters. That excludes an empty key and one starting with a + * digit or `/`, the shapes that matched the scheme separator or a port; the rest of the key is left + * as callers use it. + */ +const PATH_PARAM_KEY = /^[$_\p{ID_Start}][^\s/?#]*$/u +const PATH_PARAM_NAME_CONTINUE = '[$\\u200c\\u200d\\p{ID_Continue}]' + +/** + * Replaces the first `:key` placeholder for each path parameter with its URL-encoded value. + * + * A placeholder ends where an identifier would, so `:id` never matches inside `:idx`, and longer + * keys are substituted first, so `:user-id` is not consumed by a `user` key. A plain string replace + * let an empty key strip the scheme's colon (`https://` became `https//`), a numeric key rewrite a + * port, and `:id` match inside `:idx`. + */ +function substitutePathParams(url: string, pathParams: Record): string { + const entries = Object.entries(pathParams) + .filter(([key]) => PATH_PARAM_KEY.test(key)) + .sort(([a], [b]) => b.length - a.length) + let substituted = url + for (const [key, value] of entries) { + substituted = substituted.replace( + new RegExp(`:${escapeRegExp(key)}(?!${PATH_PARAM_NAME_CONTINUE})`, 'u'), + () => encodeURIComponent(value) + ) + } + return substituted +} + /** * Processes a URL with path parameters and query parameters * @param url Base URL to process @@ -98,9 +130,7 @@ export const processUrl = ( } if (pathParams) { - Object.entries(pathParams).forEach(([key, value]) => { - url = url.replace(`:${key}`, encodeURIComponent(value)) - }) + url = substitutePathParams(url, pathParams) } if (queryParams) { From 452b35caf6007420c16419a8bdc76418a81d8996 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 16 Sep 2026 21:40:13 -0700 Subject: [PATCH 02/11] improvement(insights): default to the last 30 days (#7916) --- apps/sim/ee/organization-usage/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sim/ee/organization-usage/constants.ts b/apps/sim/ee/organization-usage/constants.ts index 9f2e08e3c7d..4c717d6b4ae 100644 --- a/apps/sim/ee/organization-usage/constants.ts +++ b/apps/sim/ee/organization-usage/constants.ts @@ -91,5 +91,5 @@ export const USAGE_TAB_EMPTY_COPY: Record = { export const COLLAPSED_ROW_COUNT = ORGANIZATION_USAGE_BREAKDOWN_DEFAULT_LIMIT export const EXPANDED_ROW_COUNT = ORGANIZATION_USAGE_BREAKDOWN_MAX_LIMIT -export const DEFAULT_USAGE_PRESET = 'current-period' as const +export const DEFAULT_USAGE_PRESET = '30d' as const export const DEFAULT_USAGE_TAB = USAGE_OVERVIEW_TAB From 431355ac610776b94256a90f0010b4aac2e0b1eb Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 16 Sep 2026 22:48:14 -0700 Subject: [PATCH 03/11] feat(coda): add permission-aware knowledge connector (#7915) * feat(coda): add permission-aware knowledge connector * fix(coda): refine setup docs and verification coverage * fix(coda): clarify workspace access in setup guide --- .../content/docs/knowledgebase/connectors.mdx | 7 +- apps/docs/content/docs/search/coda.mdx | 66 +++ .../docs/search/connect-your-account.mdx | 1 + apps/docs/content/docs/search/meta.json | 1 + .../public/static/search/coda-api-token.jpg | Bin 0 -> 48837 bytes apps/sim/connectors/coda/README.md | 79 ++++ apps/sim/connectors/coda/client.ts | 129 ++++++ apps/sim/connectors/coda/coda.live.test.ts | 225 +++++++++ apps/sim/connectors/coda/coda.test.ts | 288 ++++++++++++ apps/sim/connectors/coda/coda.ts | 437 ++++++++++++++++++ apps/sim/connectors/coda/config.ts | 29 ++ apps/sim/connectors/coda/index.ts | 1 + apps/sim/connectors/coda/meta.ts | 68 +++ apps/sim/connectors/coda/permissions.test.ts | 287 ++++++++++++ apps/sim/connectors/coda/permissions.ts | 251 ++++++++++ apps/sim/connectors/coda/source.ts | 50 ++ .../permission-scoped-listing.test.ts | 1 + apps/sim/connectors/registry.server.ts | 2 + apps/sim/connectors/registry.ts | 2 + .../lib/copilot/generated/docs-manifest.ts | 1 + .../integrations/credential-display.test.ts | 2 +- .../credential-visibility.server.test.ts | 36 ++ .../__integration__/coda-live.integration.ts | 385 +++++++++++++++ apps/sim/lib/sim-search/search-params.test.ts | 19 + apps/sim/lib/sim-search/search-params.ts | 1 + apps/sim/tools/coda/utils.ts | 9 +- .../src/integration-availability.ts | 8 +- 27 files changed, 2378 insertions(+), 7 deletions(-) create mode 100644 apps/docs/content/docs/search/coda.mdx create mode 100644 apps/docs/public/static/search/coda-api-token.jpg create mode 100644 apps/sim/connectors/coda/README.md create mode 100644 apps/sim/connectors/coda/client.ts create mode 100644 apps/sim/connectors/coda/coda.live.test.ts create mode 100644 apps/sim/connectors/coda/coda.test.ts create mode 100644 apps/sim/connectors/coda/coda.ts create mode 100644 apps/sim/connectors/coda/config.ts create mode 100644 apps/sim/connectors/coda/index.ts create mode 100644 apps/sim/connectors/coda/meta.ts create mode 100644 apps/sim/connectors/coda/permissions.test.ts create mode 100644 apps/sim/connectors/coda/permissions.ts create mode 100644 apps/sim/connectors/coda/source.ts create mode 100644 apps/sim/lib/knowledge/__integration__/coda-live.integration.ts create mode 100644 apps/sim/lib/sim-search/search-params.test.ts diff --git a/apps/docs/content/docs/knowledgebase/connectors.mdx b/apps/docs/content/docs/knowledgebase/connectors.mdx index 31110c79c1c..e3624676668 100644 --- a/apps/docs/content/docs/knowledgebase/connectors.mdx +++ b/apps/docs/content/docs/knowledgebase/connectors.mdx @@ -16,11 +16,11 @@ Connectors continuously sync documents from external services into your knowledg The current Connect Source picker showing searchable connectors including Airtable, Asana, Ashby, Azure DevOps, Bitbucket, Box, and ClickUp -Sim ships with 64 built-in connectors: +Sim ships with 66 built-in connectors: | Category | Connectors | |----------|-----------| -| **Productivity** | Notion, Confluence, Asana, Linear, Jira, Jira Service Management, Monday, Trello, ClickUp, Google Calendar, Google Sheets, Google Forms, Microsoft Excel, Typeform | +| **Productivity** | Coda, Notion, Confluence, Asana, Linear, Jira, Jira Service Management, Monday, Trello, ClickUp, Google Calendar, Google Sheets, Google Forms, Microsoft Excel, Typeform | | **Cloud Storage** | Google Drive, Dropbox, OneDrive, SharePoint, Box, Amazon S3, SFTP | | **Documents** | Google Docs, Google Slides, Mintlify, WordPress, Webflow, DocuSign | | **Development** | GitHub, GitLab, Bitbucket, Azure DevOps, Sentry | @@ -31,7 +31,7 @@ Sim ships with 64 built-in connectors: | **Incident Management** | incident.io, Rootly, PagerDuty | | **Data** | Airtable, Databricks | | **Note-taking** | Obsidian | -| **Meetings** | Zoom, Google Meet, Gong, Grain, Granola, Fathom, Fireflies | +| **Meetings** | Zoom, Google Meet, Gong, Grain, Granola, Fathom, Fireflies, Circleback | | **Recruiting** | Greenhouse, Ashby | | **HR** | Workday Help | | **Compliance** | Google Vault | @@ -52,6 +52,7 @@ Other connectors use **API keys** or **personal access tokens** instead. The set | Connector | Where to get the key | |-----------|---------------------| | **Obsidian** | Install the [Local REST API](https://github.com/coddingtonbear/obsidian-local-rest-api) plugin, then copy the key from its settings | +| **Coda** | API token from Account settings → API connections, saved as a Coda service account credential | | **Fireflies** | Generate from the Integrations page in your Fireflies account | | **Typeform** | Personal access token from your Typeform account settings | | **Azure DevOps** | Personal access token with Wiki (Read), Work Items (Read), and Code (Read) scopes | diff --git a/apps/docs/content/docs/search/coda.mdx b/apps/docs/content/docs/search/coda.mdx new file mode 100644 index 00000000000..c2a276f7cf5 --- /dev/null +++ b/apps/docs/content/docs/search/coda.mdx @@ -0,0 +1,66 @@ +--- +title: Coda +description: Connect Coda documents while preserving each teammate's access +--- + +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Image } from '@/components/ui/image' + +An organization admin connects Coda once. Teammates search using their verified Sim email address; they do not need a personal Coda connection. Their email must match the address Coda reports. + +## Connect Coda + + + + +### Create an API token + +Sign in to Coda with a dedicated integration account that can read the documents and their sharing permissions. Open **Account settings → API connections → Generate API token**, name the token, and copy it. Coda's current app may be labeled **Superhuman Docs**. + +Use a standard REST API token. Do not select the MCP restriction. + +Coda API connections with the Generate new token dialog + + + + +### Add the source + +In Sim, open **Settings → Sources → Add source → Coda**. Add or select a Coda service account credential and enter the token when prompted. + +| Field | What to enter | +|---|---| +| Documents | Select documents, or switch to **Document IDs** and enter up to 100 IDs separated by commas. For `https://coda.io/d/_dAbCDeFGH`, the ID is `AbCDeFGH`. | +| Enterprise organization ID | Leave blank for ordinary access. For organization-wide indexing, enter the ID from Coda's [List organizations API](https://coda.io/developers/apis/admin/v1#operation/listOrganizations) and use an Enterprise organization administrator's token. Workspace admin access alone is insufficient. | + +The picker shows accessible documents the token owner has opened. Use IDs for other accessible documents. With no selection, Sim discovers the token owner's opened documents, or the organization's documents in Enterprise mode. Use explicit IDs when deleted documents must reliably be removed from the index; discovery listings alone are not authoritative for deletion. + + + + +### Sync and verify + +Select **Connect & Sync**. Open the source's **Documents** and **Sync history** to check indexing. Content and permission changes appear after synchronization. + +To rotate the token, add the replacement credential, update the source, and verify a sync before revoking the old token. + + + + +## Content and access + +Ordinary connections index visible canvas text and base-table rows. Enterprise connections index the Admin API's plaintext page exports; tables are included only as represented in those exports. Attachments, comments, images, and remote embeds are not extracted. + +| Permission | Ordinary connection | Enterprise connection | +|---|---|---| +| Owner or direct email share | Matching verified Sim email | Matching active organization user | +| Group, workspace, or domain share | Not expanded | Resolved through the Admin API | +| Anyone with the link | Does not grant Search access | Does not grant Search access | + +Enterprise mode excludes deactivated and deleted users. Direct-share guests absent from the organization directory are excluded; guests explicitly listed in a group or workspace may receive that membership's access. Ordinary connections cannot check Coda organization deactivation, so manage departing users' Sim membership too. + +Sim refreshes permissions even when content is unchanged. Unverified permissions never become broad access, and Sim admin status does not override Coda sharing. For setup failures or missing results, check the token's access, Enterprise admin role if applicable, the teammate's verified email, and **Sync history**. + +In a regular knowledge base, **Workspace access** intentionally shares all indexed content with that Sim workspace and does not use the Enterprise organization ID. The permissions above apply to organization Search and **Admin access** sources. + +See Coda's [public API](https://coda.io/developers/apis/v1) and [Enterprise Admin API](https://coda.io/developers/apis/admin/v1). diff --git a/apps/docs/content/docs/search/connect-your-account.mdx b/apps/docs/content/docs/search/connect-your-account.mdx index b82cdf817a2..6d741241fe1 100644 --- a/apps/docs/content/docs/search/connect-your-account.mdx +++ b/apps/docs/content/docs/search/connect-your-account.mdx @@ -60,6 +60,7 @@ For a source configured inside a workspace, join that workspace and connect thro | GitHub App installation | Connect GitHub once for this Sim organization. The App handles indexing; your account establishes which repositories you may search. | | Confluence service account | Connect Confluence to verify your identity; the service account handles the crawl. | | Google Workspace service account (Gmail, Calendar, Drive) | No personal connection is needed for that source. Your verified Sim email identifies your mailbox and calendar view, or is matched to Drive permissions. | +| [Coda](/search/coda) | No personal connection is needed. Your verified Sim email must match a supported Coda sharing grant. | | GitLab | No personal connection is needed. For an administrator token, your verified Sim email must match your confirmed primary GitLab email. For a non-admin token, it must match the uploaded user mapping and have a project grant. | Gmail, Calendar, and Drive are separate Search sources. Connecting one Google service does not connect all of them. Central Google and GitLab sources remain searchable without a personal account connection. diff --git a/apps/docs/content/docs/search/meta.json b/apps/docs/content/docs/search/meta.json index 473704f2d45..8a83d115762 100644 --- a/apps/docs/content/docs/search/meta.json +++ b/apps/docs/content/docs/search/meta.json @@ -3,6 +3,7 @@ "pages": [ "connect-your-account", "mcp", + "coda", "confluence", "github", "gitlab", diff --git a/apps/docs/public/static/search/coda-api-token.jpg b/apps/docs/public/static/search/coda-api-token.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09aa99e08eb933f396171255276ea7efe449b489 GIT binary patch literal 48837 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
    5ceh9_eiz6GT0Su)p^{ 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