Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
abc5ead
chore(api-keys): remove the api-key-read-only flag now that read-only…
waleedlatif1 Nov 11, 2026
11676cb
docs(library): update best-ai-agents-sales-crm-automation (#9882)
waleedlatif1 Nov 11, 2026
83c7a25
feat(library): Best AI Agent Platforms for HR Teams Answering Employe…
waleedlatif1 Nov 11, 2026
a52e2f6
feat(library): Best AI Agents for GitHub Pull Requests, Issue Triage,…
waleedlatif1 Nov 11, 2026
9c3477d
fix(errors): actionable table read timeouts, 409 for duplicate custom…
waleedlatif1 Nov 11, 2026
d43f163
fix(tables): show rejected filter errors in the grid and fill imports…
waleedlatif1 Nov 11, 2026
376e588
docs(library): update postgres-mcp-server-ai-agents (#9885)
waleedlatif1 Nov 11, 2026
b719649
feat(library): Best AI Agents for Spreadsheet Analysis in Excel and G…
waleedlatif1 Nov 11, 2026
e675e62
feat(table): add Columns to Return to the legacy Table block's Query …
waleedlatif1 Nov 11, 2026
d7f3158
fix(http): stop treating 200 bodies with status and data keys as prox…
waleedlatif1 Nov 11, 2026
be29ea1
fix(chat): bring a restored workflow's chat back online when it is re…
waleedlatif1 Nov 11, 2026
5ea7515
chore(deps): upgrade cronstrue to 3.38.0 (#9891)
waleedlatif1 Nov 11, 2026
48cbdc1
chore(deps): upgrade monaco-editor to 0.57.0 (#9892)
waleedlatif1 Nov 11, 2026
bde919f
chore(deps): bump electron-builder to 26.18.0 (#9893)
waleedlatif1 Nov 11, 2026
5a35ed6
chore(deps): bump streamdown to 2.7.1 (#9897)
waleedlatif1 Nov 11, 2026
a9ffabf
chore(deps): bump knip to 6.44.1 (#9896)
waleedlatif1 Nov 11, 2026
d6b2fec
chore(deps): bump tiptap to 3.32.2 and keep headings that open a list…
waleedlatif1 Nov 11, 2026
d93bfa4
chore(deps): bump mdast-util-to-markdown to 2.2.2 (#9899)
waleedlatif1 Nov 11, 2026
cc22724
chore(deps): upgrade docx to 9.15.2 (#9895)
waleedlatif1 Nov 11, 2026
46707d6
chore(deps): bump AWS SDK to 3.1162.0, OpenTelemetry to 0.223.0/2.12.…
waleedlatif1 Nov 11, 2026
a716b1b
chore(deps): bump turbo to 2.11.10 (#9903)
waleedlatif1 Nov 11, 2026
416a127
fix(workflows): refuse operation edits that would overwrite a concurr…
waleedlatif1 Nov 11, 2026
70ec98a
chore(deps): update minor and patch dependencies past the release-age…
waleedlatif1 Nov 11, 2026
c844be8
docs(api): guide for building and running workflows with the API (#9901)
waleedlatif1 Nov 11, 2026
ba66dfd
feat(api): agent identity on v2 meta, scoped CLI pairing keys, and v2…
waleedlatif1 Nov 11, 2026
3d8996f
feat(api): workflow outline, workspace schedules list, clearer v2 err…
waleedlatif1 Nov 11, 2026
3453077
chore(deps): tidy comments and override order from the dependency swe…
waleedlatif1 Nov 11, 2026
c6d8c3c
fix(selectors): redact email path segments from provider failure logs…
waleedlatif1 Nov 11, 2026
b680ad4
fix(http): keep unwrapping legacy success envelopes for existing work…
waleedlatif1 Nov 11, 2026
9b58238
fix(api): release-audit follow-ups for the agent API work (#9910)
waleedlatif1 Nov 11, 2026
5bbf4e7
feat(api): failing block on polled runs, deployed input schema, pause…
waleedlatif1 Nov 11, 2026
f947d95
feat(credentials): audit fixes and non-OAuth auth for CrowdStrike, Da…
waleedlatif1 Nov 12, 2026
27c25c0
fix(security): refuse an extra slash after https:// in typed base URL…
waleedlatif1 Nov 12, 2026
b4bee71
fix(credentials): match JSON 403s case-insensitively and refuse a mal…
waleedlatif1 Nov 12, 2026
222ba07
fix(api): attribute a polled run's failure only to the block that cau…
waleedlatif1 Nov 12, 2026
d026560
improvement(table): document that a column selection matching no colu…
waleedlatif1 Nov 12, 2026
05a5990
feat(aws-marketplace): gate Enterprise on the AWS Marketplace contain…
waleedlatif1 Nov 12, 2026
d26b61f
fix(credentials): age-gate 403 token eviction and tidy the client-cre…
waleedlatif1 Nov 12, 2026
56f7ed7
refactor(credentials): resolve Vanta tokens through the coordinated c…
waleedlatif1 Nov 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .agents/skills/v2-api-conventions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The v2 surface makes one promise: **every response is the same two shapes, and a
```
success (single) { "data": {...} }
success (collection) { "data": [...], "nextCursor": "..." | null }
failure (always) { "error": { "code": "...", "message": "...", "details"?: ... } }
failure (always) { "error": { "code": "...", "message": "...", "details"?: ..., "requestId"?: "..." } }
```

Nothing else at the top level. No `success: true`, no bare `{ "error": "string" }`, no HTML.
Expand Down Expand Up @@ -214,7 +214,7 @@ The consequence to keep true: **never put a resource id, filter, or scope into a

Run this against any new or changed v2 endpoint.

- [ ] Success body is exactly `{data}` or `{data, nextCursor}`; failures are exactly `{error:{code,message,details?}}`.
- [ ] Success body is exactly `{data}` or `{data, nextCursor}`; failures are exactly `{error:{code,message,details?,requestId?}}`, where `v2Error` alone sets `requestId` (the `x-request-id` value).
- [ ] Route uses a shared builder; no hand-built `NextResponse.json`.
- [ ] Query and body schemas are `.strict()`.
- [ ] The contract declares a `query` — `noInputSchema` when the endpoint takes no query params, never omission.
Expand Down
4 changes: 2 additions & 2 deletions .github/CI.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CI selection and acceptance ownership

The `changes` job runs Turborepo 2.9.14's `affectedTasks` query before installing application dependencies or provisioning services. `turbo.json` records package dependency propagation; `apps/sim/turbo.json` partitions the app into shared runtime, server, workspace UI, and acceptance tasks. `.github/ci-suites.json` turns those tasks into job matrices. The uploaded `ci-plan` artifact names changed files, selected tasks, attribution reasons, and any fallback.
The `changes` job runs Turborepo 2.11.10's `affectedTasks` query before installing application dependencies or provisioning services. `turbo.json` records package dependency propagation; `apps/sim/turbo.json` partitions the app into shared runtime, server, workspace UI, and acceptance tasks. `.github/ci-suites.json` turns those tasks into job matrices. The uploaded `ci-plan` artifact names changed files, selected tasks, attribution reasons, and any fallback.

A PR compares the checked-out GitHub merge commit with its first parent: the actual target revision tested by that merge. The PR event's base SHA can become stale when the target advances. Scoping requires a matching GitHub merge ref and SHA, exactly two merge parents, and a usable target parent; otherwise every check runs. This works with the existing depth-two checkout without fetching older ancestry. Main/staging pushes execute all checks; the parent `ci` workflow skips checks on `dev` pushes, while PRs targeting `dev` still run checks. A manual `checks` run executes all checks unless supplied a full base commit SHA to reproduce a scoped plan. Missing history, an empty diff, unknown files outside the workspace graph, root script/CI changes, or a planner error run every check. Missing selection outputs fail the aggregate gate. The gate also rejects an omitted dependency, any failed/cancelled job, and any skip that its explicit selection flag did not authorize.

Expand All @@ -24,7 +24,7 @@ Integration also depends on workspace UI because the desktop executor integratio

SEO depends on workspace UI and server code: landing pages reuse workspace pricing and preview components, provider models/pricing, and the block registry. These directory boundaries are not isolated application dependency graphs.

`affectedTasks` already uses task inputs. Do not enable `futureFlags.affectedUsingTaskInputs` just for this planner: that flag also changes pruning, which can pull CI-only cross-app task dependencies into production Docker contexts.
`affectedTasks` matches task inputs only under a task-level future flag; without one it reports every task of an affected package. The root `turbo.json` enables `futureFlags.filterUsingTasks`, which CI's package-name `--filter` calls are unaffected by. Do not use `futureFlags.affectedUsingTaskInputs` instead: that flag also changes pruning, which pulls CI-only cross-app task dependencies into production Docker contexts. `affectedTasks.items` also lists the prerequisites of affected tasks, so the planner selects `docs#build` through its own task filter, which applies before prerequisites are added.
Comment thread
waleedlatif1 marked this conversation as resolved.
Resolved

Affected type-checks follow the package graph too; repository audits and lint run whenever the checks workflow runs. Workspace-only unit jobs use a free GitHub runner and do not start the app test shards.

Expand Down
6 changes: 6 additions & 0 deletions .github/scripts/ci-plan.gql
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,10 @@ query($base: String!, $head: String!) {
}
}
}
# `items` also lists the prerequisites of affected tasks, and docs#build is one for
# ci:e2e-docs-platform. The task filter applies before prerequisites are added, so this
# selection holds docs#build only when the docs site itself changed.
docsSite: affectedTasks(base: $base, head: $head, tasks: ["docs#build"]) {
items { fullName }
}
}
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
"@types/react": "^19",
"@types/react-dom": "^19",
"electron": "43.8.1",
"electron-builder": "26.15.3",
"electron-builder": "26.18.0",
"esbuild": "0.28.2",
"jsdom": "^26.0.0",
"postcss": "^8.5.30",
Expand Down
8 changes: 8 additions & 0 deletions apps/docs/components/ui/icon-mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
credential: CredentialIcon,
credential_group: GridOffset,
crowdstrike: CrowdStrikeIcon,
crowdstrike_v2: CrowdStrikeIcon,
crunchbase: CrunchbaseIcon,
crunchbase_v2: CrunchbaseIcon,
cursor: CursorIcon,
Expand All @@ -418,6 +419,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
databricks: DatabricksIcon,
databricks_v2: DatabricksIcon,
datadog: DatadogIcon,
datadog_v2: DatadogIcon,
datagma: DatagmaIcon,
daytona: DaytonaIcon,
daytona_v2: DaytonaIcon,
Expand Down Expand Up @@ -487,6 +489,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
gmail: GmailIcon,
gmail_v2: GmailIcon,
gong: GongIcon,
gong_v2: GongIcon,
google_ads: GoogleAdsIcon,
google_appsheet: GoogleAppsheetIcon,
google_bigquery: GoogleBigQueryIcon,
Expand Down Expand Up @@ -658,6 +661,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
plane: PlaneIcon,
plane_v2: PlaneIcon,
planetscale: PlanetScaleIcon,
planetscale_v2: PlanetScaleIcon,
polymarket: PolymarketIcon,
postgresql: PostgresIcon,
posthog: PosthogIcon,
Expand Down Expand Up @@ -703,6 +707,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
s3: S3Icon,
s3_v2: S3Icon,
sailpoint: SailPointIcon,
sailpoint_v2: SailPointIcon,
salesforce: SalesforceIcon,
sap_concur: SapConcurIcon,
sap_s4hana: SapS4HanaIcon,
Expand All @@ -719,6 +724,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
serper: SerperIcon,
servicenow: ServiceNowIcon,
servicenow_v2: ServiceNowIcon,
servicenow_v3: ServiceNowIcon,
ses: SESIcon,
ses_v2: SESIcon,
sftp: SftpIcon,
Expand Down Expand Up @@ -823,12 +829,14 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
youtube: YouTubeIcon,
youtube_v2: YouTubeIcon,
zendesk: ZendeskIcon,
zendesk_v2: ZendeskIcon,
zep: ZepIcon,
zep_v2: ZepIcon,
zerobounce: ZeroBounceIcon,
zoho_desk: ZohoDeskIcon,
zoom: ZoomIcon,
zoominfo: ZoomInfoIcon,
zoominfo_v2: ZoomInfoIcon,
}

export const coreBlockTypes = new Set([
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"pages": [
"listWorkflowRunsV2",
"listPausedWorkflowRunsV2",
"getWorkflowRunV2",
"downloadWorkflowRunFileV2",
"resumeWorkflowRunV2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"duplicateWorkflow",
"moveWorkflows",
"getWorkflowState",
"getWorkflowOutline",
"replaceWorkflowState",
"applyWorkflowOperations",
"applyWorkflowVariables",
Expand All @@ -24,6 +25,7 @@
"updateWorkflowPublicApi",
"listWorkflowTriggers",
"updateWorkflowTrigger",
"listWorkspaceSchedules",
"deployWorkflow",
"undeployWorkflow",
"rollbackWorkflow",
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/content/docs/api-reference/authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ Delete a key from the same settings page to revoke it. Update applications that

A read-only key cannot change workspace resources or run, resume, or cancel workflows. Reads can still cost credits: searches use embedding credits, and search chat uses model credits and keeps a private conversation history. Selector lookups call third-party services with your connected accounts.

A refused request fails with `403` and the message `This API key is read-only and cannot perform this operation`. Where the surface carries a code, it is `READ_ONLY_API_KEY`: in `error.details.code` on the v2 API and the Sim MCP server, in `details.code` on the v1 API and workflow execution, and in `error.data.code` on a workflow MCP server.
A refused request fails with `403` and the message `This API key is read-only and cannot perform this operation. Use a full-access API key.` Where the surface carries a code, it is `READ_ONLY_API_KEY`: in `error.details.code` on the v2 API and the Sim MCP server, in `details.code` on the v1 API and workflow execution, and in `error.data.code` on a workflow MCP server.

Access narrows a key; it never grants more than the key's identity already has. Access is fixed at creation, so create a new key to change it. Keys created before access levels existed have full access. Keys created from the deploy modal or for a workflow MCP server always have full access, because they exist to run workflows. If **Access** isn't shown when you create a key, read-only keys aren't available on your deployment yet.
Access narrows a key; it never grants more than the key's identity already has. Access is fixed at creation, so create a new key to change it. Keys created before access levels existed have full access. Keys created from the deploy modal or for a workflow MCP server always have full access, because they exist to run workflows.

### Expiration [#key-expiration]

Expand Down
Loading
Loading