Skip to content

Commit 7d46716

Browse files
committed
Merge remote-tracking branch 'origin/staging' into feat/reorder
2 parents 78d6082 + 468ec2e commit 7d46716

File tree

235 files changed

+33974
-4365
lines changed

Some content is hidden

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

235 files changed

+33974
-4365
lines changed

.claude/commands/add-block.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
2-
description: Create a block configuration for a Sim Studio integration with proper subBlocks, conditions, and tool wiring
2+
description: Create a block configuration for a Sim integration with proper subBlocks, conditions, and tool wiring
33
argument-hint: <service-name>
44
---
55

66
# Add Block Skill
77

8-
You are an expert at creating block configurations for Sim Studio. You understand the serializer, subBlock types, conditions, dependsOn, modes, and all UI patterns.
8+
You are an expert at creating block configurations for Sim. You understand the serializer, subBlock types, conditions, dependsOn, modes, and all UI patterns.
99

1010
## Your Task
1111

.claude/commands/add-integration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
2-
description: Add a complete integration to Sim Studio (tools, block, icon, registration)
2+
description: Add a complete integration to Sim (tools, block, icon, registration)
33
argument-hint: <service-name> [api-docs-url]
44
---
55

66
# Add Integration Skill
77

8-
You are an expert at adding complete integrations to Sim Studio. This skill orchestrates the full process of adding a new service integration.
8+
You are an expert at adding complete integrations to Sim. This skill orchestrates the full process of adding a new service integration.
99

1010
## Overview
1111

.claude/commands/add-tools.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
2-
description: Create tool configurations for a Sim Studio integration by reading API docs
2+
description: Create tool configurations for a Sim integration by reading API docs
33
argument-hint: <service-name> [api-docs-url]
44
---
55

66
# Add Tools Skill
77

8-
You are an expert at creating tool configurations for Sim Studio integrations. Your job is to read API documentation and create properly structured tool files.
8+
You are an expert at creating tool configurations for Sim integrations. Your job is to read API documentation and create properly structured tool files.
99

1010
## Your Task
1111

.claude/commands/add-trigger.md

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
2-
description: Create webhook triggers for a Sim Studio integration using the generic trigger builder
2+
description: Create webhook triggers for a Sim integration using the generic trigger builder
33
argument-hint: <service-name>
44
---
55

66
# Add Trigger Skill
77

8-
You are an expert at creating webhook triggers for Sim Studio. You understand the trigger system, the generic `buildTriggerSubBlocks` helper, and how triggers connect to blocks.
8+
You are an expert at creating webhook triggers for Sim. You understand the trigger system, the generic `buildTriggerSubBlocks` helper, and how triggers connect to blocks.
99

1010
## Your Task
1111

@@ -552,6 +552,53 @@ All fields automatically have:
552552
- `mode: 'trigger'` - Only shown in trigger mode
553553
- `condition: { field: 'selectedTriggerId', value: triggerId }` - Only shown when this trigger is selected
554554

555+
## Trigger Outputs & Webhook Input Formatting
556+
557+
### Important: Two Sources of Truth
558+
559+
There are two related but separate concerns:
560+
561+
1. **Trigger `outputs`** - Schema/contract defining what fields SHOULD be available. Used by UI for tag dropdown.
562+
2. **`formatWebhookInput`** - Implementation that transforms raw webhook payload into actual data. Located in `apps/sim/lib/webhooks/utils.server.ts`.
563+
564+
**These MUST be aligned.** The fields returned by `formatWebhookInput` should match what's defined in trigger `outputs`. If they differ:
565+
- Tag dropdown shows fields that don't exist (broken variable resolution)
566+
- Or actual data has fields not shown in dropdown (users can't discover them)
567+
568+
### When to Add a formatWebhookInput Handler
569+
570+
- **Simple providers**: If the raw webhook payload structure already matches your outputs, you don't need a handler. The generic fallback returns `body` directly.
571+
- **Complex providers**: If you need to transform, flatten, extract nested data, compute fields, or handle conditional logic, add a handler.
572+
573+
### Adding a Handler
574+
575+
In `apps/sim/lib/webhooks/utils.server.ts`, add a handler block:
576+
577+
```typescript
578+
if (foundWebhook.provider === '{service}') {
579+
// Transform raw webhook body to match trigger outputs
580+
return {
581+
eventType: body.type,
582+
resourceId: body.data?.id || '',
583+
timestamp: body.created_at,
584+
resource: body.data,
585+
}
586+
}
587+
```
588+
589+
**Key rules:**
590+
- Return fields that match your trigger `outputs` definition exactly
591+
- No wrapper objects like `webhook: { data: ... }` or `{service}: { ... }`
592+
- No duplication (don't spread body AND add individual fields)
593+
- Use `null` for missing optional data, not empty objects with empty strings
594+
595+
### Verify Alignment
596+
597+
Run the alignment checker:
598+
```bash
599+
bunx scripts/check-trigger-alignment.ts {service}
600+
```
601+
555602
## Trigger Outputs
556603

557604
Trigger outputs use the same schema as block outputs (NOT tool outputs).
@@ -649,6 +696,11 @@ export const {service}WebhookTrigger: TriggerConfig = {
649696
- [ ] Added `delete{Service}Webhook` function to `provider-subscriptions.ts`
650697
- [ ] Added provider to `cleanupExternalWebhook` function
651698
699+
### Webhook Input Formatting
700+
- [ ] Added handler in `apps/sim/lib/webhooks/utils.server.ts` (if custom formatting needed)
701+
- [ ] Handler returns fields matching trigger `outputs` exactly
702+
- [ ] Run `bunx scripts/check-trigger-alignment.ts {service}` to verify alignment
703+
652704
### Testing
653705
- [ ] Run `bun run type-check` to verify no TypeScript errors
654706
- [ ] Restart dev server to pick up new triggers

.github/workflows/i18n.yml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
name: 'Auto-translate Documentation'
22

33
on:
4-
push:
5-
branches: [ staging ]
6-
paths:
7-
- 'apps/docs/content/docs/en/**'
8-
- 'apps/docs/i18n.json'
4+
schedule:
5+
# Run every Sunday at midnight UTC
6+
- cron: '0 0 * * 0'
7+
workflow_dispatch: # Allow manual triggers
98

109
permissions:
1110
contents: write
@@ -20,6 +19,7 @@ jobs:
2019
- name: Checkout repository
2120
uses: actions/checkout@v4
2221
with:
22+
ref: staging
2323
token: ${{ secrets.GH_PAT }}
2424
fetch-depth: 0
2525

@@ -68,12 +68,11 @@ jobs:
6868
title: "feat(i18n): update translations"
6969
body: |
7070
## Summary
71-
Automated translation updates triggered by changes to documentation.
72-
73-
This PR was automatically created after content changes were made, updating translations for all supported languages using Lingo.dev AI translation engine.
74-
75-
**Original trigger**: ${{ github.event.head_commit.message }}
76-
**Commit**: ${{ github.sha }}
71+
Automated weekly translation updates for documentation.
72+
73+
This PR was automatically created by the scheduled weekly i18n workflow, updating translations for all supported languages using Lingo.dev AI translation engine.
74+
75+
**Triggered**: Weekly scheduled run
7776
**Workflow**: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
7877
7978
## Type of Change
@@ -107,7 +106,7 @@ jobs:
107106
## Screenshots/Videos
108107
<!-- Translation changes are text-based - no visual changes expected -->
109108
<!-- Reviewers should check the documentation site renders correctly for all languages -->
110-
branch: auto-translate/staging-merge-${{ github.run_id }}
109+
branch: auto-translate/weekly-${{ github.run_id }}
111110
base: staging
112111
labels: |
113112
i18n
@@ -145,6 +144,8 @@ jobs:
145144
bun install --frozen-lockfile
146145
147146
- name: Build documentation to verify translations
147+
env:
148+
DATABASE_URL: postgresql://dummy:dummy@localhost:5432/dummy
148149
run: |
149150
cd apps/docs
150151
bun run build
@@ -153,7 +154,7 @@ jobs:
153154
run: |
154155
cd apps/docs
155156
echo "## Translation Status Report" >> $GITHUB_STEP_SUMMARY
156-
echo "**Triggered by merge to staging branch**" >> $GITHUB_STEP_SUMMARY
157+
echo "**Weekly scheduled translation run**" >> $GITHUB_STEP_SUMMARY
157158
echo "" >> $GITHUB_STEP_SUMMARY
158159
159160
en_count=$(find content/docs/en -name "*.mdx" | wc -l)

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Sim Studio Development Guidelines
1+
# Sim Development Guidelines
22

33
You are a professional software engineer. All code must follow best practices: accurate, readable, clean, and efficient.
44

apps/docs/components/icons.tsx

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1855,17 +1855,25 @@ export function LinearIcon(props: React.SVGProps<SVGSVGElement>) {
18551855

18561856
export function LemlistIcon(props: SVGProps<SVGSVGElement>) {
18571857
return (
1858-
<svg
1859-
{...props}
1860-
xmlns='http://www.w3.org/2000/svg'
1861-
viewBox='0 0 24 24'
1862-
width='24'
1863-
height='24'
1864-
fill='none'
1865-
>
1866-
<rect width='24' height='24' rx='4' fill='#316BFF' />
1867-
<path d='M7 6h2v9h5v2H7V6Z' fill='white' />
1868-
<circle cx='17' cy='8' r='2' fill='white' />
1858+
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 181' fill='none'>
1859+
<path
1860+
fillRule='evenodd'
1861+
clipRule='evenodd'
1862+
d='M32.0524 0.919922H147.948C165.65 0.919922 180 15.2703 180 32.9723V148.867C180 166.57 165.65 180.92 147.948 180.92H32.0524C14.3504 180.92 0 166.57 0 148.867V32.9723C0 15.2703 14.3504 0.919922 32.0524 0.919922ZM119.562 82.8879H85.0826C82.4732 82.8879 80.3579 85.0032 80.3579 87.6126V94.2348C80.3579 96.8442 82.4732 98.9595 85.0826 98.9595H119.562C122.171 98.9595 124.286 96.8442 124.286 94.2348V87.6126C124.286 85.0032 122.171 82.8879 119.562 82.8879ZM85.0826 49.1346H127.061C129.67 49.1346 131.785 51.2499 131.785 53.8593V60.4815C131.785 63.0909 129.67 65.2062 127.061 65.2062H85.0826C82.4732 65.2062 80.3579 63.0909 80.3579 60.4815V53.8593C80.3579 51.2499 82.4732 49.1346 85.0826 49.1346ZM131.785 127.981V121.358C131.785 118.75 129.669 116.634 127.061 116.634H76.5706C69.7821 116.634 64.2863 111.138 64.2863 104.349V53.8593C64.2863 51.2513 62.1697 49.1346 59.5616 49.1346H52.9395C50.3314 49.1346 48.2147 51.2513 48.2147 53.8593V114.199C48.8497 124.133 56.7873 132.07 66.7205 132.705H127.061C129.669 132.705 131.785 130.589 131.785 127.981Z'
1863+
fill='#316BFF'
1864+
/>
1865+
<path
1866+
d='M85.0826 49.1346H127.061C129.67 49.1346 131.785 51.2499 131.785 53.8593V60.4815C131.785 63.0909 129.67 65.2062 127.061 65.2062H85.0826C82.4732 65.2062 80.3579 63.0909 80.3579 60.4815V53.8593C80.3579 51.2499 82.4732 49.1346 85.0826 49.1346Z'
1867+
fill='white'
1868+
/>
1869+
<path
1870+
d='M85.0826 82.8879H119.562C122.171 82.8879 124.286 85.0032 124.286 87.6126V94.2348C124.286 96.8442 122.171 98.9595 119.562 98.9595H85.0826C82.4732 98.9595 80.3579 96.8442 80.3579 94.2348V87.6126C80.3579 85.0032 82.4732 82.8879 85.0826 82.8879Z'
1871+
fill='white'
1872+
/>
1873+
<path
1874+
d='M131.785 121.358V127.981C131.785 130.589 129.669 132.705 127.061 132.705H66.7205C56.7873 132.07 48.8497 124.133 48.2147 114.199V53.8593C48.2147 51.2513 50.3314 49.1346 52.9395 49.1346H59.5616C62.1697 49.1346 64.2863 51.2513 64.2863 53.8593V104.349C64.2863 111.138 69.7821 116.634 76.5706 116.634H127.061C129.669 116.634 131.785 118.75 131.785 121.358Z'
1875+
fill='white'
1876+
/>
18691877
</svg>
18701878
)
18711879
}
@@ -1889,6 +1897,19 @@ export function TelegramIcon(props: SVGProps<SVGSVGElement>) {
18891897
)
18901898
}
18911899

1900+
export function TinybirdIcon(props: SVGProps<SVGSVGElement>) {
1901+
return (
1902+
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none'>
1903+
<rect x='0' y='0' width='24' height='24' fill='#2EF598' rx='6' />
1904+
<g transform='translate(2, 2) scale(0.833)'>
1905+
<path d='M25 2.64 17.195.5 14.45 6.635z' fill='#1E7F63' />
1906+
<path d='M17.535 17.77 10.39 15.215 6.195 25.5z' fill='#1E7F63' />
1907+
<path d='M0 11.495 17.535 17.77 20.41 4.36z' fill='#1F2437' />
1908+
</g>
1909+
</svg>
1910+
)
1911+
}
1912+
18921913
export function ClayIcon(props: SVGProps<SVGSVGElement>) {
18931914
return (
18941915
<svg {...props} xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 400 400'>
@@ -4078,6 +4099,31 @@ export function McpIcon(props: SVGProps<SVGSVGElement>) {
40784099
)
40794100
}
40804101

4102+
export function A2AIcon(props: SVGProps<SVGSVGElement>) {
4103+
return (
4104+
<svg {...props} viewBox='0 0 860 860' fill='none' xmlns='http://www.w3.org/2000/svg'>
4105+
<circle cx='544' cy='307' r='27' fill='currentColor' />
4106+
<circle cx='154' cy='307' r='27' fill='currentColor' />
4107+
<circle cx='706' cy='307' r='27' fill='currentColor' />
4108+
<circle cx='316' cy='307' r='27' fill='currentColor' />
4109+
<path
4110+
d='M336.5 191.003H162C97.6588 191.003 45.5 243.162 45.5 307.503C45.5 371.844 97.6442 424.003 161.985 424.003C206.551 424.003 256.288 424.003 296.5 424.003C487.5 424.003 374 191.005 569 191.001C613.886 191 658.966 191 698.025 191C762.366 191.001 814.5 243.16 814.5 307.501C814.5 371.843 762.34 424.003 697.998 424.003H523.5'
4111+
stroke='currentColor'
4112+
strokeWidth='48'
4113+
strokeLinecap='round'
4114+
/>
4115+
<path
4116+
d='M256 510.002C270.359 510.002 282 521.643 282 536.002C282 550.361 270.359 562.002 256 562.002H148C133.641 562.002 122 550.361 122 536.002C122 521.643 133.641 510.002 148 510.002H256ZM712 510.002C726.359 510.002 738 521.643 738 536.002C738 550.361 726.359 562.002 712 562.002H360C345.641 562.002 334 550.361 334 536.002C334 521.643 345.641 510.002 360 510.002H712Z'
4117+
fill='currentColor'
4118+
/>
4119+
<path
4120+
d='M444 628.002C458.359 628.002 470 639.643 470 654.002C470 668.361 458.359 680.002 444 680.002H100C85.6406 680.002 74 668.361 74 654.002C74 639.643 85.6406 628.002 100 628.002H444ZM548 628.002C562.359 628.002 574 639.643 574 654.002C574 668.361 562.359 680.002 548 680.002C533.641 680.002 522 668.361 522 654.002C522 639.643 533.641 628.002 548 628.002ZM760 628.002C774.359 628.002 786 639.643 786 654.002C786 668.361 774.359 680.002 760 680.002H652C637.641 680.002 626 668.361 626 654.002C626 639.643 637.641 628.002 652 628.002H760Z'
4121+
fill='currentColor'
4122+
/>
4123+
</svg>
4124+
)
4125+
}
4126+
40814127
export function WordpressIcon(props: SVGProps<SVGSVGElement>) {
40824128
return (
40834129
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 25.925 25.925'>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import type { ComponentType, SVGProps } from 'react'
66
import {
7+
A2AIcon,
78
AhrefsIcon,
89
AirtableIcon,
910
ApifyIcon,
@@ -106,6 +107,7 @@ import {
106107
SupabaseIcon,
107108
TavilyIcon,
108109
TelegramIcon,
110+
TinybirdIcon,
109111
TranslateIcon,
110112
TrelloIcon,
111113
TTSIcon,
@@ -127,6 +129,7 @@ import {
127129
type IconComponent = ComponentType<SVGProps<SVGSVGElement>>
128130

129131
export const blockTypeToIconMap: Record<string, IconComponent> = {
132+
a2a: A2AIcon,
130133
ahrefs: AhrefsIcon,
131134
airtable: AirtableIcon,
132135
apify: ApifyIcon,
@@ -228,6 +231,8 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
228231
supabase: SupabaseIcon,
229232
tavily: TavilyIcon,
230233
telegram: TelegramIcon,
234+
thinking: BrainIcon,
235+
tinybird: TinybirdIcon,
231236
translate: TranslateIcon,
232237
trello: TrelloIcon,
233238
tts: TTSIcon,

apps/docs/content/docs/de/enterprise/index.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ description: Enterprise-Funktionen für Organisationen mit erweiterten
66

77
import { Callout } from 'fumadocs-ui/components/callout'
88

9-
Sim Studio Enterprise bietet erweiterte Funktionen für Organisationen mit erhöhten Sicherheits-, Compliance- und Verwaltungsanforderungen.
9+
Sim Enterprise bietet erweiterte Funktionen für Organisationen mit erhöhten Sicherheits-, Compliance- und Verwaltungsanforderungen.
1010

1111
---
1212

1313
## Bring Your Own Key (BYOK)
1414

15-
Verwenden Sie Ihre eigenen API-Schlüssel für KI-Modellanbieter anstelle der gehosteten Schlüssel von Sim Studio.
15+
Verwenden Sie Ihre eigenen API-Schlüssel für KI-Modellanbieter anstelle der gehosteten Schlüssel von Sim.
1616

1717
### Unterstützte Anbieter
1818

@@ -33,7 +33,7 @@ Verwenden Sie Ihre eigenen API-Schlüssel für KI-Modellanbieter anstelle der ge
3333
BYOK-Schlüssel werden verschlüsselt gespeichert. Nur Organisationsadministratoren und -inhaber können Schlüssel verwalten.
3434
</Callout>
3535

36-
Wenn konfiguriert, verwenden Workflows Ihren Schlüssel anstelle der gehosteten Schlüssel von Sim Studio. Bei Entfernung wechseln Workflows automatisch zu den gehosteten Schlüsseln zurück.
36+
Wenn konfiguriert, verwenden Workflows Ihren Schlüssel anstelle der gehosteten Schlüssel von Sim. Bei Entfernung wechseln Workflows automatisch zu den gehosteten Schlüsseln zurück.
3737

3838
---
3939

@@ -73,5 +73,5 @@ Für selbst gehostete Bereitstellungen können Enterprise-Funktionen über Umgeb
7373
| `DISABLE_INVITATIONS`, `NEXT_PUBLIC_DISABLE_INVITATIONS` | Workspace-/Organisations-Einladungen global deaktivieren |
7474

7575
<Callout type="warn">
76-
BYOK ist nur im gehosteten Sim Studio verfügbar. Selbst gehostete Deployments konfigurieren AI-Provider-Schlüssel direkt über Umgebungsvariablen.
76+
BYOK ist nur im gehosteten Sim verfügbar. Selbst gehostete Deployments konfigurieren AI-Provider-Schlüssel direkt über Umgebungsvariablen.
7777
</Callout>

apps/docs/content/docs/de/self-hosting/docker.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Docker
3-
description: Sim Studio mit Docker Compose bereitstellen
3+
description: Sim mit Docker Compose bereitstellen
44
---
55

66
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'

0 commit comments

Comments
 (0)