From 1420bfb73cbe9098bf263536253086e30b7bda63 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 7 Jan 2026 08:03:36 -0800 Subject: [PATCH 01/12] fix(resolver): add both new and old workflow blocks for backwards compatibility --- .../variables/resolvers/block.test.ts | 106 ++++++++++++++++++ .../sim/executor/variables/resolvers/block.ts | 6 +- 2 files changed, 110 insertions(+), 2 deletions(-) diff --git a/apps/sim/executor/variables/resolvers/block.test.ts b/apps/sim/executor/variables/resolvers/block.test.ts index 3d773d6bce..8dd10b388a 100644 --- a/apps/sim/executor/variables/resolvers/block.test.ts +++ b/apps/sim/executor/variables/resolvers/block.test.ts @@ -817,6 +817,112 @@ describe('BlockResolver', () => { expect(resolver.resolve('', ctx)).toBe('vibrant-cliff') } ) + + it.concurrent( + 'real-world scenario: accessing entire response object via (workflow type)', + () => { + const workflow = createTestWorkflow([ + { id: 'workflow-block', name: 'Workflow 1', type: 'workflow' }, + ]) + const resolver = new BlockResolver(workflow) + + // Child Response block output (new format - no wrapper) + const ctx = createTestContext('current', { + 'workflow-block': { + success: true, + childWorkflowName: 'response-workflow-child-editor', + result: { + data: { + s: 'example string', + nums: [1, 2, 3], + n: 42, + obj: { key1: 'value1', key2: 'value2' }, + }, + status: 206, + headers: { 'Content-Type': 'application/json', apple: 'banana' }, + }, + }, + }) + + // OLD reference: should return the entire result object + // This is used when the user wants to get data, status, headers all at once + const response = resolver.resolve('', ctx) + expect(response).toEqual({ + data: { + s: 'example string', + nums: [1, 2, 3], + n: 42, + obj: { key1: 'value1', key2: 'value2' }, + }, + status: 206, + headers: { 'Content-Type': 'application/json', apple: 'banana' }, + }) + + // Verify individual fields can be accessed from the returned object + expect(response.status).toBe(206) + expect(response.headers.apple).toBe('banana') + expect(response.data.s).toBe('example string') + expect(response.data.n).toBe(42) + expect(response.data.nums).toEqual([1, 2, 3]) + expect(response.data.obj.key1).toBe('value1') + } + ) + + it.concurrent( + 'real-world scenario: workflow_input type block with ', + () => { + /** + * CRITICAL: Workflow blocks can have type 'workflow' OR 'workflow_input'. + * Both must support backwards compatibility. + * + * This test uses 'workflow_input' which is the actual type in production. + */ + const workflow = createTestWorkflow([ + { id: 'workflow-block', name: 'Workflow 1', type: 'workflow_input' }, + ]) + const resolver = new BlockResolver(workflow) + + const ctx = createTestContext('current', { + 'workflow-block': { + success: true, + childWorkflowName: 'response-workflow-child-editor', + result: { + data: { + s: 'example string', + nums: [1, 2, 3], + n: 42, + obj: { key1: 'value1', key2: 'value2' }, + }, + status: 206, + headers: { 'Content-Type': 'application/json', apple: 'banana' }, + }, + }, + }) + + // OLD reference: should return the entire result object + const response = resolver.resolve('', ctx) + expect(response).toEqual({ + data: { + s: 'example string', + nums: [1, 2, 3], + n: 42, + obj: { key1: 'value1', key2: 'value2' }, + }, + status: 206, + headers: { 'Content-Type': 'application/json', apple: 'banana' }, + }) + + // Also test drilling into specific fields + expect(resolver.resolve('', ctx)).toEqual({ + s: 'example string', + nums: [1, 2, 3], + n: 42, + obj: { key1: 'value1', key2: 'value2' }, + }) + expect(resolver.resolve('', ctx)).toBe(206) + expect(resolver.resolve('', ctx)).toBe('example string') + } + ) }) describe('edge cases', () => { diff --git a/apps/sim/executor/variables/resolvers/block.ts b/apps/sim/executor/variables/resolvers/block.ts index e555c9e4fe..ba786b1675 100644 --- a/apps/sim/executor/variables/resolvers/block.ts +++ b/apps/sim/executor/variables/resolvers/block.ts @@ -90,11 +90,13 @@ export class BlockResolver implements Resolver { // Workflow block backwards compatibility: // Old: -> New: // Only apply fallback if: - // 1. Block type is 'workflow' + // 1. Block type is 'workflow' or 'workflow_input' // 2. Path starts with 'result.response.' // 3. output.result.response doesn't exist (confirming child used new format) + const isWorkflowBlock = + block?.metadata?.id === 'workflow' || block?.metadata?.id === 'workflow_input' if ( - block?.metadata?.id === 'workflow' && + isWorkflowBlock && pathParts[0] === 'result' && pathParts[1] === 'response' && output?.result?.response === undefined From 3ecf7a15eb290b8b7999a3a18833cec2050c14c0 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 7 Jan 2026 09:38:40 -0800 Subject: [PATCH 02/12] feat(seo): updated out-of-date site metadata, removed unused static assets, updated emails (#2708) * feat(seo): updated out-of-date site metadata, removed unused static assets, updated emails * more * more * remove unused social photos --- .../(landing)/components/structured-data.tsx | 36 +--- .../sim/app/.well-known/security.txt/route.ts | 42 +++++ apps/sim/app/llms-full.txt/route.ts | 175 ++++++++++++++++++ apps/sim/app/llms.txt/route.ts | 94 ++++++---- apps/sim/app/manifest.ts | 2 +- apps/sim/app/page.tsx | 10 +- apps/sim/app/robots.ts | 126 +++++++++++++ apps/sim/app/security.txt/route.ts | 12 ++ apps/sim/app/sitemap.ts | 9 - apps/sim/lib/branding/metadata.ts | 14 +- apps/sim/public/icon.svg | 8 - apps/sim/public/logo-sim.svg | 7 - apps/sim/public/robots.txt | 41 ---- apps/sim/public/sim.png | Bin 1292212 -> 0 bytes apps/sim/public/sim.svg | 8 - apps/sim/public/social/facebook.png | Bin 142298 -> 0 bytes apps/sim/public/social/instagram.png | Bin 190592 -> 0 bytes apps/sim/public/social/twitter.png | Bin 151243 -> 0 bytes helm/sim/Chart.yaml | 2 +- packages/python-sdk/pyproject.toml | 2 +- packages/python-sdk/setup.py | 2 +- 21 files changed, 436 insertions(+), 154 deletions(-) create mode 100644 apps/sim/app/.well-known/security.txt/route.ts create mode 100644 apps/sim/app/llms-full.txt/route.ts create mode 100644 apps/sim/app/robots.ts create mode 100644 apps/sim/app/security.txt/route.ts delete mode 100644 apps/sim/public/icon.svg delete mode 100644 apps/sim/public/logo-sim.svg delete mode 100644 apps/sim/public/robots.txt delete mode 100644 apps/sim/public/sim.png delete mode 100644 apps/sim/public/sim.svg delete mode 100644 apps/sim/public/social/facebook.png delete mode 100644 apps/sim/public/social/instagram.png delete mode 100644 apps/sim/public/social/twitter.png diff --git a/apps/sim/app/(landing)/components/structured-data.tsx b/apps/sim/app/(landing)/components/structured-data.tsx index 5afc2caa57..70d572c581 100644 --- a/apps/sim/app/(landing)/components/structured-data.tsx +++ b/apps/sim/app/(landing)/components/structured-data.tsx @@ -42,17 +42,6 @@ export default function StructuredData() { publisher: { '@id': 'https://sim.ai/#organization', }, - potentialAction: [ - { - '@type': 'SearchAction', - '@id': 'https://sim.ai/#searchaction', - target: { - '@type': 'EntryPoint', - urlTemplate: 'https://sim.ai/search?q={search_term_string}', - }, - 'query-input': 'required name=search_term_string', - }, - ], inLanguage: 'en-US', }, { @@ -110,7 +99,7 @@ export default function StructuredData() { name: 'Community Plan', price: '0', priceCurrency: 'USD', - priceValidUntil: '2025-12-31', + priceValidUntil: '2026-12-31', itemCondition: 'https://schema.org/NewCondition', availability: 'https://schema.org/InStock', seller: { @@ -134,7 +123,7 @@ export default function StructuredData() { unitText: 'MONTH', billingIncrement: 1, }, - priceValidUntil: '2025-12-31', + priceValidUntil: '2026-12-31', itemCondition: 'https://schema.org/NewCondition', availability: 'https://schema.org/InStock', seller: { @@ -154,7 +143,7 @@ export default function StructuredData() { unitText: 'MONTH', billingIncrement: 1, }, - priceValidUntil: '2025-12-31', + priceValidUntil: '2026-12-31', itemCondition: 'https://schema.org/NewCondition', availability: 'https://schema.org/InStock', seller: { @@ -184,8 +173,8 @@ export default function StructuredData() { screenshot: [ { '@type': 'ImageObject', - url: 'https://sim.ai/screenshots/workflow-builder.png', - caption: 'Sim workflow builder interface', + url: 'https://sim.ai/logo/426-240/primary/small.png', + caption: 'Sim AI agent workflow builder interface', }, ], }, @@ -223,16 +212,9 @@ export default function StructuredData() { } return ( - <> -