Rhys Sullivanfmtc92c57d6 months agoHistory
34 lines · 1.5 KB · TypeScript
RawDownload
// ---------------------------------------------------------------------------// Shared execution stack — the wiring that turns an organization into a// runnable executor + engine. Used by the protected HTTP API (per-request)// and the MCP session DO (per-session) so changes to the stack flow to both.// --------------------------------------------------------------------------- import { env } from "cloudflare:workers";import { Effect } from "effect"; import { createExecutionEngine } from "@executor-js/execution";import { makeDynamicWorkerExecutor } from "@executor-js/runtime-dynamic-worker"; import { withExecutionUsageTracking } from "../api/execution-usage";import { AutumnService } from "./autumn";import { createScopedExecutor } from "./executor"; export const makeExecutionStack = (  userId: string,  organizationId: string,  organizationName: string,) =>  Effect.gen(function* () {    const executor = yield* createScopedExecutor(userId, organizationId, organizationName).pipe(      Effect.withSpan("McpSessionDO.createScopedExecutor"),    );    const codeExecutor = makeDynamicWorkerExecutor({ loader: env.LOADER });    const autumn = yield* AutumnService;    const engine = withExecutionUsageTracking(      organizationId,      createExecutionEngine({ executor, codeExecutor }),      (orgId) => Effect.runFork(autumn.trackExecution(orgId)),    );    return { executor, engine };  }).pipe(Effect.withSpan("McpSessionDO.makeExecutionStack"));