diff --git a/.github/workflows/build-ecr.yml b/.github/workflows/build-ecr.yml index f089cc1bc..9e4b41c63 100644 --- a/.github/workflows/build-ecr.yml +++ b/.github/workflows/build-ecr.yml @@ -3,6 +3,7 @@ name: Build and Push to ECR on: push: branches: [main, staging] + workflow_call: permissions: id-token: write diff --git a/.github/workflows/build-ghcr-build.yml b/.github/workflows/build-ghcr-build.yml new file mode 100644 index 000000000..fbbb0ea8a --- /dev/null +++ b/.github/workflows/build-ghcr-build.yml @@ -0,0 +1,83 @@ +name: Build GHCR Images (Build Only) + +on: + workflow_call: + +permissions: + contents: read + packages: write + +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + # AMD64 builds on x86 runners + - dockerfile: ./docker/app.Dockerfile + image: ghcr.io/simstudioai/simstudio + platform: linux/amd64 + arch: amd64 + runner: linux-x64-8-core + - dockerfile: ./docker/db.Dockerfile + image: ghcr.io/simstudioai/migrations + platform: linux/amd64 + arch: amd64 + runner: linux-x64-8-core + - dockerfile: ./docker/realtime.Dockerfile + image: ghcr.io/simstudioai/realtime + platform: linux/amd64 + arch: amd64 + runner: linux-x64-8-core + # ARM64 builds on native ARM64 runners + - dockerfile: ./docker/app.Dockerfile + image: ghcr.io/simstudioai/simstudio + platform: linux/arm64 + arch: arm64 + runner: linux-arm64-8-core + - dockerfile: ./docker/db.Dockerfile + image: ghcr.io/simstudioai/migrations + platform: linux/arm64 + arch: arm64 + runner: linux-arm64-8-core + - dockerfile: ./docker/realtime.Dockerfile + image: ghcr.io/simstudioai/realtime + platform: linux/arm64 + arch: arm64 + runner: linux-arm64-8-core + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ matrix.image }} + tags: | + type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=staging-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=raw,value=staging-${{ github.sha }}-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=sha,format=long,suffix=-${{ matrix.arch }} + + - name: Build Docker image (no push) + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ matrix.dockerfile }} + platforms: ${{ matrix.platform }} + push: false + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha,scope=build-v3 + cache-to: type=gha,mode=max,scope=build-v3 + provenance: false + sbom: false \ No newline at end of file diff --git a/.github/workflows/build-ghcr-push.yml b/.github/workflows/build-ghcr-push.yml new file mode 100644 index 000000000..16561d893 --- /dev/null +++ b/.github/workflows/build-ghcr-push.yml @@ -0,0 +1,148 @@ +name: Push GHCR Images + +on: + workflow_call: + +permissions: + contents: read + packages: write + +jobs: + push: + strategy: + fail-fast: false + matrix: + include: + # AMD64 builds + - dockerfile: ./docker/app.Dockerfile + image: ghcr.io/simstudioai/simstudio + platform: linux/amd64 + arch: amd64 + - dockerfile: ./docker/db.Dockerfile + image: ghcr.io/simstudioai/migrations + platform: linux/amd64 + arch: amd64 + - dockerfile: ./docker/realtime.Dockerfile + image: ghcr.io/simstudioai/realtime + platform: linux/amd64 + arch: amd64 + # ARM64 builds + - dockerfile: ./docker/app.Dockerfile + image: ghcr.io/simstudioai/simstudio + platform: linux/arm64 + arch: arm64 + - dockerfile: ./docker/db.Dockerfile + image: ghcr.io/simstudioai/migrations + platform: linux/arm64 + arch: arm64 + - dockerfile: ./docker/realtime.Dockerfile + image: ghcr.io/simstudioai/realtime + platform: linux/arm64 + arch: arm64 + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ matrix.image }} + tags: | + type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=staging-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=raw,value=staging-${{ github.sha }}-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=sha,format=long,suffix=-${{ matrix.arch }} + + - name: Push Docker image from cache + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ matrix.dockerfile }} + platforms: ${{ matrix.platform }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha,scope=build-v3 + cache-to: type=gha,mode=max,scope=build-v3 + provenance: false + sbom: false + + create-manifests: + runs-on: ubuntu-latest + needs: push + strategy: + matrix: + include: + - image: ghcr.io/simstudioai/simstudio + - image: ghcr.io/simstudioai/migrations + - image: ghcr.io/simstudioai/realtime + permissions: + contents: read + packages: write + + steps: + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for manifest + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ matrix.image }} + tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=staging,enable=${{ github.ref == 'refs/heads/staging' }} + type=sha,format=long + + - name: Create and push manifest + run: | + # Extract the tags from metadata (these are the final manifest tags we want) + MANIFEST_TAGS="${{ steps.meta.outputs.tags }}" + + # Create manifest for each tag + for manifest_tag in $MANIFEST_TAGS; do + echo "Creating manifest for $manifest_tag" + + # The architecture-specific images have -amd64 and -arm64 suffixes + amd64_image="${manifest_tag}-amd64" + arm64_image="${manifest_tag}-arm64" + + echo "Looking for images: $amd64_image and $arm64_image" + + # Check if both architecture images exist + if docker manifest inspect "$amd64_image" >/dev/null 2>&1 && docker manifest inspect "$arm64_image" >/dev/null 2>&1; then + echo "Both images found, creating manifest..." + docker manifest create "$manifest_tag" \ + "$amd64_image" \ + "$arm64_image" + docker manifest push "$manifest_tag" + echo "Successfully created and pushed manifest for $manifest_tag" + else + echo "Error: One or both architecture images not found" + echo "Checking AMD64 image: $amd64_image" + docker manifest inspect "$amd64_image" || echo "AMD64 image not found" + echo "Checking ARM64 image: $arm64_image" + docker manifest inspect "$arm64_image" || echo "ARM64 image not found" + exit 1 + fi + done \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 42e93bcdf..326c2220a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,11 @@ name: Build and Publish Docker Image on: push: branches: [main, staging] + workflow_call: + +permissions: + contents: read + packages: write jobs: build-and-push: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d523dafb..aa8d7f726 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,11 +55,54 @@ jobs: fail_ci_if_error: false verbose: true + # Call GHCR build workflow (runs in parallel with ECR) + build-ghcr: + name: Build GHCR Images + needs: test + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/build-ghcr-build.yml + secrets: inherit + permissions: + contents: read + packages: write + + # Call ECR build workflow (runs in parallel with GHCR build) + build-ecr-deploy: + name: Build ECR and Deploy + needs: test + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/build-ecr.yml + secrets: inherit + permissions: + id-token: write + contents: read + + # Call Trigger.dev deploy workflow (runs in parallel) + trigger-deploy: + name: Deploy Trigger.dev + needs: test + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/trigger-deploy.yml + secrets: inherit + + # Push GHCR images after ECR/ECS deployment is complete + push-ghcr: + name: Push GHCR Images + needs: [build-ghcr, build-ecr-deploy] + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/build-ghcr-push.yml + secrets: inherit + permissions: + contents: read + packages: write + + # Run database migrations (depends on GHCR push and trigger deployment) migrations: name: Apply Database Migrations + needs: [push-ghcr, trigger-deploy] runs-on: ubuntu-latest if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') - needs: test + steps: - name: Checkout code uses: actions/checkout@v4 @@ -77,3 +120,11 @@ jobs: env: DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} run: bunx drizzle-kit migrate --config=./drizzle.config.ts + + # Process docs embeddings if needed + process-docs: + name: Process Docs + needs: migrations + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/docs-embeddings.yml + secrets: inherit diff --git a/.github/workflows/docs-embeddings.yml b/.github/workflows/docs-embeddings.yml index f59da979e..51578f47b 100644 --- a/.github/workflows/docs-embeddings.yml +++ b/.github/workflows/docs-embeddings.yml @@ -6,6 +6,7 @@ on: paths: - 'apps/docs/**' workflow_dispatch: # Allow manual triggering + workflow_call: jobs: process-docs-embeddings: diff --git a/.github/workflows/trigger-deploy.yml b/.github/workflows/trigger-deploy.yml index 2ff92647b..e792126ff 100644 --- a/.github/workflows/trigger-deploy.yml +++ b/.github/workflows/trigger-deploy.yml @@ -5,6 +5,7 @@ on: branches: - main - staging + workflow_call: jobs: deploy: diff --git a/apps/sim/app/api/copilot/api-keys/generate/route.ts b/apps/sim/app/api/copilot/api-keys/generate/route.ts index 640ad011d..755ee7ee0 100644 --- a/apps/sim/app/api/copilot/api-keys/generate/route.ts +++ b/apps/sim/app/api/copilot/api-keys/generate/route.ts @@ -1,12 +1,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' - -const logger = createLogger('CopilotApiKeysGenerate') - -const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' export async function POST(req: NextRequest) { try { @@ -17,6 +12,9 @@ export async function POST(req: NextRequest) { const userId = session.user.id + // Move environment variable access inside the function + const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT + const res = await fetch(`${SIM_AGENT_API_URL}/api/validate-key/generate`, { method: 'POST', headers: { @@ -27,8 +25,6 @@ export async function POST(req: NextRequest) { }) if (!res.ok) { - const errorBody = await res.text().catch(() => '') - logger.error('Sim Agent generate key error', { status: res.status, error: errorBody }) return NextResponse.json( { error: 'Failed to generate copilot API key' }, { status: res.status || 500 } @@ -38,7 +34,6 @@ export async function POST(req: NextRequest) { const data = (await res.json().catch(() => null)) as { apiKey?: string } | null if (!data?.apiKey) { - logger.error('Sim Agent generate key returned invalid payload') return NextResponse.json({ error: 'Invalid response from Sim Agent' }, { status: 500 }) } @@ -47,7 +42,6 @@ export async function POST(req: NextRequest) { { status: 201 } ) } catch (error) { - logger.error('Failed to proxy generate copilot API key', { error }) return NextResponse.json({ error: 'Failed to generate copilot API key' }, { status: 500 }) } } diff --git a/apps/sim/app/api/copilot/api-keys/route.ts b/apps/sim/app/api/copilot/api-keys/route.ts index 45d4eb08e..0cbe6cafa 100644 --- a/apps/sim/app/api/copilot/api-keys/route.ts +++ b/apps/sim/app/api/copilot/api-keys/route.ts @@ -1,12 +1,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' - -const logger = createLogger('CopilotApiKeys') - -const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' export async function GET(request: NextRequest) { try { @@ -17,6 +12,8 @@ export async function GET(request: NextRequest) { const userId = session.user.id + const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT + const res = await fetch(`${SIM_AGENT_API_URL}/api/validate-key/get-api-keys`, { method: 'POST', headers: { @@ -27,15 +24,12 @@ export async function GET(request: NextRequest) { }) if (!res.ok) { - const errorBody = await res.text().catch(() => '') - logger.error('Sim Agent get-api-keys error', { status: res.status, error: errorBody }) return NextResponse.json({ error: 'Failed to get keys' }, { status: res.status || 500 }) } const apiKeys = (await res.json().catch(() => null)) as { id: string; apiKey: string }[] | null if (!Array.isArray(apiKeys)) { - logger.error('Sim Agent get-api-keys returned invalid payload') return NextResponse.json({ error: 'Invalid response from Sim Agent' }, { status: 500 }) } @@ -43,7 +37,6 @@ export async function GET(request: NextRequest) { return NextResponse.json({ keys }, { status: 200 }) } catch (error) { - logger.error('Failed to get copilot API keys', { error }) return NextResponse.json({ error: 'Failed to get keys' }, { status: 500 }) } } @@ -62,6 +55,8 @@ export async function DELETE(request: NextRequest) { return NextResponse.json({ error: 'id is required' }, { status: 400 }) } + const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT + const res = await fetch(`${SIM_AGENT_API_URL}/api/validate-key/delete`, { method: 'POST', headers: { @@ -72,20 +67,16 @@ export async function DELETE(request: NextRequest) { }) if (!res.ok) { - const errorBody = await res.text().catch(() => '') - logger.error('Sim Agent delete key error', { status: res.status, error: errorBody }) return NextResponse.json({ error: 'Failed to delete key' }, { status: res.status || 500 }) } const data = (await res.json().catch(() => null)) as { success?: boolean } | null if (!data?.success) { - logger.error('Sim Agent delete key returned invalid payload') return NextResponse.json({ error: 'Invalid response from Sim Agent' }, { status: 500 }) } return NextResponse.json({ success: true }, { status: 200 }) } catch (error) { - logger.error('Failed to delete copilot API key', { error }) return NextResponse.json({ error: 'Failed to delete key' }, { status: 500 }) } } diff --git a/apps/sim/app/api/copilot/chat/route.ts b/apps/sim/app/api/copilot/chat/route.ts index 0bc4d312a..557d47baa 100644 --- a/apps/sim/app/api/copilot/chat/route.ts +++ b/apps/sim/app/api/copilot/chat/route.ts @@ -15,7 +15,7 @@ import { getCopilotModel } from '@/lib/copilot/config' import type { CopilotProviderConfig } from '@/lib/copilot/types' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT, SIM_AGENT_VERSION } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT, SIM_AGENT_VERSION } from '@/lib/sim-agent/constants' import { generateChatTitle } from '@/lib/sim-agent/utils' import { createFileContent, isSupportedFileType } from '@/lib/uploads/file-utils' import { S3_COPILOT_CONFIG } from '@/lib/uploads/setup' diff --git a/apps/sim/app/api/copilot/stats/route.ts b/apps/sim/app/api/copilot/stats/route.ts index dfde8c63d..643900c32 100644 --- a/apps/sim/app/api/copilot/stats/route.ts +++ b/apps/sim/app/api/copilot/stats/route.ts @@ -8,7 +8,7 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { env } from '@/lib/env' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' const SIM_AGENT_API_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT diff --git a/apps/sim/app/api/copilot/tools/mark-complete/route.ts b/apps/sim/app/api/copilot/tools/mark-complete/route.ts index 12fe4b2dd..17b00b741 100644 --- a/apps/sim/app/api/copilot/tools/mark-complete/route.ts +++ b/apps/sim/app/api/copilot/tools/mark-complete/route.ts @@ -9,7 +9,7 @@ import { } from '@/lib/copilot/auth' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' const logger = createLogger('CopilotMarkToolCompleteAPI') diff --git a/apps/sim/app/api/workflows/[id]/autolayout/route.ts b/apps/sim/app/api/workflows/[id]/autolayout/route.ts index 23ee28ccd..5d19e3804 100644 --- a/apps/sim/app/api/workflows/[id]/autolayout/route.ts +++ b/apps/sim/app/api/workflows/[id]/autolayout/route.ts @@ -6,7 +6,7 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { simAgentClient } from '@/lib/sim-agent' +import { simAgentClient } from '@/lib/sim-agent/client' import { generateRequestId } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { getAllBlocks } from '@/blocks/registry' diff --git a/apps/sim/app/api/workflows/[id]/yaml/route.ts b/apps/sim/app/api/workflows/[id]/yaml/route.ts index 4cceb9d83..ba3078516 100644 --- a/apps/sim/app/api/workflows/[id]/yaml/route.ts +++ b/apps/sim/app/api/workflows/[id]/yaml/route.ts @@ -6,7 +6,8 @@ import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT, simAgentClient } from '@/lib/sim-agent' +import { simAgentClient } from '@/lib/sim-agent/client' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' import { generateRequestId } from '@/lib/utils' import { loadWorkflowFromNormalizedTables, diff --git a/apps/sim/app/api/workflows/yaml/convert/route.ts b/apps/sim/app/api/workflows/yaml/convert/route.ts index 3582228a2..a1c3c20df 100644 --- a/apps/sim/app/api/workflows/yaml/convert/route.ts +++ b/apps/sim/app/api/workflows/yaml/convert/route.ts @@ -1,6 +1,6 @@ import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' -import { simAgentClient } from '@/lib/sim-agent' +import { simAgentClient } from '@/lib/sim-agent/client' import { generateRequestId } from '@/lib/utils' import { getAllBlocks } from '@/blocks/registry' import type { BlockConfig } from '@/blocks/types' diff --git a/apps/sim/app/api/workflows/yaml/export/route.ts b/apps/sim/app/api/workflows/yaml/export/route.ts index 5603fec3e..05a071be3 100644 --- a/apps/sim/app/api/workflows/yaml/export/route.ts +++ b/apps/sim/app/api/workflows/yaml/export/route.ts @@ -5,7 +5,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { simAgentClient } from '@/lib/sim-agent' +import { simAgentClient } from '@/lib/sim-agent/client' import { generateRequestId } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { getAllBlocks } from '@/blocks/registry' diff --git a/apps/sim/lib/copilot/tools/server/workflow/build-workflow.ts b/apps/sim/lib/copilot/tools/server/workflow/build-workflow.ts index 112112d55..6842226bf 100644 --- a/apps/sim/lib/copilot/tools/server/workflow/build-workflow.ts +++ b/apps/sim/lib/copilot/tools/server/workflow/build-workflow.ts @@ -2,7 +2,7 @@ import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import type { BuildWorkflowInput, BuildWorkflowResult } from '@/lib/copilot/tools/shared/schemas' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' import { validateWorkflowState } from '@/lib/workflows/validation' import { getAllBlocks } from '@/blocks/registry' import type { BlockConfig } from '@/blocks/types' diff --git a/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts b/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts index 8e9ba7359..eef4b4ccd 100644 --- a/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts +++ b/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts @@ -4,7 +4,7 @@ import { eq } from 'drizzle-orm' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { validateWorkflowState } from '@/lib/workflows/validation' import { getAllBlocks } from '@/blocks/registry' diff --git a/apps/sim/lib/sim-agent/client.ts b/apps/sim/lib/sim-agent/client.ts index 54bca0e4f..9f298e270 100644 --- a/apps/sim/lib/sim-agent/client.ts +++ b/apps/sim/lib/sim-agent/client.ts @@ -1,12 +1,10 @@ import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent' +import { SIM_AGENT_API_URL_DEFAULT } from '@/lib/sim-agent/constants' import { generateRequestId } from '@/lib/utils' const logger = createLogger('SimAgentClient') -const SIM_AGENT_BASE_URL = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT - export interface SimAgentRequest { workflowId: string userId?: string @@ -24,7 +22,8 @@ class SimAgentClient { private baseUrl: string constructor() { - this.baseUrl = SIM_AGENT_BASE_URL + // Move environment variable access inside the constructor + this.baseUrl = env.SIM_AGENT_API_URL || SIM_AGENT_API_URL_DEFAULT } /** diff --git a/apps/sim/next.config.ts b/apps/sim/next.config.ts index c77a33389..02c34a7e8 100644 --- a/apps/sim/next.config.ts +++ b/apps/sim/next.config.ts @@ -84,7 +84,7 @@ const nextConfig: NextConfig = { turbopack: { resolveExtensions: ['.tsx', '.ts', '.jsx', '.js', '.mjs', '.json'], }, - serverExternalPackages: ['pdf-parse'], + serverExternalPackages: ['pdf-parse', '@azure/storage-blob'], experimental: { optimizeCss: true, turbopackSourceMaps: false, diff --git a/apps/sim/package.json b/apps/sim/package.json index e906a4345..8be22c19e 100644 --- a/apps/sim/package.json +++ b/apps/sim/package.json @@ -12,7 +12,7 @@ "dev:classic": "next dev", "dev:sockets": "bun run socket-server/index.ts", "dev:full": "concurrently -n \"NextJS,Realtime\" -c \"cyan,magenta\" \"bun run dev\" \"bun run dev:sockets\"", - "build": "next build --turbopack", + "build": "next build", "start": "next start", "prepare": "cd ../.. && bun husky", "test": "vitest run",