Skip to content

Commit f5b8994

Browse files
Merge remote-tracking branch 'origin/staging' into feat/sim-cli
2 parents d5190c4 + 9664e7e commit f5b8994

143 files changed

Lines changed: 13303 additions & 298 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/docs/content/docs/en/integrations/ashby.mdx

Lines changed: 272 additions & 12 deletions
Large diffs are not rendered by default.

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

Lines changed: 12 additions & 8 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, Evernote, Fireflies, GitHub, and Gmail" width={800} height={500} />
1616

17-
Sim ships with 49 built-in connectors:
17+
Sim ships with 61 built-in connectors:
1818

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

3536
## Adding a Connector
3637

@@ -55,6 +56,9 @@ Other connectors use **API keys** or **personal access tokens** instead. The set
5556
| **YouTube** | YouTube Data API key from the Google Cloud Console |
5657
| **Amazon S3** | Secret Access Key (the Access Key ID, region, and bucket are entered as config fields) |
5758
| **Sentry** | Auth token with `project:read` and `event:read` scopes |
59+
| **PagerDuty** | REST API key from Integrations → API Access Keys |
60+
| **SFTP** | Password or unencrypted private key (host, port, username, and root path are entered as config fields) |
61+
| **Mintlify** | API key — optional for public documentation sites, which sync from `llms.txt` |
5862

5963
<Callout type="info">
6064
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/workflows/blocks/condition.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ Reference an earlier output inside an expression with a [connection tag](/workfl
3131
<user.email>.endsWith('@company.com') && <user.plan> === 'pro'
3232
```
3333

34+
Read an [environment variable](/workflows/variables#environment-variables) with `{{KEY}}`:
35+
36+
```javascript
37+
{{MAX_RETRIES}} === 3
38+
{{FEATURE_ON}} === true
39+
{{TIER}} === 'pro'
40+
```
41+
42+
Numbers, booleans, and `null` compare as literals. Every other value is bound as a string, so an apostrophe, quote, or newline inside a secret cannot change what the expression means.
43+
3444
<Callout type="info">
3545
If an expression throws, for example because it reads a field that is not there, the block errors and the run follows the [error path](/workflows/connections) if one is connected. Guard missing values with optional chaining (`?.`) or a null check.
3646
</Callout>

apps/docs/content/docs/en/workflows/blocks/function.mdx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,25 @@ const apiKey = {{API_KEY}};
5858

5959
Existing quoted and embedded forms are also supported, including `"{{API_KEY}}"`, `"Bearer {{API_KEY}}"`, and placeholders in template literals. Function and Custom Tool code use the same compiler at the execution boundary. It binds the secret separately from the source instead of pasting plaintext into your code, so quotes, backslashes, newlines, and string values such as `"123"` and `"true"` retain their exact contents and do not become JavaScript or Python literals of another type.
6060

61+
### Placeholders are always strings
62+
63+
A placeholder is bound as a value, never parsed as source. That is what keeps a secret from running as code — but it also means `{{KEY}}` always evaluates to a **string**, whatever the value looks like. Convert it when your code needs another type:
64+
65+
```javascript
66+
const retries = Number({{MAX_RETRIES}});
67+
const enabled = {{FEATURE_ON}} === 'true';
68+
const patterns = JSON.parse({{PATTERN_LIST}});
69+
```
70+
71+
In Python, use `int()`, `== "true"`, and `json.loads()` the same way.
72+
73+
Two cases are easy to miss:
74+
75+
- **Booleans.** A bare `if ({{FEATURE_ON}})` is always true, because the string `"false"` is truthy. Compare against `'true'` instead.
76+
- **Lists and objects.** Store the value as JSON so you can parse it back. `["^[A-Z]{2}-\\d{4}$", "^\\d{7,15}$"]` becomes an array; a JavaScript array of regex literals does not. It arrives as one long string, and iterating it walks character by character.
77+
78+
[Condition](/workflows/blocks/condition) blocks differ in one way: a number, boolean, or `null` value compares as a literal there, so `{{MAX_RETRIES}} === 3` is true. Every other value is a string, exactly as it is here.
79+
6180
JavaScript regex literals can contain a placeholder:
6281

6382
```javascript

apps/docs/content/docs/en/workflows/variables.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ Reference them with double curly braces in any block field, including Agent syst
8585
Environment variable names must start with a letter or underscore and contain only letters, numbers, and underscores, like `MY_API_KEY`.
8686
</Callout>
8787

88+
Inside Function and Custom Tool code, `{{KEY}}` always evaluates to a **string** — the value is bound, never parsed as source. Use `Number()`, a `=== 'true'` comparison, or `JSON.parse()` when you need another type. See [secret placeholders in code](/workflows/blocks/function#placeholders-are-always-strings).
89+
8890
### Personal vs. workspace
8991

9092
| Scope | Visible to | Use for |

apps/docs/openapi-v2-billing.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@
4747
"schema": {
4848
"description": "Workspace whose payer should be resolved. Workspace API keys are pinned to their own workspace.",
4949
"type": "string",
50-
"minLength": 1
50+
"minLength": 1,
51+
"maxLength": 128
5152
}
5253
}
5354
],
@@ -133,7 +134,8 @@
133134
"schema": {
134135
"description": "Restrict results to one workspace whose payer the caller can inspect.",
135136
"type": "string",
136-
"minLength": 1
137+
"minLength": 1,
138+
"maxLength": 128
137139
}
138140
},
139141
{

apps/docs/openapi-v2-files-audit.json

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"schema": {
5252
"type": "string",
5353
"minLength": 1,
54+
"maxLength": 128,
5455
"description": "Workspace whose files should be listed."
5556
}
5657
},
@@ -343,6 +344,7 @@
343344
"schema": {
344345
"type": "string",
345346
"minLength": 1,
347+
"maxLength": 128,
346348
"description": "Workspace that owns the upload session."
347349
}
348350
},
@@ -433,6 +435,7 @@
433435
"schema": {
434436
"type": "string",
435437
"minLength": 1,
438+
"maxLength": 128,
436439
"description": "Workspace that owns the upload session."
437440
}
438441
},
@@ -537,6 +540,7 @@
537540
"schema": {
538541
"type": "string",
539542
"minLength": 1,
543+
"maxLength": 128,
540544
"description": "Workspace that owns the upload session."
541545
}
542546
},
@@ -629,6 +633,7 @@
629633
"schema": {
630634
"type": "string",
631635
"minLength": 1,
636+
"maxLength": 128,
632637
"description": "Workspace that owns the file."
633638
}
634639
}
@@ -721,6 +726,7 @@
721726
"schema": {
722727
"type": "string",
723728
"minLength": 1,
729+
"maxLength": 128,
724730
"description": "Workspace that owns the file."
725731
}
726732
}
@@ -965,8 +971,21 @@
965971
"schema": {
966972
"type": "string",
967973
"minLength": 1,
974+
"maxLength": 128,
968975
"description": "Workspace that owns the file."
969976
}
977+
},
978+
{
979+
"name": "scope",
980+
"in": "query",
981+
"required": false,
982+
"description": "Which lifecycle set to read from: `active` (default) resolves live files only and returns `404` for a file a `DELETE` soft-deleted; `archived` also resolves soft-deleted files, so metadata stays readable before `POST /files/{fileId}/restore`. Authorization is identical for both.",
983+
"schema": {
984+
"default": "active",
985+
"description": "Which lifecycle set to read from: `active` (default) resolves live files only and returns `404` for a file a `DELETE` soft-deleted; `archived` also resolves soft-deleted files, so metadata stays readable before `POST /files/{fileId}/restore`. Authorization is identical for both.",
986+
"type": "string",
987+
"enum": ["active", "archived"]
988+
}
970989
}
971990
],
972991
"responses": {
@@ -1060,7 +1079,8 @@
10601079
"schema": {
10611080
"description": "Filter to actions in one workspace.",
10621081
"type": "string",
1063-
"minLength": 1
1082+
"minLength": 1,
1083+
"maxLength": 128
10641084
}
10651085
},
10661086
{
@@ -1361,6 +1381,7 @@
13611381
"schema": {
13621382
"type": "string",
13631383
"minLength": 1,
1384+
"maxLength": 128,
13641385
"description": "Workspace that owns the file."
13651386
}
13661387
}
@@ -1655,6 +1676,7 @@
16551676
"schema": {
16561677
"type": "string",
16571678
"minLength": 1,
1679+
"maxLength": 128,
16581680
"description": "Workspace whose folders should be listed."
16591681
}
16601682
},
@@ -1898,6 +1920,7 @@
18981920
"schema": {
18991921
"type": "string",
19001922
"minLength": 1,
1923+
"maxLength": 128,
19011924
"description": "Workspace containing the folder."
19021925
}
19031926
},
@@ -2437,6 +2460,7 @@
24372460
"workspaceId": {
24382461
"type": "string",
24392462
"minLength": 1,
2463+
"maxLength": 128,
24402464
"description": "Workspace in which to create the file."
24412465
},
24422466
"name": {
@@ -2651,6 +2675,7 @@
26512675
"workspaceId": {
26522676
"type": "string",
26532677
"minLength": 1,
2678+
"maxLength": 128,
26542679
"description": "Workspace in which the file will be registered."
26552680
},
26562681
"name": {
@@ -2822,6 +2847,7 @@
28222847
"workspaceId": {
28232848
"type": "string",
28242849
"minLength": 1,
2850+
"maxLength": 128,
28252851
"description": "Workspace that owns the file."
28262852
},
28272853
"name": {
@@ -2877,6 +2903,7 @@
28772903
"workspaceId": {
28782904
"type": "string",
28792905
"minLength": 1,
2906+
"maxLength": 128,
28802907
"description": "Workspace that owns the archived file."
28812908
}
28822909
},
@@ -3352,6 +3379,7 @@
33523379
"workspaceId": {
33533380
"type": "string",
33543381
"minLength": 1,
3382+
"maxLength": 128,
33553383
"description": "Workspace containing the files."
33563384
},
33573385
"fileIds": {
@@ -3446,6 +3474,7 @@
34463474
"workspaceId": {
34473475
"type": "string",
34483476
"minLength": 1,
3477+
"maxLength": 128,
34493478
"description": "Workspace that owns the file."
34503479
},
34513480
"isActive": {
@@ -3496,6 +3525,7 @@
34963525
"workspaceId": {
34973526
"type": "string",
34983527
"minLength": 1,
3528+
"maxLength": 128,
34993529
"description": "Workspace that owns the file."
35003530
},
35013531
"content": {
@@ -3572,6 +3602,7 @@
35723602
"workspaceId": {
35733603
"type": "string",
35743604
"minLength": 1,
3605+
"maxLength": 128,
35753606
"description": "Workspace containing the files."
35763607
},
35773608
"fileIds": {
@@ -3683,6 +3714,7 @@
36833714
"workspaceId": {
36843715
"type": "string",
36853716
"minLength": 1,
3717+
"maxLength": 128,
36863718
"description": "Workspace in which to create the folder."
36873719
},
36883720
"path": {
@@ -3701,6 +3733,7 @@
37013733
"workspaceId": {
37023734
"type": "string",
37033735
"minLength": 1,
3736+
"maxLength": 128,
37043737
"description": "Workspace containing the folder."
37053738
},
37063739
"path": {

0 commit comments

Comments
 (0)