Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
dab70a8
fix(logs): show block inputs (#1979)
Sg312 Nov 14, 2025
785f847
fix(onedrive): parse array values correctly (#1981)
icecrasher321 Nov 14, 2025
d86198a
feat(files): add presigned URL generation support for execution files…
waleedlatif1 Nov 14, 2025
1e915d5
fix(popovers): billed account + async example command (#1982)
icecrasher321 Nov 14, 2025
3ba3379
fix(settings): update usage data in settings > subs to use reactquery…
waleedlatif1 Nov 14, 2025
948b657
fix(output-selector): z-index in chat deploy modal (#1984)
icecrasher321 Nov 14, 2025
1082e55
improvement(logs): improved logs search (#1985)
waleedlatif1 Nov 14, 2025
6c56d48
feat(slack): added slack full message object in response (#1987)
waleedlatif1 Nov 14, 2025
16a4f37
feat(slack): add better error messages, reminder to add bot to app (#…
waleedlatif1 Nov 14, 2025
a9eb91a
feat(i18n): update translations (#1989)
waleedlatif1 Nov 14, 2025
fa18bef
fix(landing): hero stripe icon (#1988)
emir-karabeg Nov 14, 2025
72a048f
fix(variables): fix double stringification (#1991)
Sg312 Nov 14, 2025
4b4060f
improvement(variables): support dot notation for nested objects (#1992)
Sg312 Nov 14, 2025
ec430ab
improvement(tanstack): migrate multiple stores (#1994)
icecrasher321 Nov 14, 2025
c2ccd51
fix(folders): duplicate (#1996)
icecrasher321 Nov 14, 2025
6f29e24
fix(variables): fix variables block json resolution (#1997)
Sg312 Nov 15, 2025
9695810
Improvement(ui/ux): signup, command-list, cursors, search modal, work…
emir-karabeg Nov 15, 2025
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
7 changes: 5 additions & 2 deletions apps/docs/content/docs/de/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,10 @@ Senden Sie Nachrichten an Slack-Kanäle oder Benutzer über die Slack-API. Unter

| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Nachricht |
| `channel` | string | Kanal-ID, wohin die Nachricht gesendet wurde |
| `message` | object | Vollständiges Nachrichtenobjekt mit allen von Slack zurückgegebenen Eigenschaften |
| `ts` | string | Nachrichtenzeitstempel |
| `channel` | string | Kanal-ID, in dem die Nachricht gesendet wurde |
| `fileCount` | number | Anzahl der hochgeladenen Dateien \(wenn Dateien angehängt sind\) |

### `slack_canvas`

Expand Down Expand Up @@ -155,6 +157,7 @@ Eine zuvor vom Bot in Slack gesendete Nachricht aktualisieren

| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | object | Vollständiges aktualisiertes Nachrichtenobjekt mit allen von Slack zurückgegebenen Eigenschaften |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Metadaten der aktualisierten Nachricht |

Expand Down
3 changes: 3 additions & 0 deletions apps/docs/content/docs/en/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,10 @@ Send messages to Slack channels or users through the Slack API. Supports Slack m

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | Complete message object with all properties returned by Slack |
| `ts` | string | Message timestamp |
| `channel` | string | Channel ID where message was sent |
| `fileCount` | number | Number of files uploaded \(when files are attached\) |

### `slack_canvas`

Expand Down Expand Up @@ -157,6 +159,7 @@ Update a message previously sent by the bot in Slack

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | Complete updated message object with all properties returned by Slack |
| `content` | string | Success message |
| `metadata` | object | Updated message metadata |

Expand Down
3 changes: 3 additions & 0 deletions apps/docs/content/docs/es/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,10 @@ Envía mensajes a canales o usuarios de Slack a través de la API de Slack. Comp

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | object | Objeto de mensaje completo con todas las propiedades devueltas por Slack |
| `ts` | string | Marca de tiempo del mensaje |
| `channel` | string | ID del canal donde se envió el mensaje |
| `fileCount` | number | Número de archivos subidos (cuando se adjuntan archivos) |

### `slack_canvas`

Expand Down Expand Up @@ -155,6 +157,7 @@ Actualizar un mensaje enviado previamente por el bot en Slack

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | object | Objeto de mensaje actualizado completo con todas las propiedades devueltas por Slack |
| `content` | string | Mensaje de éxito |
| `metadata` | object | Metadatos del mensaje actualizado |

Expand Down
3 changes: 3 additions & 0 deletions apps/docs/content/docs/fr/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,10 @@ Envoyez des messages aux canaux ou utilisateurs Slack via l'API Slack. Prend en

| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `message` | objet | Objet de message complet avec toutes les propriétés renvoyées par Slack |
| `ts` | chaîne | Horodatage du message |
| `channel` | chaîne | ID du canal où le message a été envoyé |
| `fileCount` | nombre | Nombre de fichiers téléchargés \(lorsque des fichiers sont joints\) |

### `slack_canvas`

Expand Down Expand Up @@ -155,6 +157,7 @@ Mettre à jour un message précédemment envoyé par le bot dans Slack

| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `message` | objet | Objet de message mis à jour complet avec toutes les propriétés renvoyées par Slack |
| `content` | chaîne | Message de succès |
| `metadata` | objet | Métadonnées du message mis à jour |

Expand Down
3 changes: 3 additions & 0 deletions apps/docs/content/docs/ja/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ Slack APIを通じてSlackチャンネルまたはユーザーにメッセージ

| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `message` | object | Slackから返されたすべてのプロパティを含む完全なメッセージオブジェクト |
| `ts` | string | メッセージのタイムスタンプ |
| `channel` | string | メッセージが送信されたチャンネルID |
| `fileCount` | number | アップロードされたファイル数(ファイルが添付されている場合) |

### `slack_canvas`

Expand Down Expand Up @@ -154,6 +156,7 @@ Slackでボットが以前送信したメッセージを更新する

| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `message` | object | Slackから返されたすべてのプロパティを含む完全に更新されたメッセージオブジェクト |
| `content` | string | 成功メッセージ |
| `metadata` | object | 更新されたメッセージのメタデータ |

Expand Down
7 changes: 5 additions & 2 deletions apps/docs/content/docs/zh/tools/slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,10 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"

| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `message` | object | 包含 Slack 返回的所有属性的完整消息对象 |
| `ts` | string | 消息时间戳 |
| `channel` | string | 消息发送的频道 ID |
| `channel` | string | 发送消息的频道 ID |
| `fileCount` | number | 上传的文件数量(当附加文件时) |

### `slack_canvas`

Expand Down Expand Up @@ -153,8 +155,9 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"

| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `message` | object | 包含 Slack 返回的所有属性的完整更新消息对象 |
| `content` | string | 成功消息 |
| `metadata` | object | 更新后的消息元数据 |
| `metadata` | object | 更新的消息元数据 |

### `slack_delete_message`

Expand Down
4 changes: 2 additions & 2 deletions apps/docs/i18n.lock
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,7 @@ checksums:
content/14: 371d0e46b4bd2c23f559b8bc112f6955
content/15: 2f696275726cdeefd7d7280b5bb43b21
content/16: bcadfc362b69078beee0088e5936c98b
content/17: 1f31e78210417a7f251f29e0b93a8528
content/17: bb43e4f36fdc1eb6211f46ddeed9e0aa
content/18: 05540cb3028d4d781521c14e5f9e3835
content/19: 14583a25c48ebea2cef414b4758b883d
content/20: 371d0e46b4bd2c23f559b8bc112f6955
Expand All @@ -918,7 +918,7 @@ checksums:
content/38: 371d0e46b4bd2c23f559b8bc112f6955
content/39: 5319bf5409aced353e6b9d67f597ffef
content/40: bcadfc362b69078beee0088e5936c98b
content/41: bc5ec1d17d0dbc502ad0f27b6b8b1242
content/41: d67f49be147c5ea63f88554f3b8eaed1
content/42: e10ecb501eb65fd1a59501a40b707c7a
content/43: d829a82e9bcbcfb6239ca2ed9e10ba77
content/44: 371d0e46b4bd2c23f559b8bc112f6955
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/app/(auth)/signup/signup-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ function SignupFormContent({
disabled={isLoading}
>
<span className='flex items-center gap-1'>
{isLoading ? 'Creating account...' : 'Create account'}
{isLoading ? 'Creating account' : 'Create account'}
<span className='inline-flex transition-transform duration-200 group-hover:translate-x-0.5'>
{isButtonHovered ? (
<ArrowRight className='h-4 w-4' aria-hidden='true' />
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/app/(landing)/components/hero/hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ export default function Hero() {
{ key: 'linear', icon: LinearIcon, label: 'Linear', style: { color: '#5E6AD2' } },
{ key: 'discord', icon: DiscordIcon, label: 'Discord', style: { color: '#5765F2' } },
{ key: 'airtable', icon: AirtableIcon, label: 'Airtable' },
{ key: 'stripe', icon: StripeIcon, label: 'Stripe' },
{ key: 'stripe', icon: StripeIcon, label: 'Stripe', style: { color: '#635BFF' } },
{ key: 'notion', icon: NotionIcon, label: 'Notion' },
{ key: 'googleSheets', icon: GoogleSheetsIcon, label: 'Google Sheets' },
{ key: 'googleDrive', icon: GoogleDriveIcon, label: 'Google Drive' },
Expand Down
7 changes: 6 additions & 1 deletion apps/sim/app/api/logs/export/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@ export async function GET(request: NextRequest) {
let conditions: SQL | undefined = eq(workflow.workspaceId, params.workspaceId)

if (params.level && params.level !== 'all') {
conditions = and(conditions, eq(workflowExecutionLogs.level, params.level))
const levels = params.level.split(',').filter(Boolean)
if (levels.length === 1) {
conditions = and(conditions, eq(workflowExecutionLogs.level, levels[0]))
} else if (levels.length > 1) {
conditions = and(conditions, inArray(workflowExecutionLogs.level, levels))
}
}

if (params.workflowIds) {
Expand Down
9 changes: 7 additions & 2 deletions apps/sim/app/api/logs/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,14 @@ export async function GET(request: NextRequest) {
// Build additional conditions for the query
let conditions: SQL | undefined

// Filter by level
// Filter by level (supports comma-separated for OR conditions)
if (params.level && params.level !== 'all') {
conditions = and(conditions, eq(workflowExecutionLogs.level, params.level))
const levels = params.level.split(',').filter(Boolean)
if (levels.length === 1) {
conditions = and(conditions, eq(workflowExecutionLogs.level, levels[0]))
} else if (levels.length > 1) {
conditions = and(conditions, inArray(workflowExecutionLogs.level, levels))
}
}

// Filter by specific workflow IDs
Expand Down
16 changes: 13 additions & 3 deletions apps/sim/app/api/tools/onedrive/upload/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,30 @@ import { createLogger } from '@/lib/logs/console/logger'
import { processSingleFileToUserFile } from '@/lib/uploads/utils/file-utils'
import { downloadFileFromStorage } from '@/lib/uploads/utils/file-utils.server'
import { generateRequestId } from '@/lib/utils'
import { normalizeExcelValues } from '@/tools/onedrive/utils'

export const dynamic = 'force-dynamic'

const logger = createLogger('OneDriveUploadAPI')

const MICROSOFT_GRAPH_BASE = 'https://graph.microsoft.com/v1.0'

const ExcelCellSchema = z.union([z.string(), z.number(), z.boolean(), z.null()])
const ExcelRowSchema = z.array(ExcelCellSchema)
const ExcelValuesSchema = z.union([
z.string(),
z.array(ExcelRowSchema),
z.array(z.record(ExcelCellSchema)),
])

const OneDriveUploadSchema = z.object({
accessToken: z.string().min(1, 'Access token is required'),
fileName: z.string().min(1, 'File name is required'),
file: z.any().optional(), // UserFile object (optional for blank Excel creation)
folderId: z.string().optional().nullable(),
mimeType: z.string().optional(),
// Optional Excel write-after-create inputs
values: z.array(z.array(z.union([z.string(), z.number(), z.boolean(), z.null()]))).optional(),
values: ExcelValuesSchema.optional(),
})

export async function POST(request: NextRequest) {
Expand All @@ -46,6 +55,7 @@ export async function POST(request: NextRequest) {

const body = await request.json()
const validatedData = OneDriveUploadSchema.parse(body)
const excelValues = normalizeExcelValues(validatedData.values)

let fileBuffer: Buffer
let mimeType: string
Expand Down Expand Up @@ -180,7 +190,7 @@ export async function POST(request: NextRequest) {
// If this is an Excel creation and values were provided, write them using the Excel API
let excelWriteResult: any | undefined
const shouldWriteExcelContent =
isExcelCreation && Array.isArray(validatedData.values) && validatedData.values.length > 0
isExcelCreation && Array.isArray(excelValues) && excelValues.length > 0

if (shouldWriteExcelContent) {
try {
Expand Down Expand Up @@ -232,7 +242,7 @@ export async function POST(request: NextRequest) {
logger.warn(`[${requestId}] Error listing worksheets, using default Sheet1`, listError)
}

let processedValues: any = validatedData.values || []
let processedValues: any = excelValues || []

if (
Array.isArray(processedValues) &&
Expand Down
41 changes: 40 additions & 1 deletion apps/sim/app/api/tools/slack/send-message/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,16 @@ export async function POST(request: NextRequest) {
}

logger.info(`[${requestId}] Message sent successfully`)
const messageObj = data.message || {
type: 'message',
ts: data.ts,
text: validatedData.text,
channel: data.channel,
}
return NextResponse.json({
success: true,
output: {
message: messageObj,
ts: data.ts,
channel: data.channel,
},
Expand All @@ -107,9 +114,16 @@ export async function POST(request: NextRequest) {
})

const data = await response.json()
const messageObj = data.message || {
type: 'message',
ts: data.ts,
text: validatedData.text,
channel: data.channel,
}
return NextResponse.json({
success: true,
output: {
message: messageObj,
ts: data.ts,
channel: data.channel,
},
Expand Down Expand Up @@ -174,9 +188,16 @@ export async function POST(request: NextRequest) {
})

const data = await response.json()
const messageObj = data.message || {
type: 'message',
ts: data.ts,
text: validatedData.text,
channel: data.channel,
}
return NextResponse.json({
success: true,
output: {
message: messageObj,
ts: data.ts,
channel: data.channel,
},
Expand Down Expand Up @@ -211,10 +232,28 @@ export async function POST(request: NextRequest) {

logger.info(`[${requestId}] Files uploaded and shared successfully`)

// For file uploads, construct a message object
const fileTs = completeData.files?.[0]?.created?.toString() || (Date.now() / 1000).toString()
const fileMessage = {
type: 'message',
ts: fileTs,
text: validatedData.text,
channel: validatedData.channel,
files: completeData.files?.map((file: any) => ({
id: file?.id,
name: file?.name,
mimetype: file?.mimetype,
size: file?.size,
url_private: file?.url_private,
permalink: file?.permalink,
})),
}

return NextResponse.json({
success: true,
output: {
ts: completeData.files?.[0]?.created || Date.now() / 1000,
message: fileMessage,
ts: fileTs,
channel: validatedData.channel,
fileCount: uploadedFileIds.length,
},
Expand Down
10 changes: 9 additions & 1 deletion apps/sim/app/api/tools/slack/update-message/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,22 @@ export async function POST(request: NextRequest) {
timestamp: data.ts,
})

const messageObj = data.message || {
type: 'message',
ts: data.ts,
text: data.text || validatedData.text,
channel: data.channel,
}

return NextResponse.json({
success: true,
output: {
message: messageObj,
content: 'Message updated successfully',
metadata: {
channel: data.channel,
timestamp: data.ts,
text: data.text,
text: data.text || validatedData.text,
},
},
})
Expand Down
24 changes: 24 additions & 0 deletions apps/sim/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,30 @@
animation: dash-animation 1.5s linear infinite !important;
}

/**
* Active block ring animation - cycles through gray tones using box-shadow
*/
@keyframes ring-pulse-colors {
0%,
100% {
box-shadow: 0 0 0 4px var(--surface-14);
}
33% {
box-shadow: 0 0 0 4px var(--surface-12);
}
66% {
box-shadow: 0 0 0 4px var(--surface-15);
}
}

.dark .animate-ring-pulse {
animation: ring-pulse-colors 2s ease-in-out infinite !important;
}

.light .animate-ring-pulse {
animation: ring-pulse-colors 2s ease-in-out infinite !important;
}

/**
* Dark color tokens - single source of truth for all colors (dark-only)
*/
Expand Down
Loading
Loading