Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
3d0e791
feat(models): add Gemini 4 Argon (#8970)
waleedlatif1 Oct 13, 2026
1971b5f
improvement(db): disable fastupdate on the table-rows GIN and cover l…
waleedlatif1 Oct 13, 2026
6abc330
improvement(logs): group dashboard stats by workflow id and join name…
waleedlatif1 Oct 13, 2026
b4a172c
improvement(knowledge): finish Confluence passes past unreadable atta…
waleedlatif1 Oct 13, 2026
2abff53
fix(files): lock the workspace row before inserting a workspace file …
waleedlatif1 Oct 13, 2026
25da162
perf(billing): sum reporting-window usage from a shared prefix plus a…
waleedlatif1 Oct 13, 2026
4940b0a
improvement(chat): coalesce replayed transcript reloads and narrow te…
waleedlatif1 Oct 13, 2026
fa5f0db
perf(tables): keep the batch unique check on per-value GIN probes (#8…
waleedlatif1 Oct 13, 2026
2b4fa54
feat(empty-states): add tests and changelog empty-state graphics (#8976)
TheodoreSpeaks Oct 13, 2026
496fd61
ci(desktop): run the live suite's lease-lapse test on its own runner …
waleedlatif1 Oct 13, 2026
98e34f4
fix(slack): connect Slack member accounts without the Sim Search bot …
waleedlatif1 Oct 13, 2026
d29b0b6
fix(knowledge): bill Gemini spend for image reads that fail the pass …
waleedlatif1 Oct 13, 2026
d2083a9
ci(e2e): skip the duplicate type pass and source maps in the mobile b…
waleedlatif1 Oct 13, 2026
c9d6af6
improvement(search): read up to 10 documents per MCP read_document ca…
waleedlatif1 Oct 13, 2026
a643776
feat(fivetran): add Fivetran integration with saved credential, selec…
waleedlatif1 Oct 13, 2026
d8f91a3
improvement(search): bounded Jira fallback, organization search throu…
waleedlatif1 Oct 13, 2026
3170714
fix(db): wave 1 performance follow-ups from re-audit (#8984)
waleedlatif1 Oct 13, 2026
1dc6f18
fix(slack): serialize member Slack setup with bot installs and explai…
waleedlatif1 Oct 13, 2026
37af475
improvement(search): require half the query's terms in Jira partial m…
waleedlatif1 Oct 13, 2026
84fc3af
feat(fivetran): add connector setup, schema config, group, and destin…
waleedlatif1 Oct 13, 2026
ed7867a
fix(search): fold -ie plurals in the Jira partial-match term key (#8991)
waleedlatif1 Oct 13, 2026
5bfd88d
fix(chat): replace a second stuck transcript reload, and close the cl…
waleedlatif1 Oct 13, 2026
a0526e7
improvement(fivetran): use shared filterUndefined and readonly consta…
waleedlatif1 Oct 13, 2026
54adfc5
fix(slack): serialize Search bot removal with member setup, refuse a …
waleedlatif1 Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -332,12 +332,22 @@ jobs:

# Desktop tools in the real Electron app against a local app, on its own runner: the
# Electron app, the dev app and its realtime server together outgrow the e2e runner.
# Two runners: the lease-lapse test sleeps through a long import and then a lease (~3 min), as
# long as the rest of the spec together, so on one runner it set the time for every run.
desktop-live:
name: desktop-live
name: desktop-live (${{ matrix.tests }})
needs: changes
if: needs.changes.outputs.desktop_live == 'true'
runs-on: ${{ (vars.CI_PROVIDER == '' || vars.CI_PROVIDER == 'blacksmith') && 'blacksmith-16vcpu-ubuntu-2404' || 'ubuntu-latest' }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- tests: lease-lapse
filter: --grep @lease-lapse
- tests: rest
filter: --grep-invert @lease-lapse
services:
postgres:
image: pgvector/pgvector:pg17
Expand Down Expand Up @@ -503,13 +513,13 @@ jobs:
SIM_DESKTOP_E2E_REDIS_URL="$REDIS_URL" \
SIM_DESKTOP_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
xvfb-run -a -s '-screen 0 1920x1200x24' bunx playwright test e2e/desktop-tools-live-sim.spec.ts \
--output "$report_dir/desktop-tools-results" --retries=0
${{ matrix.filter }} --output "$report_dir/desktop-tools-results" --retries=0

- name: Upload Electron E2E results and server logs
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: desktop-live-e2e-results
name: desktop-live-e2e-results-${{ matrix.tests }}
path: ${{ runner.temp }}/e2e/
if-no-files-found: ignore
retention-days: 7
Expand Down Expand Up @@ -880,14 +890,19 @@ jobs:
AWS_REGION: 'us-west-2'
ENCRYPTION_KEY: '0000000000000000000000000000000000000000000000000000000000000000' # dummy key for CI only
TURBO_CACHE_DIR: .turbo
# This build is on the e2e-mobile critical path; its ~30 s TypeScript pass repeats what
# lint's type-check and the `build` job's own `next build` (generated route types too)
# already enforce.
NEXT_BUILD_SKIP_TYPE_CHECK: 'true'
run: bunx turbo run build --filter=@sim/app

# Everything `next start` reads; node_modules and the source tree come from e2e-mobile's own
# checkout and setup, at the same workspace path and lockfile.
# checkout and setup, at the same workspace path and lockfile. Source maps are over half the
# build and only serve stack traces and devtools, which the suite never reads.
- name: Package the build for e2e-mobile
run: >-
tar -I 'zstd -T0' -cf "$RUNNER_TEMP/next-build.tar.zst" -C apps/sim
--exclude .next/cache --exclude .next/trace .next
--exclude .next/cache --exclude .next/trace --exclude '*.map' .next

# Already zstd-compressed, so stored without zip compression. `overwrite` lets a re-run of
# this job replace the earlier attempt's build; three days covers re-running a failed shard
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/e2e/desktop-tools-live-sim.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ test.describe('desktop tools against a live Sim', () => {
expect(await callState(chatId)).toMatch(/^completed/)
})

test('a long import whose window crashed settles as outcome unknown about one lease later', async () => {
test('a long import whose window crashed settles as outcome unknown about one lease later @lease-lapse', async () => {
test.setTimeout(420_000)
const user = await db.seedUser(['Crashing import chat'])
const { callId } = await slowImport(user, 'Crashing import chat', '[crash-import]')
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/e2e/source-connect.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ test('source authorization returns to its desktop screen and refreshes live', as
if (path === '/api/knowledge/slack') {
json({
sharedAppAvailable: true,
memberAppKind: installed ? 'shared' : null,
bots: [],
installations: installed
? [
Expand Down
27 changes: 27 additions & 0 deletions apps/docs/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8397,6 +8397,33 @@ export function FirefliesIcon(props: SVGProps<SVGSVGElement>) {
)
}

export function FivetranIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} viewBox='0 0 64 64' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
d='M40.8,32h6.4c0.5,0,1-0.4,1-1c0-0.1,0-0.3-0.1-0.4L37.1,0.6C36.9,0.3,36.6,0,36.2,0h-6.4c-0.5,0-1,0.4-1,1c0,0.1,0,0.2,0.1,0.3l11.1,30.2C40.1,31.8,40.4,32,40.8,32z'
fill='#0073FF'
/>
<path
d='M39.7,64h6.4c0.5,0,1-0.4,1-1c0-0.1,0-0.2-0.1-0.3L24.2,0.6C24.1,0.3,23.7,0,23.3,0h-6.4c-0.5,0-1,0.4-1,1c0,0.1,0,0.2,0.1,0.3l22.8,62.1C38.9,63.8,39.3,64,39.7,64z'
fill='#0073FF'
/>
<path
d='M27,64h6.4c0.5,0,0.9-0.4,1-0.9c0-0.1,0-0.3-0.1-0.4L23.2,32.6c-0.1-0.4-0.5-0.6-0.9-0.6h-6.5c-0.5,0-0.9,0.5-0.9,1c0,0.1,0,0.2,0.1,0.3l11,30.1C26.3,63.8,26.6,64,27,64z'
fill='#0073FF'
/>
<path
d='M41.6,1.3l5.2,14.1c0.1,0.4,0.5,0.6,0.9,0.6H54c0.5,0,1-0.4,1-1c0-0.1,0-0.2-0.1-0.3L49.7,0.6C49.6,0.3,49.3,0,48.9,0h-6.4c-0.5,0-1,0.4-1,1C41.5,1.1,41.5,1.2,41.6,1.3z'
fill='#0073FF'
/>
<path
d='M15.2,64h6.4c0.5,0,1-0.4,1-1c0-0.1,0-0.2-0.1-0.3l-5.2-14.1c-0.1-0.4-0.5-0.6-0.9-0.6H10c-0.5,0-1,0.4-1,1c0,0.1,0,0.2,0.1,0.3l5.2,14.1C14.4,63.8,14.8,64,15.2,64z'
fill='#0073FF'
/>
</svg>
)
}

export function BedrockIcon(props: SVGProps<SVGSVGElement>) {
const id = useId()
const gradientId = `bedrock_gradient_${id}`
Expand Down
2 changes: 2 additions & 0 deletions apps/docs/components/ui/icon-mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ import {
FindymailIcon,
FirecrawlIcon,
FirefliesIcon,
FivetranIcon,
FlintIcon,
GammaIcon,
GithubIcon,
Expand Down Expand Up @@ -420,6 +421,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
firecrawl: FirecrawlIcon,
fireflies: FirefliesIcon,
fireflies_v2: FirefliesIcon,
fivetran: FivetranIcon,
flint: FlintIcon,
function: CodeIcon,
gamma: GammaIcon,
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/content/docs/cli/reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4522,7 +4522,7 @@ sim selectors get [options]

| Option | Required | Description |
| --- | --- | --- |
| `--selector-key <value>` | Yes | Registered selector key for discovering this field’s destination options. Accepted values: `airtable.bases`, `airtable.tables`, `asana.workspaces`, `attio.lists`, `attio.objects`, `bigquery.datasets`, `bigquery.tables`, `bitbucket.workspaces`, `bitbucket.repositories`, `calcom.eventTypes`, `calcom.schedules`, `clickup.workspaces`, `clickup.spaces`, `clickup.folders`, `clickup.lists`, `coda.docs`, `coda.pages`, `coda.tables`, `coda.columns`, `coda.rows`, `coda.formulas`, `coda.controls`, `coda.folders`, `coda.permissions`, `confluence.spaces`, `confluence.spacesById`, `confluence.pages`, `google.tasks.lists`, `gmail.labels`, `google.calendar`, `google.drive`, `google.sheets`, `harmonic.savedSearches`, `hubspot.lists`, `hubspot.owners`, `hubspot.pipelines`, `hubspot.pipelineStages`, `hubspot.properties`, `jsm.requestTypes`, `jsm.serviceDesks`, `microsoft.planner.plans`, `notion.databases`, `notion.pages`, `netsuite.recordTypes`, `netsuite.asyncTasks`, `pipedrive.pipelines`, `sharepoint.lists`, `trello.boards`, `zoho_desk.organizations`, `zoho_desk.departments`, `zoho_desk.agents`, `zoom.meetings`, `slack.channels`, `snowflake.databases`, `snowflake.schemas`, `snowflake.tables`, `snowflake.warehouses`, `snowflake.roles`, `snowflake.fileFormats`, `snowflake.procedures`, `slack.users`, `outlook.folders`, `outlook.calendars`, `microsoft.teams`, `microsoft.chats`, `microsoft.channels`, `microsoft.planner`, `onedrive.files`, `onedrive.folders`, `sharepoint.sites`, `microsoft.excel`, `microsoft.excel.drives`, `microsoft.excel.sheets`, `microsoft.word`, `wealthbox.contacts`, `jira.issues`, `jira.projects`, `jira.projectKeys`, `linear.projects`, `linear.teams`, `monday.boards`, `monday.groups`, `webflow.sites`, `webflow.collections`, `webflow.items`, `planetscale.databases`, `powerbi.workspaces`, `powerbi.datasets`, `powerbi.reports`, `planetscale.branches`, `planetscale.backups`, `planetscale.deployRequests`, `cloudwatch.logGroups`, `cloudwatch.logStreams`, `imap.mailboxes`, `mcp.tools`, `managedAgent.agents`, `managedAgent.environments`, `managedAgent.vaults`, `managedAgent.memoryStores`, `knowledge.documents`, `sim.workflows`, `table.columns`, `table.outputColumns`, `workspace.secretNames`, `workspace.sandboxes`, `providers.ollamaEmbeddingModels`, `providers.openrouterEmbeddingModels`. |
| `--selector-key <value>` | Yes | Registered selector key for discovering this field’s destination options. Accepted values: `airtable.bases`, `airtable.tables`, `asana.workspaces`, `attio.lists`, `attio.objects`, `bigquery.datasets`, `bigquery.tables`, `bitbucket.workspaces`, `bitbucket.repositories`, `calcom.eventTypes`, `calcom.schedules`, `clickup.workspaces`, `clickup.spaces`, `clickup.folders`, `clickup.lists`, `coda.docs`, `coda.pages`, `coda.tables`, `coda.columns`, `coda.rows`, `coda.formulas`, `coda.controls`, `coda.folders`, `coda.permissions`, `confluence.spaces`, `confluence.spacesById`, `confluence.pages`, `google.tasks.lists`, `fivetran.groups`, `fivetran.connections`, `gmail.labels`, `google.calendar`, `google.drive`, `google.sheets`, `harmonic.savedSearches`, `hubspot.lists`, `hubspot.owners`, `hubspot.pipelines`, `hubspot.pipelineStages`, `hubspot.properties`, `jsm.requestTypes`, `jsm.serviceDesks`, `microsoft.planner.plans`, `notion.databases`, `notion.pages`, `netsuite.recordTypes`, `netsuite.asyncTasks`, `pipedrive.pipelines`, `sharepoint.lists`, `trello.boards`, `zoho_desk.organizations`, `zoho_desk.departments`, `zoho_desk.agents`, `zoom.meetings`, `slack.channels`, `snowflake.databases`, `snowflake.schemas`, `snowflake.tables`, `snowflake.warehouses`, `snowflake.roles`, `snowflake.fileFormats`, `snowflake.procedures`, `slack.users`, `outlook.folders`, `outlook.calendars`, `microsoft.teams`, `microsoft.chats`, `microsoft.channels`, `microsoft.planner`, `onedrive.files`, `onedrive.folders`, `sharepoint.sites`, `microsoft.excel`, `microsoft.excel.drives`, `microsoft.excel.sheets`, `microsoft.word`, `wealthbox.contacts`, `jira.issues`, `jira.projects`, `jira.projectKeys`, `linear.projects`, `linear.teams`, `monday.boards`, `monday.groups`, `webflow.sites`, `webflow.collections`, `webflow.items`, `planetscale.databases`, `powerbi.workspaces`, `powerbi.datasets`, `powerbi.reports`, `planetscale.branches`, `planetscale.backups`, `planetscale.deployRequests`, `cloudwatch.logGroups`, `cloudwatch.logStreams`, `imap.mailboxes`, `mcp.tools`, `managedAgent.agents`, `managedAgent.environments`, `managedAgent.vaults`, `managedAgent.memoryStores`, `knowledge.documents`, `sim.workflows`, `table.columns`, `table.outputColumns`, `workspace.secretNames`, `workspace.sandboxes`, `providers.ollamaEmbeddingModels`, `providers.openrouterEmbeddingModels`. |
| `--context <json\|@file>` | No | Only the dependencies declared by the selector, such as oauthCredential and channelId. Missing OAuth connections require human authorization. (JSON, or @path / @- to read a file or stdin). |
| `--id <value>` | Yes | Resource identifier. |

Expand All @@ -4542,7 +4542,7 @@ sim selectors list [options]

| Option | Required | Description |
| --- | --- | --- |
| `--selector-key <value>` | Yes | Registered selector key for discovering this field’s destination options. Accepted values: `airtable.bases`, `airtable.tables`, `asana.workspaces`, `attio.lists`, `attio.objects`, `bigquery.datasets`, `bigquery.tables`, `bitbucket.workspaces`, `bitbucket.repositories`, `calcom.eventTypes`, `calcom.schedules`, `clickup.workspaces`, `clickup.spaces`, `clickup.folders`, `clickup.lists`, `coda.docs`, `coda.pages`, `coda.tables`, `coda.columns`, `coda.rows`, `coda.formulas`, `coda.controls`, `coda.folders`, `coda.permissions`, `confluence.spaces`, `confluence.spacesById`, `confluence.pages`, `google.tasks.lists`, `gmail.labels`, `google.calendar`, `google.drive`, `google.sheets`, `harmonic.savedSearches`, `hubspot.lists`, `hubspot.owners`, `hubspot.pipelines`, `hubspot.pipelineStages`, `hubspot.properties`, `jsm.requestTypes`, `jsm.serviceDesks`, `microsoft.planner.plans`, `notion.databases`, `notion.pages`, `netsuite.recordTypes`, `netsuite.asyncTasks`, `pipedrive.pipelines`, `sharepoint.lists`, `trello.boards`, `zoho_desk.organizations`, `zoho_desk.departments`, `zoho_desk.agents`, `zoom.meetings`, `slack.channels`, `snowflake.databases`, `snowflake.schemas`, `snowflake.tables`, `snowflake.warehouses`, `snowflake.roles`, `snowflake.fileFormats`, `snowflake.procedures`, `slack.users`, `outlook.folders`, `outlook.calendars`, `microsoft.teams`, `microsoft.chats`, `microsoft.channels`, `microsoft.planner`, `onedrive.files`, `onedrive.folders`, `sharepoint.sites`, `microsoft.excel`, `microsoft.excel.drives`, `microsoft.excel.sheets`, `microsoft.word`, `wealthbox.contacts`, `jira.issues`, `jira.projects`, `jira.projectKeys`, `linear.projects`, `linear.teams`, `monday.boards`, `monday.groups`, `webflow.sites`, `webflow.collections`, `webflow.items`, `planetscale.databases`, `powerbi.workspaces`, `powerbi.datasets`, `powerbi.reports`, `planetscale.branches`, `planetscale.backups`, `planetscale.deployRequests`, `cloudwatch.logGroups`, `cloudwatch.logStreams`, `imap.mailboxes`, `mcp.tools`, `managedAgent.agents`, `managedAgent.environments`, `managedAgent.vaults`, `managedAgent.memoryStores`, `knowledge.documents`, `sim.workflows`, `table.columns`, `table.outputColumns`, `workspace.secretNames`, `workspace.sandboxes`, `providers.ollamaEmbeddingModels`, `providers.openrouterEmbeddingModels`. |
| `--selector-key <value>` | Yes | Registered selector key for discovering this field’s destination options. Accepted values: `airtable.bases`, `airtable.tables`, `asana.workspaces`, `attio.lists`, `attio.objects`, `bigquery.datasets`, `bigquery.tables`, `bitbucket.workspaces`, `bitbucket.repositories`, `calcom.eventTypes`, `calcom.schedules`, `clickup.workspaces`, `clickup.spaces`, `clickup.folders`, `clickup.lists`, `coda.docs`, `coda.pages`, `coda.tables`, `coda.columns`, `coda.rows`, `coda.formulas`, `coda.controls`, `coda.folders`, `coda.permissions`, `confluence.spaces`, `confluence.spacesById`, `confluence.pages`, `google.tasks.lists`, `fivetran.groups`, `fivetran.connections`, `gmail.labels`, `google.calendar`, `google.drive`, `google.sheets`, `harmonic.savedSearches`, `hubspot.lists`, `hubspot.owners`, `hubspot.pipelines`, `hubspot.pipelineStages`, `hubspot.properties`, `jsm.requestTypes`, `jsm.serviceDesks`, `microsoft.planner.plans`, `notion.databases`, `notion.pages`, `netsuite.recordTypes`, `netsuite.asyncTasks`, `pipedrive.pipelines`, `sharepoint.lists`, `trello.boards`, `zoho_desk.organizations`, `zoho_desk.departments`, `zoho_desk.agents`, `zoom.meetings`, `slack.channels`, `snowflake.databases`, `snowflake.schemas`, `snowflake.tables`, `snowflake.warehouses`, `snowflake.roles`, `snowflake.fileFormats`, `snowflake.procedures`, `slack.users`, `outlook.folders`, `outlook.calendars`, `microsoft.teams`, `microsoft.chats`, `microsoft.channels`, `microsoft.planner`, `onedrive.files`, `onedrive.folders`, `sharepoint.sites`, `microsoft.excel`, `microsoft.excel.drives`, `microsoft.excel.sheets`, `microsoft.word`, `wealthbox.contacts`, `jira.issues`, `jira.projects`, `jira.projectKeys`, `linear.projects`, `linear.teams`, `monday.boards`, `monday.groups`, `webflow.sites`, `webflow.collections`, `webflow.items`, `planetscale.databases`, `powerbi.workspaces`, `powerbi.datasets`, `powerbi.reports`, `planetscale.branches`, `planetscale.backups`, `planetscale.deployRequests`, `cloudwatch.logGroups`, `cloudwatch.logStreams`, `imap.mailboxes`, `mcp.tools`, `managedAgent.agents`, `managedAgent.environments`, `managedAgent.vaults`, `managedAgent.memoryStores`, `knowledge.documents`, `sim.workflows`, `table.columns`, `table.outputColumns`, `workspace.secretNames`, `workspace.sandboxes`, `providers.ollamaEmbeddingModels`, `providers.openrouterEmbeddingModels`. |
| `--context <json\|@file>` | No | Only the dependencies declared by the selector, such as oauthCredential and channelId. Missing OAuth connections require human authorization. (JSON, or @path / @- to read a file or stdin). |
| `--search <value>` | No | Provider option search text. |
| `--cursor <value>` | No | Continue from nextCursor returned by a previous result. |
Expand Down
Loading
Loading