diff --git a/mcp-studio/server/db/postgres.ts b/mcp-studio/server/db/postgres.ts index 1a578851..2646cc98 100644 --- a/mcp-studio/server/db/postgres.ts +++ b/mcp-studio/server/db/postgres.ts @@ -19,7 +19,7 @@ export async function runSQL( params: unknown[] = [], ): Promise { const response = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql, params, }); diff --git a/mcp-studio/server/db/queries/executions.ts b/mcp-studio/server/db/queries/executions.ts index b89ced20..dfa16220 100644 --- a/mcp-studio/server/db/queries/executions.ts +++ b/mcp-studio/server/db/queries/executions.ts @@ -38,7 +38,7 @@ export async function claimExecution( // Atomic claim: only succeeds if status is 'enqueued' // Join with workflow table to get steps and gateway_id const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: ` UPDATE workflow_execution SET @@ -96,7 +96,7 @@ export async function getExecution( id: string, ): Promise { const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: "SELECT * FROM workflow_execution WHERE id = ? LIMIT 1", params: [id], }); @@ -332,7 +332,7 @@ export async function cancelExecution( // Only cancel if currently enqueued or running const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: ` UPDATE workflow_execution SET diff --git a/mcp-studio/server/db/schemas/agents.ts b/mcp-studio/server/db/schemas/agents.ts index 21293b48..a623783c 100644 --- a/mcp-studio/server/db/schemas/agents.ts +++ b/mcp-studio/server/db/schemas/agents.ts @@ -19,7 +19,7 @@ export async function runSQL( return p; }); const response = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql, params: sanitizedParams, }); diff --git a/mcp-studio/server/engine/events.ts b/mcp-studio/server/engine/events.ts index f3fcb786..380f28da 100644 --- a/mcp-studio/server/engine/events.ts +++ b/mcp-studio/server/engine/events.ts @@ -16,7 +16,7 @@ export async function getPendingEvents( ): Promise { const now = Date.now(); const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: `SELECT * FROM workflow_event WHERE execution_id = ? AND consumed_at IS NULL AND (visible_at IS NULL OR visible_at <= ?) ${type ? "AND type = ?" : ""} ORDER BY visible_at ASC NULLS FIRST, created_at ASC`, @@ -48,7 +48,7 @@ export async function consumeSignal( signalId: string, ): Promise { const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: `UPDATE workflow_event SET consumed_at = ? WHERE id = ? AND consumed_at IS NULL RETURNING id`, params: [Date.now(), signalId], }); diff --git a/mcp-studio/server/prompts.ts b/mcp-studio/server/prompts.ts index 1428e9c6..ad52bab6 100644 --- a/mcp-studio/server/prompts.ts +++ b/mcp-studio/server/prompts.ts @@ -44,7 +44,7 @@ interface StoredPrompt { * Load prompts from the database */ async function loadPrompts(env: Env): Promise { - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { return []; } diff --git a/mcp-studio/server/tools/assistant.ts b/mcp-studio/server/tools/assistant.ts index 7ee704c3..d7b3ff3d 100644 --- a/mcp-studio/server/tools/assistant.ts +++ b/mcp-studio/server/tools/assistant.ts @@ -26,13 +26,13 @@ import { import { createPrivateTool } from "@decocms/runtime/tools"; import type { z } from "zod"; import { runSQL } from "../db/postgres.ts"; -import type { Env } from "../types/env.ts"; import { buildOrderByClause, buildWhereClause, type OrderByExpression, type WhereExpression, } from "../db/schemas/query-builder.ts"; +import type { Env } from "../types/env.ts"; // Extract binding schemas const LIST_BINDING = ASSISTANTS_BINDING.find( @@ -151,7 +151,7 @@ export const createListTool = (env: Env) => outputSchema: LIST_BINDING.outputSchema, execute: async ({ context }) => { // If DATABASE is not available, return empty list - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { return { items: [], totalCount: 0, @@ -210,7 +210,7 @@ export const createGetTool = (env: Env) => inputSchema: CollectionGetInputSchema, outputSchema: createCollectionGetOutputSchema(AssistantSchema), execute: async ({ context }) => { - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { return { item: null }; } @@ -246,7 +246,7 @@ export const createInsertTool = (env: Env) => }: { context: z.infer; }) => { - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { throw new Error("DATABASE not configured for mcp-studio"); } @@ -318,7 +318,7 @@ export const createUpdateTool = (env: Env) => }: { context: z.infer; }) => { - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { throw new Error("DATABASE not configured for mcp-studio"); } @@ -397,7 +397,7 @@ export const createDeleteTool = (env: Env) => }: { context: z.infer; }) => { - if (!env.MESH_REQUEST_CONTEXT.state.DATABASE) { + if (!env.MESH_REQUEST_CONTEXT?.state?.DATABASE) { throw new Error("DATABASE not configured for mcp-studio"); } diff --git a/mcp-studio/server/tools/workflow.ts b/mcp-studio/server/tools/workflow.ts index 2faf1467..a4725b63 100644 --- a/mcp-studio/server/tools/workflow.ts +++ b/mcp-studio/server/tools/workflow.ts @@ -114,14 +114,14 @@ export const createListTool = (env: Env) => `; const itemsResult: any = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql, params: [...params, limit, offset], }); const countQuery = `SELECT COUNT(*) as count FROM workflow_collection ${whereClause}`; const countResult = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: countQuery, params, }); @@ -147,7 +147,7 @@ export async function getWorkflowCollection( id: string, ): Promise { const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql: "SELECT * FROM workflow_collection WHERE id = ? LIMIT 1", params: [id], }); @@ -313,7 +313,7 @@ y UPDATE workflow_collection `; const result = - await env.MESH_REQUEST_CONTEXT.state.DATABASE.DATABASES_RUN_SQL({ + await env.MESH_REQUEST_CONTEXT?.state?.DATABASE.DATABASES_RUN_SQL({ sql, params, });