Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file added apps/docs/public/android-chrome-192x192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/docs/public/android-chrome-512x512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/docs/public/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/docs/public/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/docs/public/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/favicon/android-chrome-192x192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/favicon/android-chrome-512x512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/favicon/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/favicon/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/favicon/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 6 additions & 8 deletions apps/docs/public/favicon/site.webmanifest
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
{
"name": "MyWebSite",
"short_name": "MySite",
"name": "",
"short_name": "",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
"type": "image/png"
},
{
"src": "/web-app-manifest-512x512.png",
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
"type": "image/png"
}
],
"theme_color": "#ffffff",
Expand Down
95 changes: 49 additions & 46 deletions apps/sim/executor/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1397,58 +1397,61 @@ describe('Executor', () => {
}
)

it.concurrent.skip('should propagate errors from child workflows to parent workflow', async () => {
const workflow = {
version: '1.0',
blocks: [
{
id: 'starter',
position: { x: 0, y: 0 },
metadata: { id: BlockType.STARTER, name: 'Starter Block' },
config: { tool: 'starter', params: {} },
inputs: {} as Record<string, ParamType>,
outputs: {} as Record<string, BlockOutput>,
enabled: true,
},
{
id: 'workflow-block',
position: { x: 100, y: 0 },
metadata: { id: BlockType.WORKFLOW, name: 'Failing Workflow Block' },
config: {
tool: 'workflow',
params: {
workflowId: 'failing-child-workflow',
input: {},
it.concurrent.skip(
'should propagate errors from child workflows to parent workflow',
async () => {
const workflow = {
version: '1.0',
blocks: [
{
id: 'starter',
position: { x: 0, y: 0 },
metadata: { id: BlockType.STARTER, name: 'Starter Block' },
config: { tool: 'starter', params: {} },
inputs: {} as Record<string, ParamType>,
outputs: {} as Record<string, BlockOutput>,
enabled: true,
},
{
id: 'workflow-block',
position: { x: 100, y: 0 },
metadata: { id: BlockType.WORKFLOW, name: 'Failing Workflow Block' },
config: {
tool: 'workflow',
params: {
workflowId: 'failing-child-workflow',
input: {},
},
},
inputs: {} as Record<string, ParamType>,
outputs: { output: 'json' as BlockOutput },
enabled: true,
},
inputs: {} as Record<string, ParamType>,
outputs: { output: 'json' as BlockOutput },
enabled: true,
},
],
connections: [{ source: 'starter', target: 'workflow-block' }],
loops: {},
}

const executor = new Executor({
workflow,
workflowInput: {},
})
],
connections: [{ source: 'starter', target: 'workflow-block' }],
loops: {},
}

const result = await executor.execute('test-workflow-id')
const executor = new Executor({
workflow,
workflowInput: {},
})

// Verify that child workflow errors propagate to parent
expect(result).toBeDefined()
if ('success' in result) {
// The workflow should fail due to child workflow failure
expect(result.success).toBe(false)
expect(result.error).toBeDefined()
const result = await executor.execute('test-workflow-id')

// Error message should indicate it came from a child workflow
if (result.error && typeof result.error === 'string') {
expect(result.error).toContain('Error in child workflow')
// Verify that child workflow errors propagate to parent
expect(result).toBeDefined()
if ('success' in result) {
// The workflow should fail due to child workflow failure
expect(result.success).toBe(false)
expect(result.error).toBeDefined()

// Error message should indicate it came from a child workflow
if (result.error && typeof result.error === 'string') {
expect(result.error).toContain('Error in child workflow')
}
}
}
})
)
})
})
1 change: 1 addition & 0 deletions apps/sim/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
"@vercel/speed-insights": "^1.2.0",
"ai": "^4.3.2",
"better-auth": "1.2.9",
"binary-extensions": "^3.1.0",
"browser-image-compression": "^2.0.2",
"cheerio": "1.1.2",
"class-variance-authority": "^0.7.1",
Expand Down
23 changes: 8 additions & 15 deletions apps/sim/providers/gatewayz/index.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
import OpenAI from 'openai'
import { createLogger } from '@/lib/logs/console/logger'
import { env } from '@/lib/env'
import { createLogger } from '@/lib/logs/console/logger'
import type { StreamingExecution } from '@/executor/types'
import type {
ProviderConfig,
ProviderRequest,
ProviderResponse,
TimeSegment,
} from '@/providers/types'
import {
prepareToolExecution,
prepareToolsWithUsageControl,
trackForcedToolUsage,
} from '@/providers/utils'
import type { ProviderConfig, ProviderRequest, ProviderResponse } from '@/providers/types'
import { prepareToolExecution, prepareToolsWithUsageControl } from '@/providers/utils'
import { executeTool } from '@/tools'

const logger = createLogger('GatewayzProvider')
Expand Down Expand Up @@ -69,7 +60,9 @@ export const gatewayzProvider: ProviderConfig = {
models: [], // Will be populated dynamically
defaultModel: '', // Will be determined by the gateway

executeRequest: async (request: ProviderRequest): Promise<ProviderResponse | StreamingExecution> => {
executeRequest: async (
request: ProviderRequest
): Promise<ProviderResponse | StreamingExecution> => {
logger.info('Preparing Gatewayz request', {
model: request.model,
hasSystemPrompt: !!request.systemPrompt,
Expand Down Expand Up @@ -178,7 +171,7 @@ async function executeNonStreamingRequest(
return {
content: message.content || '',
model: request.model,
toolCalls: message.tool_calls.map(tc => ({
toolCalls: message.tool_calls.map((tc) => ({
name: tc.function.name,
arguments: JSON.parse(tc.function.arguments),
})),
Expand Down Expand Up @@ -234,4 +227,4 @@ async function executeStreamingRequest(
logger.error('Gatewayz stream failed:', error)
throw error
}
}
}
2 changes: 1 addition & 1 deletion apps/sim/providers/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { anthropicProvider } from '@/providers/anthropic'
import { azureOpenAIProvider } from '@/providers/azure-openai'
import { cerebrasProvider } from '@/providers/cerebras'
import { deepseekProvider } from '@/providers/deepseek'
import { gatewayzProvider } from '@/providers/gatewayz'
import { googleProvider } from '@/providers/google'
import { groqProvider } from '@/providers/groq'
import {
Expand All @@ -29,7 +30,6 @@ import { openaiProvider } from '@/providers/openai'
import { openRouterProvider } from '@/providers/openrouter'
import type { ProviderConfig, ProviderId, ProviderToolConfig } from '@/providers/types'
import { xAIProvider } from '@/providers/xai'
import { gatewayzProvider } from '@/providers/gatewayz'
import { useCustomToolsStore } from '@/stores/custom-tools/store'
import { useProvidersStore } from '@/stores/providers/store'

Expand Down
5 changes: 4 additions & 1 deletion bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
"dev:sockets": "cd apps/sim && bun run dev:sockets",
"dev:full": "cd apps/sim && bun run dev:full",
"test": "turbo run test",
"format": "bunx biome format --write .",
"format:check": "bunx biome format .",
"lint": "bunx biome check --write --unsafe .",
"lint:check": "bunx biome check --unsafe .",
"format": "bun x biome format --write .",
"format:check": "bun x biome format .",
"lint": "bun x biome check --write --unsafe .",
"lint:check": "bun x biome check --unsafe .",
"lint:helm": "helm lint ./helm/sim --strict --values ./helm/sim/test/values-lint.yaml",
"lint:all": "bun run lint && bun run lint:helm",
"check": "bunx biome check --files-ignore-unknown=true",
"check": "bun x biome check --files-ignore-unknown=true",
"prepare": "bun husky",
"prebuild": "bun run lint:check",
"type-check": "turbo run type-check"
Expand Down
6 changes: 3 additions & 3 deletions packages/db/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
}
},
"scripts": {
"db:push": "bunx drizzle-kit push --config=./drizzle.config.ts",
"db:migrate": "bunx drizzle-kit migrate --config=./drizzle.config.ts",
"db:studio": "bunx drizzle-kit studio --config=./drizzle.config.ts",
"db:push": "bun x drizzle-kit push --config=./drizzle.config.ts",
"db:migrate": "bun x drizzle-kit migrate --config=./drizzle.config.ts",
"db:studio": "bun x drizzle-kit studio --config=./drizzle.config.ts",
"type-check": "tsc --noEmit"
},
"peerDependencies": {
Expand Down
Loading