Skip to content

Commit 2124b78

Browse files
authored
v0.9.54: non-OAuth auth for twelve more integrations, agent API additions (workflow outline, schedules list, paused runs, scoped CLI pairing keys), concurrent-edit guard, dependency updates
2 parents dea6278 + 56f7ed7 commit 2124b78

593 files changed

Lines changed: 20010 additions & 3501 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.

‎.agents/skills/v2-api-conventions/SKILL.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The v2 surface makes one promise: **every response is the same two shapes, and a
1111
```
1212
success (single) { "data": {...} }
1313
success (collection) { "data": [...], "nextCursor": "..." | null }
14-
failure (always) { "error": { "code": "...", "message": "...", "details"?: ... } }
14+
failure (always) { "error": { "code": "...", "message": "...", "details"?: ..., "requestId"?: "..." } }
1515
```
1616

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

215215
Run this against any new or changed v2 endpoint.
216216

217-
- [ ] Success body is exactly `{data}` or `{data, nextCursor}`; failures are exactly `{error:{code,message,details?}}`.
217+
- [ ] 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).
218218
- [ ] Route uses a shared builder; no hand-built `NextResponse.json`.
219219
- [ ] Query and body schemas are `.strict()`.
220220
- [ ] The contract declares a `query` — `noInputSchema` when the endpoint takes no query params, never omission.

‎.github/CI.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# CI selection and acceptance ownership
22

3-
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.
3+
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.
44

55
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.
66

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

2525
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.
2626

27-
`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.
27+
`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.
2828

2929
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.
3030

‎.github/scripts/ci-plan.gql‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ query($base: String!, $head: String!) {
2222
}
2323
}
2424
}
25+
# `items` also lists the prerequisites of affected tasks, and docs#build is one for
26+
# ci:e2e-docs-platform. The task filter applies before prerequisites are added, so this
27+
# selection holds docs#build only when the docs site itself changed.
28+
docsSite: affectedTasks(base: $base, head: $head, tasks: ["docs#build"]) {
29+
items { fullName }
30+
}
2531
}

‎apps/desktop/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"@types/react": "^19",
5959
"@types/react-dom": "^19",
6060
"electron": "43.8.1",
61-
"electron-builder": "26.15.3",
61+
"electron-builder": "26.18.0",
6262
"esbuild": "0.28.2",
6363
"jsdom": "^26.0.0",
6464
"postcss": "^8.5.30",

‎apps/docs/components/ui/icon-mapping.ts‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
409409
credential: CredentialIcon,
410410
credential_group: GridOffset,
411411
crowdstrike: CrowdStrikeIcon,
412+
crowdstrike_v2: CrowdStrikeIcon,
412413
crunchbase: CrunchbaseIcon,
413414
crunchbase_v2: CrunchbaseIcon,
414415
cursor: CursorIcon,
@@ -418,6 +419,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
418419
databricks: DatabricksIcon,
419420
databricks_v2: DatabricksIcon,
420421
datadog: DatadogIcon,
422+
datadog_v2: DatadogIcon,
421423
datagma: DatagmaIcon,
422424
daytona: DaytonaIcon,
423425
daytona_v2: DaytonaIcon,
@@ -487,6 +489,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
487489
gmail: GmailIcon,
488490
gmail_v2: GmailIcon,
489491
gong: GongIcon,
492+
gong_v2: GongIcon,
490493
google_ads: GoogleAdsIcon,
491494
google_appsheet: GoogleAppsheetIcon,
492495
google_bigquery: GoogleBigQueryIcon,
@@ -658,6 +661,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
658661
plane: PlaneIcon,
659662
plane_v2: PlaneIcon,
660663
planetscale: PlanetScaleIcon,
664+
planetscale_v2: PlanetScaleIcon,
661665
polymarket: PolymarketIcon,
662666
postgresql: PostgresIcon,
663667
posthog: PosthogIcon,
@@ -703,6 +707,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
703707
s3: S3Icon,
704708
s3_v2: S3Icon,
705709
sailpoint: SailPointIcon,
710+
sailpoint_v2: SailPointIcon,
706711
salesforce: SalesforceIcon,
707712
sap_concur: SapConcurIcon,
708713
sap_s4hana: SapS4HanaIcon,
@@ -719,6 +724,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
719724
serper: SerperIcon,
720725
servicenow: ServiceNowIcon,
721726
servicenow_v2: ServiceNowIcon,
727+
servicenow_v3: ServiceNowIcon,
722728
ses: SESIcon,
723729
ses_v2: SESIcon,
724730
sftp: SftpIcon,
@@ -823,12 +829,14 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
823829
youtube: YouTubeIcon,
824830
youtube_v2: YouTubeIcon,
825831
zendesk: ZendeskIcon,
832+
zendesk_v2: ZendeskIcon,
826833
zep: ZepIcon,
827834
zep_v2: ZepIcon,
828835
zerobounce: ZeroBounceIcon,
829836
zoho_desk: ZohoDeskIcon,
830837
zoom: ZoomIcon,
831838
zoominfo: ZoomInfoIcon,
839+
zoominfo_v2: ZoomInfoIcon,
832840
}
833841

834842
export const coreBlockTypes = new Set([

‎apps/docs/content/docs/api-reference/(generated)/workflow-runs/meta.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"pages": [
33
"listWorkflowRunsV2",
4+
"listPausedWorkflowRunsV2",
45
"getWorkflowRunV2",
56
"downloadWorkflowRunFileV2",
67
"resumeWorkflowRunV2",

‎apps/docs/content/docs/api-reference/(generated)/workflows/meta.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"duplicateWorkflow",
1010
"moveWorkflows",
1111
"getWorkflowState",
12+
"getWorkflowOutline",
1213
"replaceWorkflowState",
1314
"applyWorkflowOperations",
1415
"applyWorkflowVariables",
@@ -24,6 +25,7 @@
2425
"updateWorkflowPublicApi",
2526
"listWorkflowTriggers",
2627
"updateWorkflowTrigger",
28+
"listWorkspaceSchedules",
2729
"deployWorkflow",
2830
"undeployWorkflow",
2931
"rollbackWorkflow",

‎apps/docs/content/docs/api-reference/authentication.mdx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ Delete a key from the same settings page to revoke it. Update applications that
4242

4343
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.
4444

45-
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.
45+
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.
4646

47-
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.
47+
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.
4848

4949
### Expiration [#key-expiration]
5050

0 commit comments

Comments
 (0)