workplane 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../server/src/index.ts","../../core/src/config.ts","../../core/src/env.ts","../../db/src/client.ts","../../core/src/ids.ts","../../server/src/store.ts","../../server/src/workflows.ts","../../server/src/validation.ts","../../core/src/auth.ts","../../server/src/auth-middleware.ts"],"sourcesContent":["import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { URL } from \"node:url\";\nimport { DBOS } from \"@dbos-inc/dbos-sdk\";\nimport { ZodError } from \"zod\";\nimport { loadServerConfig } from \"../../core/src/config.js\";\nimport { getPool } from \"../../db/src/client.js\";\nimport { PgStore } from \"./store.js\";\nimport type { AppendInputEventInput, ArtifactInput, CreateTaskInput, RunLogInput, RunStatus } from \"../../types/src/index.js\";\nimport { registerWorkflows } from \"./workflows.js\";\nimport { validateCreateTaskInput, validateInputEvent } from \"./validation.js\";\nimport { checkRouteAuth, requiresConfiguredToken, routeAuthFor } from \"./auth-middleware.js\";\n\nconst taskStatuses = new Set<RunStatus>([\"queued\", \"assigned\", \"running\", \"succeeded\", \"failed\", \"cancelled\"]);\n\nfunction parseStatus(value: string | null): RunStatus | undefined {\n if (!value) {\n return undefined;\n }\n if (!taskStatuses.has(value as RunStatus)) {\n throw new Error(`invalid status filter: ${value}`);\n }\n return value as RunStatus;\n}\n\nasync function readJson<T>(req: IncomingMessage): Promise<T> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const body = Buffer.concat(chunks).toString(\"utf8\");\n return (body ? JSON.parse(body) : {}) as T;\n}\n\nfunction writeJson(res: ServerResponse, statusCode: number, payload: unknown): void {\n const json = JSON.stringify(payload);\n res.statusCode = statusCode;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(json);\n}\n\nasync function main(): Promise<void> {\n const config = loadServerConfig();\n const pool = getPool(config.databaseUrl);\n const store = new PgStore(pool);\n const workflows = registerWorkflows(store);\n const appName = process.env.DBOS_APPLICATION_NAME ?? \"workplane-server\";\n const conductorKey = process.env.DBOS_CONDUCTOR_KEY;\n const conductorUrl = process.env.DBOS_CONDUCTOR_URL;\n\n DBOS.setConfig({\n name: appName,\n systemDatabaseUrl: config.databaseUrl,\n });\n await DBOS.launch({\n conductorKey,\n conductorURL: conductorUrl,\n });\n\n const server = createServer(async (req, res) => {\n try {\n if (!req.url || !req.method) {\n writeJson(res, 400, { error: \"invalid request\" });\n return;\n }\n\n const url = new URL(req.url, \"http://localhost\");\n const routeAuth = routeAuthFor(req.method, url.pathname);\n const authConfig = { nodeToken: config.nodeToken, operatorToken: config.operatorToken };\n if (requiresConfiguredToken(routeAuth, authConfig) && !checkRouteAuth(req, res, routeAuth, authConfig)) {\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/healthz\") {\n writeJson(res, 200, { ok: true });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/tasks\") {\n const body = await readJson<CreateTaskInput>(req);\n const validated = validateCreateTaskInput(body);\n const handle = await DBOS.startWorkflow(workflows.createTask)({\n kind: validated.kind,\n adapter: validated.adapter,\n payload: validated.payload,\n requires: validated.requires ?? [],\n });\n const task = await handle.getResult();\n writeJson(res, 201, task);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/tasks\") {\n const status = parseStatus(url.searchParams.get(\"status\"));\n const tasks = await store.listTasks(status);\n writeJson(res, 200, { tasks });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/tasks\\/[^/]+$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const task = await store.getTask(taskId);\n if (!task) {\n writeJson(res, 404, { error: \"task not found\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/tasks\\/[^/]+\\/retry$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const handle = await DBOS.startWorkflow(workflows.retryTask)(taskId);\n const task = await handle.getResult();\n if (!task) {\n writeJson(res, 409, { error: \"task is not retryable\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/tasks\\/[^/]+\\/cancel$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const handle = await DBOS.startWorkflow(workflows.cancelTask)(taskId);\n const task = await handle.getResult();\n if (!task) {\n writeJson(res, 409, { error: \"task is not cancellable\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/runs\") {\n const taskId = url.searchParams.get(\"taskId\") ?? undefined;\n const status = parseStatus(url.searchParams.get(\"status\"));\n const runs = await store.listRuns({ taskId, status });\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n writeJson(res, 200, run);\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/logs$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const logs = await store.getRunLogs(runId);\n writeJson(res, 200, { logs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const artifacts = await store.listRunArtifacts(runId);\n writeJson(res, 200, { artifacts });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/nodes/register\") {\n const body = await readJson<{ name: string; capabilities: string[]; nodeId?: string }>(req);\n const node = await store.registerNode(body.name, body.capabilities ?? [], body.nodeId);\n writeJson(res, 201, node);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/nodes\\/[^/]+\\/poll$/.test(url.pathname)) {\n const nodeId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ capabilities: string[] }>(req);\n const assignment = await store.pollNode(nodeId, body.capabilities ?? []);\n writeJson(res, 200, { assignment });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/status$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ status: RunStatus; error?: string }>(req);\n const handle = await DBOS.startWorkflow(workflows.updateRunStatus)(runId, body.status, body.error);\n const run = await handle.getResult();\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n writeJson(res, 200, run);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/logs$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ logs: RunLogInput[] }>(req);\n const handle = await DBOS.startWorkflow(workflows.appendRunLogs)(runId, body.logs ?? []);\n const inserted = await handle.getResult();\n writeJson(res, 200, { inserted });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<ArtifactInput>(req);\n const handle = await DBOS.startWorkflow(workflows.createArtifact)(runId, body);\n const artifact = await handle.getResult();\n writeJson(res, 201, artifact);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/input$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n if (run.status !== \"running\") {\n writeJson(res, 409, { error: \"run is not active\" });\n return;\n }\n const body = await readJson<AppendInputEventInput>(req);\n const validated = validateInputEvent(body);\n const handle = await DBOS.startWorkflow(workflows.appendInputEvent)(runId, validated);\n const event = await handle.getResult();\n writeJson(res, 201, event);\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/input$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const afterSequence = Number(url.searchParams.get(\"afterSequence\") ?? \"0\");\n const events = await store.getInputEvents(runId, afterSequence);\n writeJson(res, 200, { events });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/input\\/\\d+\\/delivered$/.test(url.pathname)) {\n const parts = url.pathname.split(\"/\");\n const runId = parts[2];\n const sequence = Number(parts[4]);\n const handle = await DBOS.startWorkflow(workflows.markInputDelivered)(runId, sequence);\n await handle.getResult();\n writeJson(res, 200, { ok: true });\n return;\n }\n\n writeJson(res, 404, { error: \"not found\" });\n } catch (error) {\n if (error instanceof ZodError) {\n writeJson(res, 400, { error: \"invalid task payload\", details: error });\n return;\n }\n if (error instanceof Error && error.message.startsWith(\"invalid status filter:\")) {\n writeJson(res, 400, { error: error.message });\n return;\n }\n const message = error instanceof Error ? error.message : \"internal error\";\n writeJson(res, 500, { error: message });\n }\n });\n\n server.listen(config.port, () => {\n process.stdout.write(`workplane server listening on http://localhost:${config.port}\\n`);\n });\n\n const shutdown = async (): Promise<void> => {\n await DBOS.shutdown();\n await pool.end();\n server.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => {\n void shutdown();\n });\n process.on(\"SIGTERM\", () => {\n void shutdown();\n });\n}\n\nmain().catch((error) => {\n process.stderr.write(`${String(error)}\\n`);\n process.exit(1);\n});\n","import { z } from \"zod\";\nimport { loadLocalEnv } from \"./env.js\";\n\nloadLocalEnv();\n\nconst serverEnvSchema = z.object({\n DATABASE_URL: z.string().min(1),\n WORKPLANE_SERVER_PORT: z\n .string()\n .optional()\n .default(\"8787\")\n .transform((value) => Number.parseInt(value, 10)),\n WORKPLANE_NODE_TOKEN: z.string().optional(),\n WORKPLANE_OPERATOR_TOKEN: z.string().optional(),\n WORKPLANE_ENV_ALLOWLIST: z.string().optional(),\n});\n\nconst nodeEnvSchema = z.object({\n WORKPLANE_SERVER_URL: z.string().url().optional().default(\"http://localhost:8787\"),\n WORKPLANE_NODE_NAME: z.string().optional().default(\"local-node-1\"),\n WORKPLANE_NODE_ID: z.string().optional(),\n WORKPLANE_NODE_CAPABILITIES: z\n .string()\n .optional()\n .default(\"shell,git,node,typescript,aider,ollama,codex,claude-code\"),\n WORKPLANE_NODE_TOKEN: z.string().optional(),\n WORKPLANE_POLL_INTERVAL_MS: z\n .string()\n .optional()\n .default(\"3000\")\n .transform((value) => Number.parseInt(value, 10)),\n WORKPLANE_ENV_ALLOWLIST: z.string().optional(),\n});\n\nexport interface ServerConfig {\n databaseUrl: string;\n port: number;\n nodeToken?: string;\n operatorToken?: string;\n envAllowlist: string[];\n}\n\nexport interface NodeConfig {\n serverUrl: string;\n nodeName: string;\n nodeId?: string;\n nodeCapabilities: string[];\n nodeToken?: string;\n pollIntervalMs: number;\n envAllowlist: string[];\n}\n\nexport function loadServerConfig(env: NodeJS.ProcessEnv = process.env): ServerConfig {\n const parsed = serverEnvSchema.parse(env);\n\n return {\n databaseUrl: parsed.DATABASE_URL,\n port: parsed.WORKPLANE_SERVER_PORT,\n nodeToken: parsed.WORKPLANE_NODE_TOKEN,\n operatorToken: parsed.WORKPLANE_OPERATOR_TOKEN,\n envAllowlist: parseCsv(parsed.WORKPLANE_ENV_ALLOWLIST ?? \"\"),\n };\n}\n\nexport function loadNodeConfig(env: NodeJS.ProcessEnv = process.env): NodeConfig {\n const parsed = nodeEnvSchema.parse(env);\n\n return {\n serverUrl: parsed.WORKPLANE_SERVER_URL,\n nodeName: parsed.WORKPLANE_NODE_NAME,\n nodeId: parsed.WORKPLANE_NODE_ID,\n nodeCapabilities: parseCsv(parsed.WORKPLANE_NODE_CAPABILITIES),\n nodeToken: parsed.WORKPLANE_NODE_TOKEN,\n pollIntervalMs: parsed.WORKPLANE_POLL_INTERVAL_MS,\n envAllowlist: parseCsv(parsed.WORKPLANE_ENV_ALLOWLIST ?? \"\"),\n };\n}\n\nexport function parseCsv(value: string): string[] {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n","import { config as dotenvConfig } from \"dotenv\";\n\nlet envLoaded = false;\n\nexport function loadLocalEnv(): void {\n if (envLoaded) {\n return;\n }\n\n dotenvConfig({ path: \".env\" });\n dotenvConfig({ path: \".env.local\", override: true });\n\n envLoaded = true;\n}\n\n","import { Pool } from \"pg\";\n\nconst pools = new Map<string, Pool>();\n\nexport function getPool(databaseUrl: string): Pool {\n const existing = pools.get(databaseUrl);\n if (existing) {\n return existing;\n }\n\n const pool = new Pool({ connectionString: databaseUrl });\n pools.set(databaseUrl, pool);\n return pool;\n}\n","import { randomUUID } from \"node:crypto\";\n\nexport function makeId(prefix: string): string {\n return `${prefix}_${randomUUID().replace(/-/g, \"\").slice(0, 12)}`;\n}\n\n","import type { Pool, PoolClient } from \"pg\";\nimport { makeId } from \"../../core/src/ids.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunRecord,\n TaskRecord,\n} from \"../../types/src/index.js\";\n\ninterface NodePollResult {\n run: RunRecord;\n task: TaskRecord;\n}\n\nfunction mapTask(row: Record<string, unknown>): TaskRecord {\n return {\n id: String(row.id),\n kind: String(row.kind),\n adapter: String(row.adapter),\n payload: (row.payload as Record<string, unknown>) ?? {},\n requires: (row.requires as string[]) ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: new Date(String(row.created_at)).toISOString(),\n updatedAt: new Date(String(row.updated_at)).toISOString(),\n };\n}\n\nfunction mapRun(row: Record<string, unknown>): RunRecord {\n return {\n id: String(row.id),\n taskId: String(row.task_id),\n nodeId: String(row.node_id),\n attempt: Number(row.attempt),\n status: row.status as RunRecord[\"status\"],\n startedAt: row.started_at ? new Date(String(row.started_at)).toISOString() : null,\n endedAt: row.ended_at ? new Date(String(row.ended_at)).toISOString() : null,\n error: row.error ? String(row.error) : null,\n };\n}\n\nfunction mapInputEvent(row: Record<string, unknown>): RunInputEvent {\n return {\n id: Number(row.id),\n runId: String(row.run_id),\n sequence: Number(row.sequence),\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: (row.payload as Record<string, unknown>) ?? {},\n createdAt: new Date(String(row.created_at)).toISOString(),\n deliveredAt: row.delivered_at ? new Date(String(row.delivered_at)).toISOString() : null,\n };\n}\n\nfunction mapArtifact(row: Record<string, unknown>): ArtifactRecord {\n return {\n id: String(row.id),\n runId: String(row.run_id),\n type: String(row.type),\n name: String(row.name),\n path: String(row.path),\n metadata: (row.metadata as Record<string, unknown> | null) ?? null,\n createdAt: new Date(String(row.created_at)).toISOString(),\n };\n}\n\nexport class PgStore {\n constructor(private readonly pool: Pool) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const taskId = makeId(\"task\");\n const result = await this.pool.query(\n `\n insert into tasks (id, kind, adapter, payload, requires, status)\n values ($1, $2, $3, $4::jsonb, $5::text[], 'queued')\n returning *\n `,\n [taskId, input.kind, input.adapter, JSON.stringify(input.payload), input.requires ?? []],\n );\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const result = status\n ? await this.pool.query(\"select * from tasks where status = $1 order by created_at desc limit 100\", [status])\n : await this.pool.query(\"select * from tasks order by created_at desc limit 100\");\n return result.rows.map((row: Record<string, unknown>) => mapTask(row));\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const result = await this.pool.query(\"select * from tasks where id = $1\", [taskId]);\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const taskId = filters?.taskId;\n const status = filters?.status;\n const result =\n taskId && status\n ? await this.pool.query(\"select * from runs where task_id = $1 and status = $2 order by created_at desc\", [\n taskId,\n status,\n ])\n : taskId\n ? await this.pool.query(\"select * from runs where task_id = $1 order by created_at desc\", [taskId])\n : status\n ? await this.pool.query(\"select * from runs where status = $1 order by created_at desc limit 100\", [status])\n : await this.pool.query(\"select * from runs order by created_at desc limit 100\");\n\n return result.rows.map((row: Record<string, unknown>) => mapRun(row));\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const result = await this.pool.query(\"select * from runs where id = $1\", [runId]);\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapRun(result.rows[0] as Record<string, unknown>);\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const existing = await this.pool.query(\"select * from nodes where name = $1\", [name]);\n if (existing.rowCount && existing.rowCount > 0) {\n const row = existing.rows[0] as Record<string, unknown>;\n const nodeId = String(row.id);\n const updated = await this.pool.query(\n `\n update nodes\n set capabilities = $2::text[], status = 'online', last_heartbeat_at = now(), updated_at = now()\n where id = $1\n returning *\n `,\n [nodeId, capabilities],\n );\n return this.mapNodeRecord(updated.rows[0] as Record<string, unknown>);\n }\n\n const nodeId = preferredId ?? makeId(\"node\");\n const result = await this.pool.query(\n `\n insert into nodes (id, name, capabilities, status, last_heartbeat_at)\n values ($1, $2, $3::text[], 'online', now())\n returning *\n `,\n [nodeId, name, capabilities],\n );\n\n return this.mapNodeRecord(result.rows[0] as Record<string, unknown>);\n }\n\n async getRunCancellationState(\n runId: string,\n ): Promise<{ runStatus: string; taskStatus: string } | null> {\n const result = await this.pool.query(\n `\n select r.status as run_status, t.status as task_status\n from runs r\n join tasks t on t.id = r.task_id\n where r.id = $1\n `,\n [runId],\n );\n if (result.rowCount === 0) {\n return null;\n }\n const row = result.rows[0] as Record<string, unknown>;\n return {\n runStatus: String(row.run_status),\n taskStatus: String(row.task_status),\n };\n }\n\n private mapNodeRecord(row: Record<string, unknown>): NodeRecord {\n return {\n id: String(row.id),\n name: String(row.name),\n capabilities: (row.capabilities as string[]) ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.last_heartbeat_at\n ? new Date(String(row.last_heartbeat_at)).toISOString()\n : null,\n };\n }\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n await this.touchNode(client, nodeId, capabilities);\n const taskResult = await client.query(\n `\n select *\n from tasks\n where status = 'queued'\n and requires <@ $1::text[]\n order by created_at asc\n limit 1\n for update skip locked\n `,\n [capabilities],\n );\n\n if (taskResult.rowCount === 0) {\n await client.query(\"commit\");\n return null;\n }\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskId = String(taskRow.id);\n const runId = makeId(\"run\");\n const attemptResult = await client.query(\"select coalesce(max(attempt), 0) as max_attempt from runs where task_id = $1\", [\n taskId,\n ]);\n const attempt = Number(attemptResult.rows[0].max_attempt) + 1;\n\n const runResult = await client.query(\n `\n insert into runs (id, task_id, node_id, attempt, status, started_at)\n values ($1, $2, $3, $4, 'assigned', now())\n returning *\n `,\n [runId, taskId, nodeId, attempt],\n );\n\n await client.query(\"update tasks set status = 'assigned', updated_at = now() where id = $1\", [taskId]);\n\n await client.query(\"commit\");\n\n return {\n task: mapTask(taskRow),\n run: mapRun(runResult.rows[0] as Record<string, unknown>),\n };\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const currentResult = await client.query(\n `\n select r.*, t.status as task_status\n from runs r\n join tasks t on t.id = r.task_id\n where r.id = $1\n for update\n `,\n [runId],\n );\n if (currentResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n const currentRow = currentResult.rows[0] as Record<string, unknown>;\n const currentTaskStatus = String(currentRow.task_status);\n if (currentTaskStatus === \"cancelled\" && status !== \"cancelled\") {\n await client.query(\"commit\");\n return mapRun(currentRow);\n }\n\n const runResult = await client.query(\n `\n update runs\n set status = $2, error = $3, ended_at = case when $2 in ('succeeded', 'failed', 'cancelled') then now() else ended_at end, updated_at = now()\n where id = $1\n returning *\n `,\n [runId, status, error ?? null],\n );\n if (runResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n\n const run = mapRun(runResult.rows[0] as Record<string, unknown>);\n const nextTaskStatus =\n status === \"succeeded\" || status === \"failed\" || status === \"cancelled\" ? status : \"running\";\n if (currentTaskStatus !== \"cancelled\" || status === \"cancelled\") {\n await client.query(\"update tasks set status = $2, updated_at = now() where id = $1\", [run.taskId, nextTaskStatus]);\n }\n await client.query(\"commit\");\n return run;\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n let inserted = 0;\n for (const log of logs) {\n await this.pool.query(\n `\n insert into run_logs (run_id, step_name, stream, message)\n values ($1, $2, $3, $4)\n `,\n [runId, log.stepName ?? null, log.stream, log.message],\n );\n inserted += 1;\n }\n\n return inserted;\n }\n\n async getRunLogs(runId: string): Promise<Array<Record<string, unknown>>> {\n const result = await this.pool.query(\"select * from run_logs where run_id = $1 order by timestamp asc\", [runId]);\n return result.rows as Array<Record<string, unknown>>;\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const artifactId = makeId(\"artifact\");\n const result = await this.pool.query(\n `\n insert into artifacts (id, run_id, type, name, path, metadata)\n values ($1, $2, $3, $4, $5, $6::jsonb)\n returning *\n `,\n [artifactId, runId, input.type, input.name, input.path, input.metadata ? JSON.stringify(input.metadata) : null],\n );\n return mapArtifact(result.rows[0] as Record<string, unknown>);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const result = await this.pool.query(\"select * from artifacts where run_id = $1 order by created_at asc\", [runId]);\n return result.rows.map((row: Record<string, unknown>) => mapArtifact(row));\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const result = await this.pool.query(\n `\n update tasks\n set status = 'queued', updated_at = now()\n where id = $1 and status = 'failed'\n returning *\n `,\n [taskId],\n );\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const taskResult = await client.query(\"select * from tasks where id = $1 for update\", [taskId]);\n if (taskResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskStatus = String(taskRow.status);\n if (taskStatus === \"succeeded\" || taskStatus === \"failed\" || taskStatus === \"cancelled\") {\n await client.query(\"rollback\");\n return null;\n }\n\n if (taskStatus === \"assigned\" || taskStatus === \"running\") {\n const runResult = await client.query(\n `\n select * from runs\n where task_id = $1\n order by attempt desc\n limit 1\n for update\n `,\n [taskId],\n );\n if (runResult.rowCount !== 0) {\n const runStatus = String(runResult.rows[0].status);\n if (runStatus !== \"succeeded\" && runStatus !== \"failed\" && runStatus !== \"cancelled\") {\n await client.query(\n `\n update runs\n set status = 'cancelled', ended_at = now(), updated_at = now(), error = coalesce(error, 'task cancelled')\n where id = $1\n `,\n [runResult.rows[0].id],\n );\n }\n }\n }\n\n const updateTaskResult = await client.query(\n `\n update tasks\n set status = 'cancelled', updated_at = now()\n where id = $1\n returning *\n `,\n [taskId],\n );\n\n await client.query(\"commit\");\n return mapTask(updateTaskResult.rows[0] as Record<string, unknown>);\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const seqResult = await client.query(\n \"select coalesce(max(sequence), 0) + 1 as next_seq from run_input_events where run_id = $1\",\n [runId],\n );\n const sequence = Number(seqResult.rows[0].next_seq);\n const result = await client.query(\n `\n insert into run_input_events (run_id, sequence, kind, payload)\n values ($1, $2, $3, $4::jsonb)\n returning *\n `,\n [runId, sequence, input.kind, JSON.stringify(input.payload)],\n );\n await client.query(\"commit\");\n return mapInputEvent(result.rows[0] as Record<string, unknown>);\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const result = await this.pool.query(\n \"select * from run_input_events where run_id = $1 and sequence > $2 order by sequence asc\",\n [runId, afterSequence],\n );\n return result.rows.map((row: Record<string, unknown>) => mapInputEvent(row));\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.pool.query(\n \"update run_input_events set delivered_at = now() where run_id = $1 and sequence = $2\",\n [runId, sequence],\n );\n }\n\n private async touchNode(client: PoolClient, nodeId: string, capabilities: string[]): Promise<void> {\n await client.query(\n `\n update nodes\n set capabilities = $2::text[], status = 'online', last_heartbeat_at = now(), updated_at = now()\n where id = $1\n `,\n [nodeId, capabilities],\n );\n }\n}\n","import { DBOS } from \"@dbos-inc/dbos-sdk\";\nimport type { AppendInputEventInput, ArtifactInput, CreateTaskInput, RunInputEvent, RunLogInput, RunStatus } from \"../../types/src/index.js\";\nimport { PgStore } from \"./store.js\";\n\nexport interface ServerWorkflows {\n createTask: (input: CreateTaskInput) => Promise<Awaited<ReturnType<PgStore[\"createTask\"]>>>;\n retryTask: (taskId: string) => Promise<Awaited<ReturnType<PgStore[\"retryTask\"]>>>;\n cancelTask: (taskId: string) => Promise<Awaited<ReturnType<PgStore[\"cancelTask\"]>>>;\n updateRunStatus: (\n runId: string,\n status: RunStatus,\n error?: string,\n ) => Promise<Awaited<ReturnType<PgStore[\"updateRunStatus\"]>>>;\n appendRunLogs: (runId: string, logs: RunLogInput[]) => Promise<Awaited<ReturnType<PgStore[\"appendRunLogs\"]>>>;\n createArtifact: (\n runId: string,\n input: ArtifactInput,\n ) => Promise<Awaited<ReturnType<PgStore[\"createArtifact\"]>>>;\n appendInputEvent: (runId: string, input: AppendInputEventInput) => Promise<RunInputEvent>;\n markInputDelivered: (runId: string, sequence: number) => Promise<void>;\n}\n\nexport function registerWorkflows(store: PgStore): ServerWorkflows {\n const createTask = DBOS.registerWorkflow(\n async (input: CreateTaskInput) =>\n DBOS.runStep(() => store.createTask(input), {\n name: \"store-create-task\",\n }),\n { name: \"createTaskWorkflow\" },\n );\n\n const retryTask = DBOS.registerWorkflow(\n async (taskId: string) =>\n DBOS.runStep(() => store.retryTask(taskId), {\n name: \"store-retry-task\",\n }),\n { name: \"retryTaskWorkflow\" },\n );\n\n const cancelTask = DBOS.registerWorkflow(\n async (taskId: string) =>\n DBOS.runStep(() => store.cancelTask(taskId), {\n name: \"store-cancel-task\",\n }),\n { name: \"cancelTaskWorkflow\" },\n );\n\n const updateRunStatus = DBOS.registerWorkflow(\n async (runId: string, status: RunStatus, error?: string) =>\n DBOS.runStep(() => store.updateRunStatus(runId, status, error), {\n name: \"store-update-run-status\",\n }),\n { name: \"updateRunStatusWorkflow\" },\n );\n\n const appendRunLogs = DBOS.registerWorkflow(\n async (runId: string, logs: RunLogInput[]) =>\n DBOS.runStep(() => store.appendRunLogs(runId, logs), {\n name: \"store-append-run-logs\",\n }),\n { name: \"appendRunLogsWorkflow\" },\n );\n\n const createArtifact = DBOS.registerWorkflow(\n async (runId: string, input: ArtifactInput) =>\n DBOS.runStep(() => store.createArtifact(runId, input), {\n name: \"store-create-artifact\",\n }),\n { name: \"createArtifactWorkflow\" },\n );\n\n const appendInputEvent = DBOS.registerWorkflow(\n async (runId: string, input: AppendInputEventInput) =>\n DBOS.runStep(() => store.appendInputEvent(runId, input), {\n name: \"store-append-input-event\",\n }),\n { name: \"appendInputEventWorkflow\" },\n );\n\n const markInputDelivered = DBOS.registerWorkflow(\n async (runId: string, sequence: number) =>\n DBOS.runStep(() => store.markInputDelivered(runId, sequence), {\n name: \"store-mark-input-delivered\",\n }),\n { name: \"markInputDeliveredWorkflow\" },\n );\n\n return {\n createTask,\n retryTask,\n cancelTask,\n updateRunStatus,\n appendRunLogs,\n createArtifact,\n appendInputEvent,\n markInputDelivered,\n };\n}\n","import { z } from \"zod\";\nimport type { AppendInputEventInput, CreateTaskInput } from \"../../types/src/index.js\";\n\nconst repoFields = {\n repo: z.string().min(1).optional(),\n branch: z.string().min(1).optional(),\n};\n\nconst shellTaskSchema = z.object({\n kind: z.literal(\"shell.exec\"),\n adapter: z.literal(\"shell\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n command: z.string().min(1),\n args: z.array(z.string()).optional(),\n cwd: z.string().min(1).optional(),\n ...repoFields,\n }),\n});\n\nconst aiderTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"aider\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n prompt: z.string().min(1),\n model: z.string().min(1).optional(),\n repo: z.string().min(1),\n branch: z.string().min(1).optional(),\n testCommand: z.string().min(1).optional(),\n }),\n});\n\nconst ollamaTaskSchema = z.object({\n kind: z.literal(\"inference.batch\"),\n adapter: z.literal(\"ollama\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n model: z.string().min(1),\n prompt: z.string().min(1),\n inputFile: z.string().min(1).optional(),\n }),\n});\n\nconst harnessPayloadSchema = z.object({\n prompt: z.string().min(1),\n model: z.string().min(1).optional(),\n repo: z.string().min(1),\n branch: z.string().min(1).optional(),\n testCommand: z.string().min(1).optional(),\n extraArgs: z.array(z.string()).optional(),\n interactive: z.boolean().optional(),\n});\n\nconst codexTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"codex\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: harnessPayloadSchema,\n});\n\nconst claudeCodeTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"claude-code\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: harnessPayloadSchema,\n});\n\nconst taskSchema = z.discriminatedUnion(\"adapter\", [\n shellTaskSchema,\n aiderTaskSchema,\n ollamaTaskSchema,\n codexTaskSchema,\n claudeCodeTaskSchema,\n]);\n\nexport function validateCreateTaskInput(input: unknown): CreateTaskInput {\n return taskSchema.parse(input);\n}\n\nconst inputEventSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"stdin\"),\n payload: z.object({ data: z.string() }),\n }),\n z.object({\n kind: z.literal(\"signal\"),\n payload: z.object({ signal: z.enum([\"SIGTERM\", \"SIGKILL\", \"SIGINT\"]) }),\n }),\n z.object({\n kind: z.literal(\"resize\"),\n payload: z.object({\n rows: z.number().int().positive(),\n cols: z.number().int().positive(),\n }),\n }),\n]);\n\nexport function validateInputEvent(input: unknown): AppendInputEventInput {\n return inputEventSchema.parse(input);\n}\n","import type { IncomingMessage } from \"node:http\";\n\nexport function parseBearerToken(authorizationHeader: string | undefined): string | undefined {\n if (!authorizationHeader) {\n return undefined;\n }\n const match = /^Bearer\\s+(.+)$/i.exec(authorizationHeader.trim());\n return match?.[1];\n}\n\nexport function isAuthorizedBearer(provided: string | undefined, expected: string | undefined): boolean {\n if (!expected) {\n return true;\n }\n if (!provided) {\n return false;\n }\n return provided === expected;\n}\n\nexport function getRequestBearer(req: IncomingMessage): string | undefined {\n const header = req.headers.authorization;\n const value = Array.isArray(header) ? header[0] : header;\n return parseBearerToken(value);\n}\n\nexport function authHeaders(token: string | undefined): Record<string, string> {\n if (!token) {\n return {};\n }\n return { authorization: `Bearer ${token}` };\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { getRequestBearer, isAuthorizedBearer } from \"../../core/src/auth.js\";\n\nexport type RouteAuth = \"public\" | \"node\" | \"operator\";\n\nexport interface AuthConfig {\n nodeToken?: string;\n operatorToken?: string;\n}\n\nexport function checkRouteAuth(\n req: IncomingMessage,\n res: ServerResponse,\n auth: RouteAuth,\n config: AuthConfig,\n): boolean {\n const bearer = getRequestBearer(req);\n\n if (auth === \"public\") {\n return true;\n }\n\n if (auth === \"node\") {\n if (!isAuthorizedBearer(bearer, config.nodeToken)) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"unauthorized node request\" }));\n return false;\n }\n return true;\n }\n\n if (auth === \"operator\") {\n if (!isAuthorizedBearer(bearer, config.operatorToken)) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"unauthorized operator request\" }));\n return false;\n }\n return true;\n }\n\n return true;\n}\n\nexport function routeAuthFor(method: string, pathname: string): RouteAuth {\n if (pathname === \"/healthz\") {\n return \"public\";\n }\n\n if (method === \"POST\" && pathname === \"/nodes/register\") {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/nodes\\/[^/]+\\/poll$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/status$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/logs$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"GET\" && /^\\/runs\\/[^/]+\\/input$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/input\\/\\d+\\/delivered$/.test(pathname)) {\n return \"node\";\n }\n\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/input$/.test(pathname)) {\n return \"operator\";\n }\n\n if (method === \"POST\" && pathname === \"/tasks\") {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/tasks\\/[^/]+\\/retry$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/tasks\\/[^/]+\\/cancel$/.test(pathname)) {\n return \"operator\";\n }\n\n return \"public\";\n}\n\nexport function requiresConfiguredToken(auth: RouteAuth, config: AuthConfig): boolean {\n if (auth === \"node\") {\n return Boolean(config.nodeToken);\n }\n if (auth === \"operator\") {\n return Boolean(config.operatorToken);\n }\n return false;\n}\n"],"mappings":";;;AAAA,SAAS,oBAA+D;AACxE,SAAS,WAAW;AACpB,SAAS,QAAAA,aAAY;AACrB,SAAS,gBAAgB;;;ACHzB,SAAS,SAAS;;;ACAlB,SAAS,UAAU,oBAAoB;AAEvC,IAAI,YAAY;AAET,SAAS,eAAqB;AACnC,MAAI,WAAW;AACb;AAAA,EACF;AAEA,eAAa,EAAE,MAAM,OAAO,CAAC;AAC7B,eAAa,EAAE,MAAM,cAAc,UAAU,KAAK,CAAC;AAEnD,cAAY;AACd;;;ADVA,aAAa;AAEb,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,uBAAuB,EACpB,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,EACd,UAAU,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,CAAC;AAAA,EAClD,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,yBAAyB,EAAE,OAAO,EAAE,SAAS;AAC/C,CAAC;AAED,IAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,uBAAuB;AAAA,EACjF,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,cAAc;AAAA,EACjE,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,6BAA6B,EAC1B,OAAO,EACP,SAAS,EACT,QAAQ,0DAA0D;AAAA,EACrE,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,4BAA4B,EACzB,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,EACd,UAAU,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,CAAC;AAAA,EAClD,yBAAyB,EAAE,OAAO,EAAE,SAAS;AAC/C,CAAC;AAoBM,SAAS,iBAAiB,MAAyB,QAAQ,KAAmB;AACnF,QAAM,SAAS,gBAAgB,MAAM,GAAG;AAExC,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,eAAe,OAAO;AAAA,IACtB,cAAc,SAAS,OAAO,2BAA2B,EAAE;AAAA,EAC7D;AACF;AAgBO,SAAS,SAAS,OAAyB;AAChD,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AACnB;;;AEnFA,SAAS,YAAY;AAErB,IAAM,QAAQ,oBAAI,IAAkB;AAE7B,SAAS,QAAQ,aAA2B;AACjD,QAAM,WAAW,MAAM,IAAI,WAAW;AACtC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,IAAI,KAAK,EAAE,kBAAkB,YAAY,CAAC;AACvD,QAAM,IAAI,aAAa,IAAI;AAC3B,SAAO;AACT;;;ACbA,SAAS,kBAAkB;AAEpB,SAAS,OAAO,QAAwB;AAC7C,SAAO,GAAG,MAAM,IAAI,WAAW,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AACjE;;;ACeA,SAAS,QAAQ,KAA0C;AACzD,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,SAAU,IAAI,WAAuC,CAAC;AAAA,IACtD,UAAW,IAAI,YAAyB,CAAC;AAAA,IACzC,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,IACxD,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,EAC1D;AACF;AAEA,SAAS,OAAO,KAAyC;AACvD,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,QAAQ,OAAO,IAAI,OAAO;AAAA,IAC1B,QAAQ,OAAO,IAAI,OAAO;AAAA,IAC1B,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,aAAa,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY,IAAI;AAAA,IAC7E,SAAS,IAAI,WAAW,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,YAAY,IAAI;AAAA,IACvE,OAAO,IAAI,QAAQ,OAAO,IAAI,KAAK,IAAI;AAAA,EACzC;AACF;AAEA,SAAS,cAAc,KAA6C;AAClE,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,OAAO,OAAO,IAAI,MAAM;AAAA,IACxB,UAAU,OAAO,IAAI,QAAQ;AAAA,IAC7B,MAAM,IAAI;AAAA,IACV,SAAU,IAAI,WAAuC,CAAC;AAAA,IACtD,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,IACxD,aAAa,IAAI,eAAe,IAAI,KAAK,OAAO,IAAI,YAAY,CAAC,EAAE,YAAY,IAAI;AAAA,EACrF;AACF;AAEA,SAAS,YAAY,KAA8C;AACjE,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,OAAO,OAAO,IAAI,MAAM;AAAA,IACxB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,UAAW,IAAI,YAA+C;AAAA,IAC9D,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,EAC1D;AACF;AAEO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,MAAY;AAAZ;AAAA,EAAa;AAAA,EAAb;AAAA,EAE7B,MAAM,WAAW,OAA6C;AAC5D,UAAM,SAAS,OAAO,MAAM;AAC5B,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,MAAM,MAAM,MAAM,SAAS,KAAK,UAAU,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC;AAAA,IACzF;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,UAAU,QAAsD;AACpE,UAAM,SAAS,SACX,MAAM,KAAK,KAAK,MAAM,4EAA4E,CAAC,MAAM,CAAC,IAC1G,MAAM,KAAK,KAAK,MAAM,wDAAwD;AAClF,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,QAAQ,GAAG,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,QAAQ,QAA4C;AACxD,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,qCAAqC,CAAC,MAAM,CAAC;AAClF,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,SAAS,SAAmF;AAChG,UAAM,SAAS,SAAS;AACxB,UAAM,SAAS,SAAS;AACxB,UAAM,SACJ,UAAU,SACN,MAAM,KAAK,KAAK,MAAM,kFAAkF;AAAA,MACtG;AAAA,MACA;AAAA,IACF,CAAC,IACD,SACE,MAAM,KAAK,KAAK,MAAM,kEAAkE,CAAC,MAAM,CAAC,IAChG,SACE,MAAM,KAAK,KAAK,MAAM,2EAA2E,CAAC,MAAM,CAAC,IACzG,MAAM,KAAK,KAAK,MAAM,uDAAuD;AAEvF,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,OAAO,GAAG,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,OAAO,OAA0C;AACrD,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,oCAAoC,CAAC,KAAK,CAAC;AAChF,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,OAAO,OAAO,KAAK,CAAC,CAA4B;AAAA,EACzD;AAAA,EAEA,MAAM,aAAa,MAAc,cAAwB,aAA2C;AAClG,UAAM,WAAW,MAAM,KAAK,KAAK,MAAM,uCAAuC,CAAC,IAAI,CAAC;AACpF,QAAI,SAAS,YAAY,SAAS,WAAW,GAAG;AAC9C,YAAM,MAAM,SAAS,KAAK,CAAC;AAC3B,YAAMC,UAAS,OAAO,IAAI,EAAE;AAC5B,YAAM,UAAU,MAAM,KAAK,KAAK;AAAA,QAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAACA,SAAQ,YAAY;AAAA,MACvB;AACA,aAAO,KAAK,cAAc,QAAQ,KAAK,CAAC,CAA4B;AAAA,IACtE;AAEA,UAAM,SAAS,eAAe,OAAO,MAAM;AAC3C,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,MAAM,YAAY;AAAA,IAC7B;AAEA,WAAO,KAAK,cAAc,OAAO,KAAK,CAAC,CAA4B;AAAA,EACrE;AAAA,EAEA,MAAM,wBACJ,OAC2D;AAC3D,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,CAAC,KAAK;AAAA,IACR;AACA,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AACA,UAAM,MAAM,OAAO,KAAK,CAAC;AACzB,WAAO;AAAA,MACL,WAAW,OAAO,IAAI,UAAU;AAAA,MAChC,YAAY,OAAO,IAAI,WAAW;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,cAAc,KAA0C;AAC9D,WAAO;AAAA,MACL,IAAI,OAAO,IAAI,EAAE;AAAA,MACjB,MAAM,OAAO,IAAI,IAAI;AAAA,MACrB,cAAe,IAAI,gBAA6B,CAAC;AAAA,MACjD,QAAQ,IAAI;AAAA,MACZ,iBAAiB,IAAI,oBACjB,IAAI,KAAK,OAAO,IAAI,iBAAiB,CAAC,EAAE,YAAY,IACpD;AAAA,IACN;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,QAAgB,cAAwD;AACrF,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,KAAK,UAAU,QAAQ,QAAQ,YAAY;AACjD,YAAM,aAAa,MAAM,OAAO;AAAA,QAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,CAAC,YAAY;AAAA,MACf;AAEA,UAAI,WAAW,aAAa,GAAG;AAC7B,cAAM,OAAO,MAAM,QAAQ;AAC3B,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,WAAW,KAAK,CAAC;AACjC,YAAM,SAAS,OAAO,QAAQ,EAAE;AAChC,YAAM,QAAQ,OAAO,KAAK;AAC1B,YAAM,gBAAgB,MAAM,OAAO,MAAM,gFAAgF;AAAA,QACvH;AAAA,MACF,CAAC;AACD,YAAM,UAAU,OAAO,cAAc,KAAK,CAAC,EAAE,WAAW,IAAI;AAE5D,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,CAAC,OAAO,QAAQ,QAAQ,OAAO;AAAA,MACjC;AAEA,YAAM,OAAO,MAAM,0EAA0E,CAAC,MAAM,CAAC;AAErG,YAAM,OAAO,MAAM,QAAQ;AAE3B,aAAO;AAAA,QACL,MAAM,QAAQ,OAAO;AAAA,QACrB,KAAK,OAAO,UAAU,KAAK,CAAC,CAA4B;AAAA,MAC1D;AAAA,IACF,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,OAAe,QAA6B,OAA2C;AAC3G,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,gBAAgB,MAAM,OAAO;AAAA,QACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,CAAC,KAAK;AAAA,MACR;AACA,UAAI,cAAc,aAAa,GAAG;AAChC,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AACA,YAAM,aAAa,cAAc,KAAK,CAAC;AACvC,YAAM,oBAAoB,OAAO,WAAW,WAAW;AACvD,UAAI,sBAAsB,eAAe,WAAW,aAAa;AAC/D,cAAM,OAAO,MAAM,QAAQ;AAC3B,eAAO,OAAO,UAAU;AAAA,MAC1B;AAEA,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAAC,OAAO,QAAQ,SAAS,IAAI;AAAA,MAC/B;AACA,UAAI,UAAU,aAAa,GAAG;AAC5B,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,YAAM,MAAM,OAAO,UAAU,KAAK,CAAC,CAA4B;AAC/D,YAAM,iBACJ,WAAW,eAAe,WAAW,YAAY,WAAW,cAAc,SAAS;AACrF,UAAI,sBAAsB,eAAe,WAAW,aAAa;AAC/D,cAAM,OAAO,MAAM,kEAAkE,CAAC,IAAI,QAAQ,cAAc,CAAC;AAAA,MACnH;AACA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO;AAAA,IACT,SAASC,QAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAMA;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,OAAe,MAAsC;AACvE,QAAI,WAAW;AACf,eAAW,OAAO,MAAM;AACtB,YAAM,KAAK,KAAK;AAAA,QACd;AAAA;AAAA;AAAA;AAAA,QAIA,CAAC,OAAO,IAAI,YAAY,MAAM,IAAI,QAAQ,IAAI,OAAO;AAAA,MACvD;AACA,kBAAY;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,OAAwD;AACvE,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,mEAAmE,CAAC,KAAK,CAAC;AAC/G,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,eAAe,OAAe,OAA+C;AACjF,UAAM,aAAa,OAAO,UAAU;AACpC,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,YAAY,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,WAAW,KAAK,UAAU,MAAM,QAAQ,IAAI,IAAI;AAAA,IAChH;AACA,WAAO,YAAY,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC9D;AAAA,EAEA,MAAM,iBAAiB,OAA0C;AAC/D,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,qEAAqE,CAAC,KAAK,CAAC;AACjH,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,YAAY,GAAG,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,UAAU,QAA4C;AAC1D,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,CAAC,MAAM;AAAA,IACT;AACA,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW,QAA4C;AAC3D,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,aAAa,MAAM,OAAO,MAAM,gDAAgD,CAAC,MAAM,CAAC;AAC9F,UAAI,WAAW,aAAa,GAAG;AAC7B,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,WAAW,KAAK,CAAC;AACjC,YAAM,aAAa,OAAO,QAAQ,MAAM;AACxC,UAAI,eAAe,eAAe,eAAe,YAAY,eAAe,aAAa;AACvF,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,UAAI,eAAe,cAAc,eAAe,WAAW;AACzD,cAAM,YAAY,MAAM,OAAO;AAAA,UAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOA,CAAC,MAAM;AAAA,QACT;AACA,YAAI,UAAU,aAAa,GAAG;AAC5B,gBAAM,YAAY,OAAO,UAAU,KAAK,CAAC,EAAE,MAAM;AACjD,cAAI,cAAc,eAAe,cAAc,YAAY,cAAc,aAAa;AACpF,kBAAM,OAAO;AAAA,cACX;AAAA;AAAA;AAAA;AAAA;AAAA,cAKA,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,mBAAmB,MAAM,OAAO;AAAA,QACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAAC,MAAM;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO,QAAQ,iBAAiB,KAAK,CAAC,CAA4B;AAAA,IACpE,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAe,OAAsD;AAC1F,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA,QACA,CAAC,KAAK;AAAA,MACR;AACA,YAAM,WAAW,OAAO,UAAU,KAAK,CAAC,EAAE,QAAQ;AAClD,YAAM,SAAS,MAAM,OAAO;AAAA,QAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,CAAC,OAAO,UAAU,MAAM,MAAM,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,MAC7D;AACA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO,cAAc,OAAO,KAAK,CAAC,CAA4B;AAAA,IAChE,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,OAAe,eAAiD;AACnF,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA,MACA,CAAC,OAAO,aAAa;AAAA,IACvB;AACA,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,cAAc,GAAG,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,mBAAmB,OAAe,UAAiC;AACvE,UAAM,KAAK,KAAK;AAAA,MACd;AAAA,MACA,CAAC,OAAO,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAc,UAAU,QAAoB,QAAgB,cAAuC;AACjG,UAAM,OAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,YAAY;AAAA,IACvB;AAAA,EACF;AACF;;;AC3dA,SAAS,YAAY;AAsBd,SAAS,kBAAkB,OAAiC;AACjE,QAAM,aAAa,KAAK;AAAA,IACtB,OAAO,UACL,KAAK,QAAQ,MAAM,MAAM,WAAW,KAAK,GAAG;AAAA,MAC1C,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,qBAAqB;AAAA,EAC/B;AAEA,QAAM,YAAY,KAAK;AAAA,IACrB,OAAO,WACL,KAAK,QAAQ,MAAM,MAAM,UAAU,MAAM,GAAG;AAAA,MAC1C,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,oBAAoB;AAAA,EAC9B;AAEA,QAAM,aAAa,KAAK;AAAA,IACtB,OAAO,WACL,KAAK,QAAQ,MAAM,MAAM,WAAW,MAAM,GAAG;AAAA,MAC3C,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,qBAAqB;AAAA,EAC/B;AAEA,QAAM,kBAAkB,KAAK;AAAA,IAC3B,OAAO,OAAe,QAAmB,UACvC,KAAK,QAAQ,MAAM,MAAM,gBAAgB,OAAO,QAAQ,KAAK,GAAG;AAAA,MAC9D,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,0BAA0B;AAAA,EACpC;AAEA,QAAM,gBAAgB,KAAK;AAAA,IACzB,OAAO,OAAe,SACpB,KAAK,QAAQ,MAAM,MAAM,cAAc,OAAO,IAAI,GAAG;AAAA,MACnD,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,wBAAwB;AAAA,EAClC;AAEA,QAAM,iBAAiB,KAAK;AAAA,IAC1B,OAAO,OAAe,UACpB,KAAK,QAAQ,MAAM,MAAM,eAAe,OAAO,KAAK,GAAG;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,yBAAyB;AAAA,EACnC;AAEA,QAAM,mBAAmB,KAAK;AAAA,IAC5B,OAAO,OAAe,UACpB,KAAK,QAAQ,MAAM,MAAM,iBAAiB,OAAO,KAAK,GAAG;AAAA,MACvD,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,2BAA2B;AAAA,EACrC;AAEA,QAAM,qBAAqB,KAAK;AAAA,IAC9B,OAAO,OAAe,aACpB,KAAK,QAAQ,MAAM,MAAM,mBAAmB,OAAO,QAAQ,GAAG;AAAA,MAC5D,MAAM;AAAA,IACR,CAAC;AAAA,IACH,EAAE,MAAM,6BAA6B;AAAA,EACvC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACjGA,SAAS,KAAAC,UAAS;AAGlB,IAAM,aAAa;AAAA,EACjB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACjC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACrC;AAEA,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,YAAY;AAAA,EAC5B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACzB,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnC,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAChC,GAAG;AAAA,EACL,CAAC;AACH,CAAC;AAED,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACnC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC1C,CAAC;AACH,CAAC;AAED,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,SAASA,GAAE,QAAQ,QAAQ;AAAA,EAC3B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAED,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,aAAaA,GAAE,QAAQ,EAAE,SAAS;AACpC,CAAC;AAED,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAAS;AACX,CAAC;AAED,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,aAAa;AAAA,EAChC,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAAS;AACX,CAAC;AAED,IAAM,aAAaA,GAAE,mBAAmB,WAAW;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,wBAAwB,OAAiC;AACvE,SAAO,WAAW,MAAM,KAAK;AAC/B;AAEA,IAAM,mBAAmBA,GAAE,mBAAmB,QAAQ;AAAA,EACpDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,OAAO;AAAA,IACvB,SAASA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,EAAE,CAAC;AAAA,EACxC,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,SAASA,GAAE,OAAO,EAAE,QAAQA,GAAE,KAAK,CAAC,WAAW,WAAW,QAAQ,CAAC,EAAE,CAAC;AAAA,EACxE,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,SAASA,GAAE,OAAO;AAAA,MAChB,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,MAChC,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAEM,SAAS,mBAAmB,OAAuC;AACxE,SAAO,iBAAiB,MAAM,KAAK;AACrC;;;AClGO,SAAS,iBAAiB,qBAA6D;AAC5F,MAAI,CAAC,qBAAqB;AACxB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,mBAAmB,KAAK,oBAAoB,KAAK,CAAC;AAChE,SAAO,QAAQ,CAAC;AAClB;AAEO,SAAS,mBAAmB,UAA8B,UAAuC;AACtG,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEO,SAAS,iBAAiB,KAA0C;AACzE,QAAM,SAAS,IAAI,QAAQ;AAC3B,QAAM,QAAQ,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAClD,SAAO,iBAAiB,KAAK;AAC/B;;;ACdO,SAAS,eACd,KACA,KACA,MACA,QACS;AACT,QAAM,SAAS,iBAAiB,GAAG;AAEnC,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,QAAQ;AACnB,QAAI,CAAC,mBAAmB,QAAQ,OAAO,SAAS,GAAG;AACjD,UAAI,aAAa;AACjB,UAAI,UAAU,gBAAgB,kBAAkB;AAChD,UAAI,IAAI,KAAK,UAAU,EAAE,OAAO,4BAA4B,CAAC,CAAC;AAC9D,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,YAAY;AACvB,QAAI,CAAC,mBAAmB,QAAQ,OAAO,aAAa,GAAG;AACrD,UAAI,aAAa;AACjB,UAAI,UAAU,gBAAgB,kBAAkB;AAChD,UAAI,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAClE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,QAAgB,UAA6B;AACxE,MAAI,aAAa,YAAY;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,aAAa,mBAAmB;AACvD,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,yBAAyB,KAAK,QAAQ,GAAG;AAChE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,0BAA0B,KAAK,QAAQ,GAAG;AACjE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,wBAAwB,KAAK,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,6BAA6B,KAAK,QAAQ,GAAG;AACpE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,SAAS,yBAAyB,KAAK,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,yCAAyC,KAAK,QAAQ,GAAG;AAChF,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,yBAAyB,KAAK,QAAQ,GAAG;AAChE,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,aAAa,UAAU;AAC9C,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,0BAA0B,KAAK,QAAQ,GAAG;AACjE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,2BAA2B,KAAK,QAAQ,GAAG;AAClE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,MAAiB,QAA6B;AACpF,MAAI,SAAS,QAAQ;AACnB,WAAO,QAAQ,OAAO,SAAS;AAAA,EACjC;AACA,MAAI,SAAS,YAAY;AACvB,WAAO,QAAQ,OAAO,aAAa;AAAA,EACrC;AACA,SAAO;AACT;;;ATrFA,IAAM,eAAe,oBAAI,IAAe,CAAC,UAAU,YAAY,WAAW,aAAa,UAAU,WAAW,CAAC;AAE7G,SAAS,YAAY,OAA6C;AAChE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI,CAAC,aAAa,IAAI,KAAkB,GAAG;AACzC,UAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,EACnD;AACA,SAAO;AACT;AAEA,eAAe,SAAY,KAAkC;AAC3D,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,KAAK;AAC7B,WAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EACjE;AACA,QAAM,OAAO,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM;AAClD,SAAQ,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AACrC;AAEA,SAAS,UAAU,KAAqB,YAAoB,SAAwB;AAClF,QAAM,OAAO,KAAK,UAAU,OAAO;AACnC,MAAI,aAAa;AACjB,MAAI,UAAU,gBAAgB,kBAAkB;AAChD,MAAI,IAAI,IAAI;AACd;AAEA,eAAe,OAAsB;AACnC,QAAM,SAAS,iBAAiB;AAChC,QAAM,OAAO,QAAQ,OAAO,WAAW;AACvC,QAAM,QAAQ,IAAI,QAAQ,IAAI;AAC9B,QAAM,YAAY,kBAAkB,KAAK;AACzC,QAAM,UAAU,QAAQ,IAAI,yBAAyB;AACrD,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,eAAe,QAAQ,IAAI;AAEjC,EAAAC,MAAK,UAAU;AAAA,IACb,MAAM;AAAA,IACN,mBAAmB,OAAO;AAAA,EAC5B,CAAC;AACD,QAAMA,MAAK,OAAO;AAAA,IAChB;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAED,QAAM,SAAS,aAAa,OAAO,KAAK,QAAQ;AAC9C,QAAI;AACF,UAAI,CAAC,IAAI,OAAO,CAAC,IAAI,QAAQ;AAC3B,kBAAU,KAAK,KAAK,EAAE,OAAO,kBAAkB,CAAC;AAChD;AAAA,MACF;AAEA,YAAM,MAAM,IAAI,IAAI,IAAI,KAAK,kBAAkB;AAC/C,YAAM,YAAY,aAAa,IAAI,QAAQ,IAAI,QAAQ;AACvD,YAAM,aAAa,EAAE,WAAW,OAAO,WAAW,eAAe,OAAO,cAAc;AACtF,UAAI,wBAAwB,WAAW,UAAU,KAAK,CAAC,eAAe,KAAK,KAAK,WAAW,UAAU,GAAG;AACtG;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,YAAY;AACvD,kBAAU,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,IAAI,aAAa,UAAU;AACtD,cAAM,OAAO,MAAM,SAA0B,GAAG;AAChD,cAAM,YAAY,wBAAwB,IAAI;AAC9C,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,UAAU,EAAE;AAAA,UAC5D,MAAM,UAAU;AAAA,UAChB,SAAS,UAAU;AAAA,UACnB,SAAS,UAAU;AAAA,UACnB,UAAU,UAAU,YAAY,CAAC;AAAA,QACnC,CAAC;AACD,cAAM,OAAO,MAAM,OAAO,UAAU;AACpC,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,UAAU;AACrD,cAAM,SAAS,YAAY,IAAI,aAAa,IAAI,QAAQ,CAAC;AACzD,cAAM,QAAQ,MAAM,MAAM,UAAU,MAAM;AAC1C,kBAAU,KAAK,KAAK,EAAE,MAAM,CAAC;AAC7B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,mBAAmB,KAAK,IAAI,QAAQ,GAAG;AACjE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,MAAM,QAAQ,MAAM;AACvC,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,iBAAiB,CAAC;AAC/C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,0BAA0B,KAAK,IAAI,QAAQ,GAAG;AACzE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,SAAS,EAAE,MAAM;AACnE,cAAM,OAAO,MAAM,OAAO,UAAU;AACpC,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACtD;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,2BAA2B,KAAK,IAAI,QAAQ,GAAG;AAC1E,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,UAAU,EAAE,MAAM;AACpE,cAAM,OAAO,MAAM,OAAO,UAAU;AACpC,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,0BAA0B,CAAC;AACxD;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,SAAS;AACpD,cAAM,SAAS,IAAI,aAAa,IAAI,QAAQ,KAAK;AACjD,cAAM,SAAS,YAAY,IAAI,aAAa,IAAI,QAAQ,CAAC;AACzD,cAAM,OAAO,MAAM,MAAM,SAAS,EAAE,QAAQ,OAAO,CAAC;AACpD,kBAAU,KAAK,KAAK,EAAE,KAAK,CAAC;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,kBAAkB,KAAK,IAAI,QAAQ,GAAG;AAChE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,MAAM,MAAM,MAAM,OAAO,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,GAAG;AACvB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,wBAAwB,KAAK,IAAI,QAAQ,GAAG;AACtE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,MAAM,WAAW,KAAK;AACzC,kBAAU,KAAK,KAAK,EAAE,KAAK,CAAC;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,6BAA6B,KAAK,IAAI,QAAQ,GAAG;AAC3E,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,YAAY,MAAM,MAAM,iBAAiB,KAAK;AACpD,kBAAU,KAAK,KAAK,EAAE,UAAU,CAAC;AACjC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,IAAI,aAAa,mBAAmB;AAC/D,cAAM,OAAO,MAAM,SAAoE,GAAG;AAC1F,cAAM,OAAO,MAAM,MAAM,aAAa,KAAK,MAAM,KAAK,gBAAgB,CAAC,GAAG,KAAK,MAAM;AACrF,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACxE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,SAAqC,GAAG;AAC3D,cAAM,aAAa,MAAM,MAAM,SAAS,QAAQ,KAAK,gBAAgB,CAAC,CAAC;AACvE,kBAAU,KAAK,KAAK,EAAE,WAAW,CAAC;AAClC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,0BAA0B,KAAK,IAAI,QAAQ,GAAG;AACzE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAgD,GAAG;AACtE,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,eAAe,EAAE,OAAO,KAAK,QAAQ,KAAK,KAAK;AACjG,cAAM,MAAM,MAAM,OAAO,UAAU;AACnC,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,GAAG;AACvB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,wBAAwB,KAAK,IAAI,QAAQ,GAAG;AACvE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAkC,GAAG;AACxD,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,aAAa,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC;AACvF,cAAM,WAAW,MAAM,OAAO,UAAU;AACxC,kBAAU,KAAK,KAAK,EAAE,SAAS,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,6BAA6B,KAAK,IAAI,QAAQ,GAAG;AAC5E,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAwB,GAAG;AAC9C,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,cAAc,EAAE,OAAO,IAAI;AAC7E,cAAM,WAAW,MAAM,OAAO,UAAU;AACxC,kBAAU,KAAK,KAAK,QAAQ;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACxE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,MAAM,MAAM,MAAM,OAAO,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,YAAI,IAAI,WAAW,WAAW;AAC5B,oBAAU,KAAK,KAAK,EAAE,OAAO,oBAAoB,CAAC;AAClD;AAAA,QACF;AACA,cAAM,OAAO,MAAM,SAAgC,GAAG;AACtD,cAAM,YAAY,mBAAmB,IAAI;AACzC,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,gBAAgB,EAAE,OAAO,SAAS;AACpF,cAAM,QAAQ,MAAM,OAAO,UAAU;AACrC,kBAAU,KAAK,KAAK,KAAK;AACzB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACvE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,gBAAgB,OAAO,IAAI,aAAa,IAAI,eAAe,KAAK,GAAG;AACzE,cAAM,SAAS,MAAM,MAAM,eAAe,OAAO,aAAa;AAC9D,kBAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AAC9B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yCAAyC,KAAK,IAAI,QAAQ,GAAG;AACxF,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG;AACpC,cAAM,QAAQ,MAAM,CAAC;AACrB,cAAM,WAAW,OAAO,MAAM,CAAC,CAAC;AAChC,cAAM,SAAS,MAAMA,MAAK,cAAc,UAAU,kBAAkB,EAAE,OAAO,QAAQ;AACrF,cAAM,OAAO,UAAU;AACvB,kBAAU,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AAChC;AAAA,MACF;AAEA,gBAAU,KAAK,KAAK,EAAE,OAAO,YAAY,CAAC;AAAA,IAC5C,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,kBAAU,KAAK,KAAK,EAAE,OAAO,wBAAwB,SAAS,MAAM,CAAC;AACrE;AAAA,MACF;AACA,UAAI,iBAAiB,SAAS,MAAM,QAAQ,WAAW,wBAAwB,GAAG;AAChF,kBAAU,KAAK,KAAK,EAAE,OAAO,MAAM,QAAQ,CAAC;AAC5C;AAAA,MACF;AACA,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,gBAAU,KAAK,KAAK,EAAE,OAAO,QAAQ,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,MAAM,MAAM;AAC/B,YAAQ,OAAO,MAAM,kDAAkD,OAAO,IAAI;AAAA,CAAI;AAAA,EACxF,CAAC;AAED,QAAM,WAAW,YAA2B;AAC1C,UAAMA,MAAK,SAAS;AACpB,UAAM,KAAK,IAAI;AACf,WAAO,MAAM;AACb,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,GAAG,UAAU,MAAM;AACzB,SAAK,SAAS;AAAA,EAChB,CAAC;AACD,UAAQ,GAAG,WAAW,MAAM;AAC1B,SAAK,SAAS;AAAA,EAChB,CAAC;AACH;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,OAAO,MAAM,GAAG,OAAO,KAAK,CAAC;AAAA,CAAI;AACzC,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["DBOS","nodeId","error","z","DBOS"]}
1
+ {"version":3,"sources":["../../dbos/src/index.ts","../../server/src/index.ts","../../core/src/config.ts","../../core/src/env.ts","../../db/src/client.ts","../../core/src/ids.ts","../../server/src/store.ts","../../server/src/workflows-vanilla.ts","../../server/src/validation.ts","../../core/src/auth.ts","../../server/src/auth-middleware.ts"],"sourcesContent":["import { DBOS } from \"@dbos-inc/dbos-sdk\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n RunInputEvent,\n RunLogInput,\n RunRecord,\n RunStatus,\n ServerWorkflows,\n TaskRecord,\n} from \"@workplane/types\";\n\nexport class DbosWorkflows implements ServerWorkflows {\n private readonly registered: ServerWorkflows;\n\n constructor(store: ServerWorkflows) {\n const createTask = DBOS.registerWorkflow(\n async (input: CreateTaskInput) =>\n DBOS.runStep(() => store.createTask(input), { name: \"store-create-task\" }),\n { name: \"createTaskWorkflow\" },\n );\n\n const retryTask = DBOS.registerWorkflow(\n async (taskId: string) =>\n DBOS.runStep(() => store.retryTask(taskId), { name: \"store-retry-task\" }),\n { name: \"retryTaskWorkflow\" },\n );\n\n const cancelTask = DBOS.registerWorkflow(\n async (taskId: string) =>\n DBOS.runStep(() => store.cancelTask(taskId), { name: \"store-cancel-task\" }),\n { name: \"cancelTaskWorkflow\" },\n );\n\n const updateRunStatus = DBOS.registerWorkflow(\n async (runId: string, status: RunStatus, error?: string) =>\n DBOS.runStep(() => store.updateRunStatus(runId, status, error), { name: \"store-update-run-status\" }),\n { name: \"updateRunStatusWorkflow\" },\n );\n\n const appendRunLogs = DBOS.registerWorkflow(\n async (runId: string, logs: RunLogInput[]) =>\n DBOS.runStep(() => store.appendRunLogs(runId, logs), { name: \"store-append-run-logs\" }),\n { name: \"appendRunLogsWorkflow\" },\n );\n\n const createArtifact = DBOS.registerWorkflow(\n async (runId: string, input: ArtifactInput) =>\n DBOS.runStep(() => store.createArtifact(runId, input), { name: \"store-create-artifact\" }),\n { name: \"createArtifactWorkflow\" },\n );\n\n const appendInputEvent = DBOS.registerWorkflow(\n async (runId: string, input: AppendInputEventInput) =>\n DBOS.runStep(() => store.appendInputEvent(runId, input), { name: \"store-append-input-event\" }),\n { name: \"appendInputEventWorkflow\" },\n );\n\n const markInputDelivered = DBOS.registerWorkflow(\n async (runId: string, sequence: number) =>\n DBOS.runStep(() => store.markInputDelivered(runId, sequence), { name: \"store-mark-input-delivered\" }),\n { name: \"markInputDeliveredWorkflow\" },\n );\n\n this.registered = {\n createTask,\n retryTask,\n cancelTask,\n updateRunStatus,\n appendRunLogs,\n createArtifact,\n appendInputEvent,\n markInputDelivered,\n };\n }\n\n async launch(options: {\n appName: string;\n systemDatabaseUrl: string;\n conductorKey?: string;\n conductorUrl?: string;\n }): Promise<void> {\n DBOS.setConfig({\n name: options.appName,\n systemDatabaseUrl: options.systemDatabaseUrl,\n });\n await DBOS.launch({\n conductorKey: options.conductorKey,\n conductorURL: options.conductorUrl,\n });\n }\n\n async shutdown(): Promise<void> {\n await DBOS.shutdown();\n }\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const handle = await DBOS.startWorkflow(this.registered.createTask)(input);\n return handle.getResult();\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const handle = await DBOS.startWorkflow(this.registered.retryTask)(taskId);\n return handle.getResult();\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n const handle = await DBOS.startWorkflow(this.registered.cancelTask)(taskId);\n return handle.getResult();\n }\n\n async updateRunStatus(runId: string, status: RunStatus, error?: string): Promise<RunRecord | null> {\n const handle = await DBOS.startWorkflow(this.registered.updateRunStatus)(runId, status, error);\n return handle.getResult();\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n const handle = await DBOS.startWorkflow(this.registered.appendRunLogs)(runId, logs);\n return handle.getResult();\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const handle = await DBOS.startWorkflow(this.registered.createArtifact)(runId, input);\n return handle.getResult();\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n const handle = await DBOS.startWorkflow(this.registered.appendInputEvent)(runId, input);\n return handle.getResult();\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n const handle = await DBOS.startWorkflow(this.registered.markInputDelivered)(runId, sequence);\n await handle.getResult();\n }\n}\n\nexport function createDbosWorkflows(store: ServerWorkflows): DbosWorkflows {\n return new DbosWorkflows(store);\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { URL } from \"node:url\";\nimport { ZodError } from \"zod\";\nimport { loadServerConfig } from \"../../core/src/config.js\";\nimport { getPool } from \"../../db/src/client.js\";\nimport { PgStore } from \"./store.js\";\nimport type { AppendInputEventInput, ArtifactInput, CreateTaskInput, RunLogInput, RunStatus, ServerWorkflows } from \"../../types/src/index.js\";\nimport { VanillaWorkflows } from \"./workflows-vanilla.js\";\nimport { validateCreateTaskInput, validateInputEvent } from \"./validation.js\";\nimport { checkRouteAuth, requiresConfiguredToken, routeAuthFor } from \"./auth-middleware.js\";\n\nconst taskStatuses = new Set<RunStatus>([\"queued\", \"assigned\", \"running\", \"succeeded\", \"failed\", \"cancelled\"]);\n\nfunction parseStatus(value: string | null): RunStatus | undefined {\n if (!value) {\n return undefined;\n }\n if (!taskStatuses.has(value as RunStatus)) {\n throw new Error(`invalid status filter: ${value}`);\n }\n return value as RunStatus;\n}\n\nasync function readJson<T>(req: IncomingMessage): Promise<T> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const body = Buffer.concat(chunks).toString(\"utf8\");\n return (body ? JSON.parse(body) : {}) as T;\n}\n\nfunction writeJson(res: ServerResponse, statusCode: number, payload: unknown): void {\n const json = JSON.stringify(payload);\n res.statusCode = statusCode;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(json);\n}\n\nasync function buildWorkflows(store: PgStore, config: { databaseUrl: string }): Promise<{\n workflows: ServerWorkflows;\n shutdown: () => Promise<void>;\n}> {\n if (process.env.WORKPLANE_USE_DBOS === \"true\") {\n const { createDbosWorkflows } = await import(\"../../dbos/src/index.js\");\n const dbos = createDbosWorkflows(store);\n await dbos.launch({\n appName: process.env.DBOS_APPLICATION_NAME ?? \"workplane-server\",\n systemDatabaseUrl: config.databaseUrl,\n conductorKey: process.env.DBOS_CONDUCTOR_KEY,\n conductorUrl: process.env.DBOS_CONDUCTOR_URL,\n });\n return { workflows: dbos, shutdown: () => dbos.shutdown() };\n }\n\n return { workflows: new VanillaWorkflows(store), shutdown: async () => {} };\n}\n\nasync function main(): Promise<void> {\n const config = loadServerConfig();\n const pool = getPool(config.databaseUrl);\n const store = new PgStore(pool);\n const { workflows, shutdown: shutdownWorkflows } = await buildWorkflows(store, config);\n\n const server = createServer(async (req, res) => {\n try {\n if (!req.url || !req.method) {\n writeJson(res, 400, { error: \"invalid request\" });\n return;\n }\n\n const url = new URL(req.url, \"http://localhost\");\n const routeAuth = routeAuthFor(req.method, url.pathname);\n const authConfig = { nodeToken: config.nodeToken, operatorToken: config.operatorToken };\n if (requiresConfiguredToken(routeAuth, authConfig) && !checkRouteAuth(req, res, routeAuth, authConfig)) {\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/healthz\") {\n writeJson(res, 200, { ok: true });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/tasks\") {\n const body = await readJson<CreateTaskInput>(req);\n const validated = validateCreateTaskInput(body);\n const task = await workflows.createTask({\n kind: validated.kind,\n adapter: validated.adapter,\n payload: validated.payload,\n requires: validated.requires ?? [],\n });\n writeJson(res, 201, task);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/tasks\") {\n const status = parseStatus(url.searchParams.get(\"status\"));\n const tasks = await store.listTasks(status);\n writeJson(res, 200, { tasks });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/tasks\\/[^/]+$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const task = await store.getTask(taskId);\n if (!task) {\n writeJson(res, 404, { error: \"task not found\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/tasks\\/[^/]+\\/retry$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const task = await workflows.retryTask(taskId);\n if (!task) {\n writeJson(res, 409, { error: \"task is not retryable\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/tasks\\/[^/]+\\/cancel$/.test(url.pathname)) {\n const taskId = url.pathname.split(\"/\")[2];\n const task = await workflows.cancelTask(taskId);\n if (!task) {\n writeJson(res, 409, { error: \"task is not cancellable\" });\n return;\n }\n writeJson(res, 200, task);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/runs\") {\n const taskId = url.searchParams.get(\"taskId\") ?? undefined;\n const status = parseStatus(url.searchParams.get(\"status\"));\n const runs = await store.listRuns({ taskId, status });\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n writeJson(res, 200, run);\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/logs$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const logs = await store.getRunLogs(runId);\n writeJson(res, 200, { logs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const artifacts = await store.listRunArtifacts(runId);\n writeJson(res, 200, { artifacts });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/nodes/register\") {\n const body = await readJson<{ name: string; capabilities: string[]; nodeId?: string }>(req);\n const node = await store.registerNode(body.name, body.capabilities ?? [], body.nodeId);\n writeJson(res, 201, node);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/nodes\\/[^/]+\\/poll$/.test(url.pathname)) {\n const nodeId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ capabilities: string[] }>(req);\n const assignment = await store.pollNode(nodeId, body.capabilities ?? []);\n writeJson(res, 200, { assignment });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/status$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ status: RunStatus; error?: string }>(req);\n const run = await workflows.updateRunStatus(runId, body.status, body.error);\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n writeJson(res, 200, run);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/logs$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<{ logs: RunLogInput[] }>(req);\n const inserted = await workflows.appendRunLogs(runId, body.logs ?? []);\n writeJson(res, 200, { inserted });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const body = await readJson<ArtifactInput>(req);\n const artifact = await workflows.createArtifact(runId, body);\n writeJson(res, 201, artifact);\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/input$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"run not found\" });\n return;\n }\n if (run.status !== \"running\") {\n writeJson(res, 409, { error: \"run is not active\" });\n return;\n }\n const body = await readJson<AppendInputEventInput>(req);\n const validated = validateInputEvent(body);\n const event = await workflows.appendInputEvent(runId, validated);\n writeJson(res, 201, event);\n return;\n }\n\n if (req.method === \"GET\" && /^\\/runs\\/[^/]+\\/input$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const afterSequence = Number(url.searchParams.get(\"afterSequence\") ?? \"0\");\n const events = await store.getInputEvents(runId, afterSequence);\n writeJson(res, 200, { events });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/runs\\/[^/]+\\/input\\/\\d+\\/delivered$/.test(url.pathname)) {\n const parts = url.pathname.split(\"/\");\n const runId = parts[2];\n const sequence = Number(parts[4]);\n await workflows.markInputDelivered(runId, sequence);\n writeJson(res, 200, { ok: true });\n return;\n }\n\n writeJson(res, 404, { error: \"not found\" });\n } catch (error) {\n if (error instanceof ZodError) {\n writeJson(res, 400, { error: \"invalid task payload\", details: error });\n return;\n }\n if (error instanceof Error && error.message.startsWith(\"invalid status filter:\")) {\n writeJson(res, 400, { error: error.message });\n return;\n }\n const message = error instanceof Error ? error.message : \"internal error\";\n writeJson(res, 500, { error: message });\n }\n });\n\n server.listen(config.port, () => {\n process.stdout.write(`workplane server listening on http://localhost:${config.port}\\n`);\n });\n\n const shutdown = async (): Promise<void> => {\n await shutdownWorkflows();\n await pool.end();\n server.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => {\n void shutdown();\n });\n process.on(\"SIGTERM\", () => {\n void shutdown();\n });\n}\n\nmain().catch((error) => {\n process.stderr.write(`${String(error)}\\n`);\n process.exit(1);\n});\n","import { z } from \"zod\";\nimport { loadLocalEnv } from \"./env.js\";\n\nloadLocalEnv();\n\nconst serverEnvSchema = z.object({\n DATABASE_URL: z.string().min(1),\n WORKPLANE_SERVER_PORT: z\n .string()\n .optional()\n .default(\"8787\")\n .transform((value) => Number.parseInt(value, 10)),\n WORKPLANE_NODE_TOKEN: z.string().optional(),\n WORKPLANE_OPERATOR_TOKEN: z.string().optional(),\n WORKPLANE_ENV_ALLOWLIST: z.string().optional(),\n});\n\nconst nodeEnvSchema = z.object({\n WORKPLANE_SERVER_URL: z.string().url().optional().default(\"http://localhost:8787\"),\n WORKPLANE_NODE_NAME: z.string().optional().default(\"local-node-1\"),\n WORKPLANE_NODE_ID: z.string().optional(),\n WORKPLANE_NODE_CAPABILITIES: z\n .string()\n .optional()\n .default(\"shell,git,node,typescript,aider,ollama,codex,claude-code\"),\n WORKPLANE_NODE_TOKEN: z.string().optional(),\n WORKPLANE_POLL_INTERVAL_MS: z\n .string()\n .optional()\n .default(\"3000\")\n .transform((value) => Number.parseInt(value, 10)),\n WORKPLANE_ENV_ALLOWLIST: z.string().optional(),\n});\n\nexport interface ServerConfig {\n databaseUrl: string;\n port: number;\n nodeToken?: string;\n operatorToken?: string;\n envAllowlist: string[];\n}\n\nexport interface NodeConfig {\n serverUrl: string;\n nodeName: string;\n nodeId?: string;\n nodeCapabilities: string[];\n nodeToken?: string;\n pollIntervalMs: number;\n envAllowlist: string[];\n}\n\nexport function loadServerConfig(env: NodeJS.ProcessEnv = process.env): ServerConfig {\n const parsed = serverEnvSchema.parse(env);\n\n return {\n databaseUrl: parsed.DATABASE_URL,\n port: parsed.WORKPLANE_SERVER_PORT,\n nodeToken: parsed.WORKPLANE_NODE_TOKEN,\n operatorToken: parsed.WORKPLANE_OPERATOR_TOKEN,\n envAllowlist: parseCsv(parsed.WORKPLANE_ENV_ALLOWLIST ?? \"\"),\n };\n}\n\nexport function loadNodeConfig(env: NodeJS.ProcessEnv = process.env): NodeConfig {\n const parsed = nodeEnvSchema.parse(env);\n\n return {\n serverUrl: parsed.WORKPLANE_SERVER_URL,\n nodeName: parsed.WORKPLANE_NODE_NAME,\n nodeId: parsed.WORKPLANE_NODE_ID,\n nodeCapabilities: parseCsv(parsed.WORKPLANE_NODE_CAPABILITIES),\n nodeToken: parsed.WORKPLANE_NODE_TOKEN,\n pollIntervalMs: parsed.WORKPLANE_POLL_INTERVAL_MS,\n envAllowlist: parseCsv(parsed.WORKPLANE_ENV_ALLOWLIST ?? \"\"),\n };\n}\n\nexport function parseCsv(value: string): string[] {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n","import { config as dotenvConfig } from \"dotenv\";\n\nlet envLoaded = false;\n\nexport function loadLocalEnv(): void {\n if (envLoaded) {\n return;\n }\n\n dotenvConfig({ path: \".env\" });\n dotenvConfig({ path: \".env.local\", override: true });\n\n envLoaded = true;\n}\n\n","import { Pool } from \"pg\";\n\nconst pools = new Map<string, Pool>();\n\nexport function getPool(databaseUrl: string): Pool {\n const existing = pools.get(databaseUrl);\n if (existing) {\n return existing;\n }\n\n const pool = new Pool({ connectionString: databaseUrl });\n pools.set(databaseUrl, pool);\n return pool;\n}\n","import { randomUUID } from \"node:crypto\";\n\nexport function makeId(prefix: string): string {\n return `${prefix}_${randomUUID().replace(/-/g, \"\").slice(0, 12)}`;\n}\n\n","import type { Pool, PoolClient } from \"pg\";\nimport { makeId } from \"../../core/src/ids.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunRecord,\n TaskRecord,\n} from \"../../types/src/index.js\";\n\ninterface NodePollResult {\n run: RunRecord;\n task: TaskRecord;\n}\n\nfunction mapTask(row: Record<string, unknown>): TaskRecord {\n return {\n id: String(row.id),\n kind: String(row.kind),\n adapter: String(row.adapter),\n payload: (row.payload as Record<string, unknown>) ?? {},\n requires: (row.requires as string[]) ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: new Date(String(row.created_at)).toISOString(),\n updatedAt: new Date(String(row.updated_at)).toISOString(),\n };\n}\n\nfunction mapRun(row: Record<string, unknown>): RunRecord {\n return {\n id: String(row.id),\n taskId: String(row.task_id),\n nodeId: String(row.node_id),\n attempt: Number(row.attempt),\n status: row.status as RunRecord[\"status\"],\n startedAt: row.started_at ? new Date(String(row.started_at)).toISOString() : null,\n endedAt: row.ended_at ? new Date(String(row.ended_at)).toISOString() : null,\n error: row.error ? String(row.error) : null,\n };\n}\n\nfunction mapInputEvent(row: Record<string, unknown>): RunInputEvent {\n return {\n id: Number(row.id),\n runId: String(row.run_id),\n sequence: Number(row.sequence),\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: (row.payload as Record<string, unknown>) ?? {},\n createdAt: new Date(String(row.created_at)).toISOString(),\n deliveredAt: row.delivered_at ? new Date(String(row.delivered_at)).toISOString() : null,\n };\n}\n\nfunction mapArtifact(row: Record<string, unknown>): ArtifactRecord {\n return {\n id: String(row.id),\n runId: String(row.run_id),\n type: String(row.type),\n name: String(row.name),\n path: String(row.path),\n metadata: (row.metadata as Record<string, unknown> | null) ?? null,\n createdAt: new Date(String(row.created_at)).toISOString(),\n };\n}\n\nexport class PgStore {\n constructor(private readonly pool: Pool) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const taskId = makeId(\"task\");\n const result = await this.pool.query(\n `\n insert into tasks (id, kind, adapter, payload, requires, status)\n values ($1, $2, $3, $4::jsonb, $5::text[], 'queued')\n returning *\n `,\n [taskId, input.kind, input.adapter, JSON.stringify(input.payload), input.requires ?? []],\n );\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const result = status\n ? await this.pool.query(\"select * from tasks where status = $1 order by created_at desc limit 100\", [status])\n : await this.pool.query(\"select * from tasks order by created_at desc limit 100\");\n return result.rows.map((row: Record<string, unknown>) => mapTask(row));\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const result = await this.pool.query(\"select * from tasks where id = $1\", [taskId]);\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const taskId = filters?.taskId;\n const status = filters?.status;\n const result =\n taskId && status\n ? await this.pool.query(\"select * from runs where task_id = $1 and status = $2 order by created_at desc\", [\n taskId,\n status,\n ])\n : taskId\n ? await this.pool.query(\"select * from runs where task_id = $1 order by created_at desc\", [taskId])\n : status\n ? await this.pool.query(\"select * from runs where status = $1 order by created_at desc limit 100\", [status])\n : await this.pool.query(\"select * from runs order by created_at desc limit 100\");\n\n return result.rows.map((row: Record<string, unknown>) => mapRun(row));\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const result = await this.pool.query(\"select * from runs where id = $1\", [runId]);\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapRun(result.rows[0] as Record<string, unknown>);\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const existing = await this.pool.query(\"select * from nodes where name = $1\", [name]);\n if (existing.rowCount && existing.rowCount > 0) {\n const row = existing.rows[0] as Record<string, unknown>;\n const nodeId = String(row.id);\n const updated = await this.pool.query(\n `\n update nodes\n set capabilities = $2::text[], status = 'online', last_heartbeat_at = now(), updated_at = now()\n where id = $1\n returning *\n `,\n [nodeId, capabilities],\n );\n return this.mapNodeRecord(updated.rows[0] as Record<string, unknown>);\n }\n\n const nodeId = preferredId ?? makeId(\"node\");\n const result = await this.pool.query(\n `\n insert into nodes (id, name, capabilities, status, last_heartbeat_at)\n values ($1, $2, $3::text[], 'online', now())\n returning *\n `,\n [nodeId, name, capabilities],\n );\n\n return this.mapNodeRecord(result.rows[0] as Record<string, unknown>);\n }\n\n async getRunCancellationState(\n runId: string,\n ): Promise<{ runStatus: string; taskStatus: string } | null> {\n const result = await this.pool.query(\n `\n select r.status as run_status, t.status as task_status\n from runs r\n join tasks t on t.id = r.task_id\n where r.id = $1\n `,\n [runId],\n );\n if (result.rowCount === 0) {\n return null;\n }\n const row = result.rows[0] as Record<string, unknown>;\n return {\n runStatus: String(row.run_status),\n taskStatus: String(row.task_status),\n };\n }\n\n private mapNodeRecord(row: Record<string, unknown>): NodeRecord {\n return {\n id: String(row.id),\n name: String(row.name),\n capabilities: (row.capabilities as string[]) ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.last_heartbeat_at\n ? new Date(String(row.last_heartbeat_at)).toISOString()\n : null,\n };\n }\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n await this.touchNode(client, nodeId, capabilities);\n const taskResult = await client.query(\n `\n select *\n from tasks\n where status = 'queued'\n and requires <@ $1::text[]\n order by created_at asc\n limit 1\n for update skip locked\n `,\n [capabilities],\n );\n\n if (taskResult.rowCount === 0) {\n await client.query(\"commit\");\n return null;\n }\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskId = String(taskRow.id);\n const runId = makeId(\"run\");\n const attemptResult = await client.query(\"select coalesce(max(attempt), 0) as max_attempt from runs where task_id = $1\", [\n taskId,\n ]);\n const attempt = Number(attemptResult.rows[0].max_attempt) + 1;\n\n const runResult = await client.query(\n `\n insert into runs (id, task_id, node_id, attempt, status, started_at)\n values ($1, $2, $3, $4, 'assigned', now())\n returning *\n `,\n [runId, taskId, nodeId, attempt],\n );\n\n await client.query(\"update tasks set status = 'assigned', updated_at = now() where id = $1\", [taskId]);\n\n await client.query(\"commit\");\n\n return {\n task: mapTask(taskRow),\n run: mapRun(runResult.rows[0] as Record<string, unknown>),\n };\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const currentResult = await client.query(\n `\n select r.*, t.status as task_status\n from runs r\n join tasks t on t.id = r.task_id\n where r.id = $1\n for update\n `,\n [runId],\n );\n if (currentResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n const currentRow = currentResult.rows[0] as Record<string, unknown>;\n const currentTaskStatus = String(currentRow.task_status);\n if (currentTaskStatus === \"cancelled\" && status !== \"cancelled\") {\n await client.query(\"commit\");\n return mapRun(currentRow);\n }\n\n const runResult = await client.query(\n `\n update runs\n set status = $2, error = $3, ended_at = case when $2 in ('succeeded', 'failed', 'cancelled') then now() else ended_at end, updated_at = now()\n where id = $1\n returning *\n `,\n [runId, status, error ?? null],\n );\n if (runResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n\n const run = mapRun(runResult.rows[0] as Record<string, unknown>);\n const nextTaskStatus =\n status === \"succeeded\" || status === \"failed\" || status === \"cancelled\" ? status : \"running\";\n if (currentTaskStatus !== \"cancelled\" || status === \"cancelled\") {\n await client.query(\"update tasks set status = $2, updated_at = now() where id = $1\", [run.taskId, nextTaskStatus]);\n }\n await client.query(\"commit\");\n return run;\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n let inserted = 0;\n for (const log of logs) {\n await this.pool.query(\n `\n insert into run_logs (run_id, step_name, stream, message)\n values ($1, $2, $3, $4)\n `,\n [runId, log.stepName ?? null, log.stream, log.message],\n );\n inserted += 1;\n }\n\n return inserted;\n }\n\n async getRunLogs(runId: string): Promise<Array<Record<string, unknown>>> {\n const result = await this.pool.query(\"select * from run_logs where run_id = $1 order by timestamp asc\", [runId]);\n return result.rows as Array<Record<string, unknown>>;\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const artifactId = makeId(\"artifact\");\n const result = await this.pool.query(\n `\n insert into artifacts (id, run_id, type, name, path, metadata)\n values ($1, $2, $3, $4, $5, $6::jsonb)\n returning *\n `,\n [artifactId, runId, input.type, input.name, input.path, input.metadata ? JSON.stringify(input.metadata) : null],\n );\n return mapArtifact(result.rows[0] as Record<string, unknown>);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const result = await this.pool.query(\"select * from artifacts where run_id = $1 order by created_at asc\", [runId]);\n return result.rows.map((row: Record<string, unknown>) => mapArtifact(row));\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const result = await this.pool.query(\n `\n update tasks\n set status = 'queued', updated_at = now()\n where id = $1 and status = 'failed'\n returning *\n `,\n [taskId],\n );\n if (result.rowCount === 0) {\n return null;\n }\n\n return mapTask(result.rows[0] as Record<string, unknown>);\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const taskResult = await client.query(\"select * from tasks where id = $1 for update\", [taskId]);\n if (taskResult.rowCount === 0) {\n await client.query(\"rollback\");\n return null;\n }\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskStatus = String(taskRow.status);\n if (taskStatus === \"succeeded\" || taskStatus === \"failed\" || taskStatus === \"cancelled\") {\n await client.query(\"rollback\");\n return null;\n }\n\n if (taskStatus === \"assigned\" || taskStatus === \"running\") {\n const runResult = await client.query(\n `\n select * from runs\n where task_id = $1\n order by attempt desc\n limit 1\n for update\n `,\n [taskId],\n );\n if (runResult.rowCount !== 0) {\n const runStatus = String(runResult.rows[0].status);\n if (runStatus !== \"succeeded\" && runStatus !== \"failed\" && runStatus !== \"cancelled\") {\n await client.query(\n `\n update runs\n set status = 'cancelled', ended_at = now(), updated_at = now(), error = coalesce(error, 'task cancelled')\n where id = $1\n `,\n [runResult.rows[0].id],\n );\n }\n }\n }\n\n const updateTaskResult = await client.query(\n `\n update tasks\n set status = 'cancelled', updated_at = now()\n where id = $1\n returning *\n `,\n [taskId],\n );\n\n await client.query(\"commit\");\n return mapTask(updateTaskResult.rows[0] as Record<string, unknown>);\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n const client = await this.pool.connect();\n try {\n await client.query(\"begin\");\n const seqResult = await client.query(\n \"select coalesce(max(sequence), 0) + 1 as next_seq from run_input_events where run_id = $1\",\n [runId],\n );\n const sequence = Number(seqResult.rows[0].next_seq);\n const result = await client.query(\n `\n insert into run_input_events (run_id, sequence, kind, payload)\n values ($1, $2, $3, $4::jsonb)\n returning *\n `,\n [runId, sequence, input.kind, JSON.stringify(input.payload)],\n );\n await client.query(\"commit\");\n return mapInputEvent(result.rows[0] as Record<string, unknown>);\n } catch (error) {\n await client.query(\"rollback\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const result = await this.pool.query(\n \"select * from run_input_events where run_id = $1 and sequence > $2 order by sequence asc\",\n [runId, afterSequence],\n );\n return result.rows.map((row: Record<string, unknown>) => mapInputEvent(row));\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.pool.query(\n \"update run_input_events set delivered_at = now() where run_id = $1 and sequence = $2\",\n [runId, sequence],\n );\n }\n\n private async touchNode(client: PoolClient, nodeId: string, capabilities: string[]): Promise<void> {\n await client.query(\n `\n update nodes\n set capabilities = $2::text[], status = 'online', last_heartbeat_at = now(), updated_at = now()\n where id = $1\n `,\n [nodeId, capabilities],\n );\n }\n}\n","import type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n RunInputEvent,\n RunLogInput,\n RunRecord,\n RunStatus,\n ServerWorkflows,\n TaskRecord,\n} from \"../../types/src/index.js\";\nimport { PgStore } from \"./store.js\";\n\nexport class VanillaWorkflows implements ServerWorkflows {\n constructor(private readonly store: PgStore) {}\n\n createTask(input: CreateTaskInput): Promise<TaskRecord> {\n return this.store.createTask(input);\n }\n\n retryTask(taskId: string): Promise<TaskRecord | null> {\n return this.store.retryTask(taskId);\n }\n\n cancelTask(taskId: string): Promise<TaskRecord | null> {\n return this.store.cancelTask(taskId);\n }\n\n updateRunStatus(runId: string, status: RunStatus, error?: string): Promise<RunRecord | null> {\n return this.store.updateRunStatus(runId, status, error);\n }\n\n appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n return this.store.appendRunLogs(runId, logs);\n }\n\n createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n return this.store.createArtifact(runId, input);\n }\n\n appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n return this.store.appendInputEvent(runId, input);\n }\n\n markInputDelivered(runId: string, sequence: number): Promise<void> {\n return this.store.markInputDelivered(runId, sequence);\n }\n}\n","import { z } from \"zod\";\nimport type { AppendInputEventInput, CreateTaskInput } from \"../../types/src/index.js\";\n\nconst repoFields = {\n repo: z.string().min(1).optional(),\n branch: z.string().min(1).optional(),\n};\n\nconst shellTaskSchema = z.object({\n kind: z.literal(\"shell.exec\"),\n adapter: z.literal(\"shell\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n command: z.string().min(1),\n args: z.array(z.string()).optional(),\n cwd: z.string().min(1).optional(),\n ...repoFields,\n }),\n});\n\nconst aiderTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"aider\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n prompt: z.string().min(1),\n model: z.string().min(1).optional(),\n repo: z.string().min(1),\n branch: z.string().min(1).optional(),\n testCommand: z.string().min(1).optional(),\n }),\n});\n\nconst ollamaTaskSchema = z.object({\n kind: z.literal(\"inference.batch\"),\n adapter: z.literal(\"ollama\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: z.object({\n model: z.string().min(1),\n prompt: z.string().min(1),\n inputFile: z.string().min(1).optional(),\n }),\n});\n\nconst harnessPayloadSchema = z.object({\n prompt: z.string().min(1),\n model: z.string().min(1).optional(),\n repo: z.string().min(1),\n branch: z.string().min(1).optional(),\n testCommand: z.string().min(1).optional(),\n extraArgs: z.array(z.string()).optional(),\n interactive: z.boolean().optional(),\n});\n\nconst codexTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"codex\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: harnessPayloadSchema,\n});\n\nconst claudeCodeTaskSchema = z.object({\n kind: z.literal(\"agent.run\"),\n adapter: z.literal(\"claude-code\"),\n requires: z.array(z.string().min(1)).optional(),\n payload: harnessPayloadSchema,\n});\n\nconst taskSchema = z.discriminatedUnion(\"adapter\", [\n shellTaskSchema,\n aiderTaskSchema,\n ollamaTaskSchema,\n codexTaskSchema,\n claudeCodeTaskSchema,\n]);\n\nexport function validateCreateTaskInput(input: unknown): CreateTaskInput {\n return taskSchema.parse(input);\n}\n\nconst inputEventSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"stdin\"),\n payload: z.object({ data: z.string() }),\n }),\n z.object({\n kind: z.literal(\"signal\"),\n payload: z.object({ signal: z.enum([\"SIGTERM\", \"SIGKILL\", \"SIGINT\"]) }),\n }),\n z.object({\n kind: z.literal(\"resize\"),\n payload: z.object({\n rows: z.number().int().positive(),\n cols: z.number().int().positive(),\n }),\n }),\n]);\n\nexport function validateInputEvent(input: unknown): AppendInputEventInput {\n return inputEventSchema.parse(input);\n}\n","import type { IncomingMessage } from \"node:http\";\n\nexport function parseBearerToken(authorizationHeader: string | undefined): string | undefined {\n if (!authorizationHeader) {\n return undefined;\n }\n const match = /^Bearer\\s+(.+)$/i.exec(authorizationHeader.trim());\n return match?.[1];\n}\n\nexport function isAuthorizedBearer(provided: string | undefined, expected: string | undefined): boolean {\n if (!expected) {\n return true;\n }\n if (!provided) {\n return false;\n }\n return provided === expected;\n}\n\nexport function getRequestBearer(req: IncomingMessage): string | undefined {\n const header = req.headers.authorization;\n const value = Array.isArray(header) ? header[0] : header;\n return parseBearerToken(value);\n}\n\nexport function authHeaders(token: string | undefined): Record<string, string> {\n if (!token) {\n return {};\n }\n return { authorization: `Bearer ${token}` };\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { getRequestBearer, isAuthorizedBearer } from \"../../core/src/auth.js\";\n\nexport type RouteAuth = \"public\" | \"node\" | \"operator\";\n\nexport interface AuthConfig {\n nodeToken?: string;\n operatorToken?: string;\n}\n\nexport function checkRouteAuth(\n req: IncomingMessage,\n res: ServerResponse,\n auth: RouteAuth,\n config: AuthConfig,\n): boolean {\n const bearer = getRequestBearer(req);\n\n if (auth === \"public\") {\n return true;\n }\n\n if (auth === \"node\") {\n if (!isAuthorizedBearer(bearer, config.nodeToken)) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"unauthorized node request\" }));\n return false;\n }\n return true;\n }\n\n if (auth === \"operator\") {\n if (!isAuthorizedBearer(bearer, config.operatorToken)) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"unauthorized operator request\" }));\n return false;\n }\n return true;\n }\n\n return true;\n}\n\nexport function routeAuthFor(method: string, pathname: string): RouteAuth {\n if (pathname === \"/healthz\") {\n return \"public\";\n }\n\n if (method === \"POST\" && pathname === \"/nodes/register\") {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/nodes\\/[^/]+\\/poll$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/status$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/logs$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/artifacts$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"GET\" && /^\\/runs\\/[^/]+\\/input$/.test(pathname)) {\n return \"node\";\n }\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/input\\/\\d+\\/delivered$/.test(pathname)) {\n return \"node\";\n }\n\n if (method === \"POST\" && /^\\/runs\\/[^/]+\\/input$/.test(pathname)) {\n return \"operator\";\n }\n\n if (method === \"POST\" && pathname === \"/tasks\") {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/tasks\\/[^/]+\\/retry$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/tasks\\/[^/]+\\/cancel$/.test(pathname)) {\n return \"operator\";\n }\n\n return \"public\";\n}\n\nexport function requiresConfiguredToken(auth: RouteAuth, config: AuthConfig): boolean {\n if (auth === \"node\") {\n return Boolean(config.nodeToken);\n }\n if (auth === \"operator\") {\n return Boolean(config.operatorToken);\n }\n return false;\n}\n"],"mappings":";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,YAAY;AA2Id,SAAS,oBAAoB,OAAuC;AACzE,SAAO,IAAI,cAAc,KAAK;AAChC;AA7IA,IAca;AAdb;AAAA;AAAA;AAcO,IAAM,gBAAN,MAA+C;AAAA,MACnC;AAAA,MAEjB,YAAY,OAAwB;AAClC,cAAM,aAAa,KAAK;AAAA,UACtB,OAAO,UACL,KAAK,QAAQ,MAAM,MAAM,WAAW,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAAA,UAC3E,EAAE,MAAM,qBAAqB;AAAA,QAC/B;AAEA,cAAM,YAAY,KAAK;AAAA,UACrB,OAAO,WACL,KAAK,QAAQ,MAAM,MAAM,UAAU,MAAM,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAAA,UAC1E,EAAE,MAAM,oBAAoB;AAAA,QAC9B;AAEA,cAAM,aAAa,KAAK;AAAA,UACtB,OAAO,WACL,KAAK,QAAQ,MAAM,MAAM,WAAW,MAAM,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAAA,UAC5E,EAAE,MAAM,qBAAqB;AAAA,QAC/B;AAEA,cAAM,kBAAkB,KAAK;AAAA,UAC3B,OAAO,OAAe,QAAmB,UACvC,KAAK,QAAQ,MAAM,MAAM,gBAAgB,OAAO,QAAQ,KAAK,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAAA,UACrG,EAAE,MAAM,0BAA0B;AAAA,QACpC;AAEA,cAAM,gBAAgB,KAAK;AAAA,UACzB,OAAO,OAAe,SACpB,KAAK,QAAQ,MAAM,MAAM,cAAc,OAAO,IAAI,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAAA,UACxF,EAAE,MAAM,wBAAwB;AAAA,QAClC;AAEA,cAAM,iBAAiB,KAAK;AAAA,UAC1B,OAAO,OAAe,UACpB,KAAK,QAAQ,MAAM,MAAM,eAAe,OAAO,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAAA,UAC1F,EAAE,MAAM,yBAAyB;AAAA,QACnC;AAEA,cAAM,mBAAmB,KAAK;AAAA,UAC5B,OAAO,OAAe,UACpB,KAAK,QAAQ,MAAM,MAAM,iBAAiB,OAAO,KAAK,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAAA,UAC/F,EAAE,MAAM,2BAA2B;AAAA,QACrC;AAEA,cAAM,qBAAqB,KAAK;AAAA,UAC9B,OAAO,OAAe,aACpB,KAAK,QAAQ,MAAM,MAAM,mBAAmB,OAAO,QAAQ,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAAA,UACtG,EAAE,MAAM,6BAA6B;AAAA,QACvC;AAEA,aAAK,aAAa;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,SAKK;AAChB,aAAK,UAAU;AAAA,UACb,MAAM,QAAQ;AAAA,UACd,mBAAmB,QAAQ;AAAA,QAC7B,CAAC;AACD,cAAM,KAAK,OAAO;AAAA,UAChB,cAAc,QAAQ;AAAA,UACtB,cAAc,QAAQ;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,WAA0B;AAC9B,cAAM,KAAK,SAAS;AAAA,MACtB;AAAA,MAEA,MAAM,WAAW,OAA6C;AAC5D,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,UAAU,EAAE,KAAK;AACzE,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,UAAU,QAA4C;AAC1D,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,SAAS,EAAE,MAAM;AACzE,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,WAAW,QAA4C;AAC3D,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,UAAU,EAAE,MAAM;AAC1E,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,gBAAgB,OAAe,QAAmB,OAA2C;AACjG,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,eAAe,EAAE,OAAO,QAAQ,KAAK;AAC7F,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,cAAc,OAAe,MAAsC;AACvE,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,aAAa,EAAE,OAAO,IAAI;AAClF,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,eAAe,OAAe,OAA+C;AACjF,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,cAAc,EAAE,OAAO,KAAK;AACpF,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,iBAAiB,OAAe,OAAsD;AAC1F,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,gBAAgB,EAAE,OAAO,KAAK;AACtF,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MAEA,MAAM,mBAAmB,OAAe,UAAiC;AACvE,cAAM,SAAS,MAAM,KAAK,cAAc,KAAK,WAAW,kBAAkB,EAAE,OAAO,QAAQ;AAC3F,cAAM,OAAO,UAAU;AAAA,MACzB;AAAA,IACF;AAAA;AAAA;;;ACzIA,SAAS,oBAA+D;AACxE,SAAS,WAAW;AACpB,SAAS,gBAAgB;;;ACFzB,SAAS,SAAS;;;ACAlB,SAAS,UAAU,oBAAoB;AAEvC,IAAI,YAAY;AAET,SAAS,eAAqB;AACnC,MAAI,WAAW;AACb;AAAA,EACF;AAEA,eAAa,EAAE,MAAM,OAAO,CAAC;AAC7B,eAAa,EAAE,MAAM,cAAc,UAAU,KAAK,CAAC;AAEnD,cAAY;AACd;;;ADVA,aAAa;AAEb,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,uBAAuB,EACpB,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,EACd,UAAU,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,CAAC;AAAA,EAClD,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,yBAAyB,EAAE,OAAO,EAAE,SAAS;AAC/C,CAAC;AAED,IAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,uBAAuB;AAAA,EACjF,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,cAAc;AAAA,EACjE,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,6BAA6B,EAC1B,OAAO,EACP,SAAS,EACT,QAAQ,0DAA0D;AAAA,EACrE,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,4BAA4B,EACzB,OAAO,EACP,SAAS,EACT,QAAQ,MAAM,EACd,UAAU,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,CAAC;AAAA,EAClD,yBAAyB,EAAE,OAAO,EAAE,SAAS;AAC/C,CAAC;AAoBM,SAAS,iBAAiB,MAAyB,QAAQ,KAAmB;AACnF,QAAM,SAAS,gBAAgB,MAAM,GAAG;AAExC,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,eAAe,OAAO;AAAA,IACtB,cAAc,SAAS,OAAO,2BAA2B,EAAE;AAAA,EAC7D;AACF;AAgBO,SAAS,SAAS,OAAyB;AAChD,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AACnB;;;AEnFA,SAAS,YAAY;AAErB,IAAM,QAAQ,oBAAI,IAAkB;AAE7B,SAAS,QAAQ,aAA2B;AACjD,QAAM,WAAW,MAAM,IAAI,WAAW;AACtC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,IAAI,KAAK,EAAE,kBAAkB,YAAY,CAAC;AACvD,QAAM,IAAI,aAAa,IAAI;AAC3B,SAAO;AACT;;;ACbA,SAAS,kBAAkB;AAEpB,SAAS,OAAO,QAAwB;AAC7C,SAAO,GAAG,MAAM,IAAI,WAAW,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AACjE;;;ACeA,SAAS,QAAQ,KAA0C;AACzD,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,SAAU,IAAI,WAAuC,CAAC;AAAA,IACtD,UAAW,IAAI,YAAyB,CAAC;AAAA,IACzC,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,IACxD,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,EAC1D;AACF;AAEA,SAAS,OAAO,KAAyC;AACvD,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,QAAQ,OAAO,IAAI,OAAO;AAAA,IAC1B,QAAQ,OAAO,IAAI,OAAO;AAAA,IAC1B,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,aAAa,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY,IAAI;AAAA,IAC7E,SAAS,IAAI,WAAW,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,YAAY,IAAI;AAAA,IACvE,OAAO,IAAI,QAAQ,OAAO,IAAI,KAAK,IAAI;AAAA,EACzC;AACF;AAEA,SAAS,cAAc,KAA6C;AAClE,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,OAAO,OAAO,IAAI,MAAM;AAAA,IACxB,UAAU,OAAO,IAAI,QAAQ;AAAA,IAC7B,MAAM,IAAI;AAAA,IACV,SAAU,IAAI,WAAuC,CAAC;AAAA,IACtD,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,IACxD,aAAa,IAAI,eAAe,IAAI,KAAK,OAAO,IAAI,YAAY,CAAC,EAAE,YAAY,IAAI;AAAA,EACrF;AACF;AAEA,SAAS,YAAY,KAA8C;AACjE,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,OAAO,OAAO,IAAI,MAAM;AAAA,IACxB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,MAAM,OAAO,IAAI,IAAI;AAAA,IACrB,UAAW,IAAI,YAA+C;AAAA,IAC9D,WAAW,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY;AAAA,EAC1D;AACF;AAEO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,MAAY;AAAZ;AAAA,EAAa;AAAA,EAAb;AAAA,EAE7B,MAAM,WAAW,OAA6C;AAC5D,UAAM,SAAS,OAAO,MAAM;AAC5B,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,MAAM,MAAM,MAAM,SAAS,KAAK,UAAU,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC;AAAA,IACzF;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,UAAU,QAAsD;AACpE,UAAM,SAAS,SACX,MAAM,KAAK,KAAK,MAAM,4EAA4E,CAAC,MAAM,CAAC,IAC1G,MAAM,KAAK,KAAK,MAAM,wDAAwD;AAClF,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,QAAQ,GAAG,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,QAAQ,QAA4C;AACxD,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,qCAAqC,CAAC,MAAM,CAAC;AAClF,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,SAAS,SAAmF;AAChG,UAAM,SAAS,SAAS;AACxB,UAAM,SAAS,SAAS;AACxB,UAAM,SACJ,UAAU,SACN,MAAM,KAAK,KAAK,MAAM,kFAAkF;AAAA,MACtG;AAAA,MACA;AAAA,IACF,CAAC,IACD,SACE,MAAM,KAAK,KAAK,MAAM,kEAAkE,CAAC,MAAM,CAAC,IAChG,SACE,MAAM,KAAK,KAAK,MAAM,2EAA2E,CAAC,MAAM,CAAC,IACzG,MAAM,KAAK,KAAK,MAAM,uDAAuD;AAEvF,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,OAAO,GAAG,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,OAAO,OAA0C;AACrD,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,oCAAoC,CAAC,KAAK,CAAC;AAChF,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,OAAO,OAAO,KAAK,CAAC,CAA4B;AAAA,EACzD;AAAA,EAEA,MAAM,aAAa,MAAc,cAAwB,aAA2C;AAClG,UAAM,WAAW,MAAM,KAAK,KAAK,MAAM,uCAAuC,CAAC,IAAI,CAAC;AACpF,QAAI,SAAS,YAAY,SAAS,WAAW,GAAG;AAC9C,YAAM,MAAM,SAAS,KAAK,CAAC;AAC3B,YAAMA,UAAS,OAAO,IAAI,EAAE;AAC5B,YAAM,UAAU,MAAM,KAAK,KAAK;AAAA,QAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAACA,SAAQ,YAAY;AAAA,MACvB;AACA,aAAO,KAAK,cAAc,QAAQ,KAAK,CAAC,CAA4B;AAAA,IACtE;AAEA,UAAM,SAAS,eAAe,OAAO,MAAM;AAC3C,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,MAAM,YAAY;AAAA,IAC7B;AAEA,WAAO,KAAK,cAAc,OAAO,KAAK,CAAC,CAA4B;AAAA,EACrE;AAAA,EAEA,MAAM,wBACJ,OAC2D;AAC3D,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,CAAC,KAAK;AAAA,IACR;AACA,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AACA,UAAM,MAAM,OAAO,KAAK,CAAC;AACzB,WAAO;AAAA,MACL,WAAW,OAAO,IAAI,UAAU;AAAA,MAChC,YAAY,OAAO,IAAI,WAAW;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,cAAc,KAA0C;AAC9D,WAAO;AAAA,MACL,IAAI,OAAO,IAAI,EAAE;AAAA,MACjB,MAAM,OAAO,IAAI,IAAI;AAAA,MACrB,cAAe,IAAI,gBAA6B,CAAC;AAAA,MACjD,QAAQ,IAAI;AAAA,MACZ,iBAAiB,IAAI,oBACjB,IAAI,KAAK,OAAO,IAAI,iBAAiB,CAAC,EAAE,YAAY,IACpD;AAAA,IACN;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,QAAgB,cAAwD;AACrF,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,KAAK,UAAU,QAAQ,QAAQ,YAAY;AACjD,YAAM,aAAa,MAAM,OAAO;AAAA,QAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,CAAC,YAAY;AAAA,MACf;AAEA,UAAI,WAAW,aAAa,GAAG;AAC7B,cAAM,OAAO,MAAM,QAAQ;AAC3B,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,WAAW,KAAK,CAAC;AACjC,YAAM,SAAS,OAAO,QAAQ,EAAE;AAChC,YAAM,QAAQ,OAAO,KAAK;AAC1B,YAAM,gBAAgB,MAAM,OAAO,MAAM,gFAAgF;AAAA,QACvH;AAAA,MACF,CAAC;AACD,YAAM,UAAU,OAAO,cAAc,KAAK,CAAC,EAAE,WAAW,IAAI;AAE5D,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,CAAC,OAAO,QAAQ,QAAQ,OAAO;AAAA,MACjC;AAEA,YAAM,OAAO,MAAM,0EAA0E,CAAC,MAAM,CAAC;AAErG,YAAM,OAAO,MAAM,QAAQ;AAE3B,aAAO;AAAA,QACL,MAAM,QAAQ,OAAO;AAAA,QACrB,KAAK,OAAO,UAAU,KAAK,CAAC,CAA4B;AAAA,MAC1D;AAAA,IACF,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,OAAe,QAA6B,OAA2C;AAC3G,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,gBAAgB,MAAM,OAAO;AAAA,QACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,CAAC,KAAK;AAAA,MACR;AACA,UAAI,cAAc,aAAa,GAAG;AAChC,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AACA,YAAM,aAAa,cAAc,KAAK,CAAC;AACvC,YAAM,oBAAoB,OAAO,WAAW,WAAW;AACvD,UAAI,sBAAsB,eAAe,WAAW,aAAa;AAC/D,cAAM,OAAO,MAAM,QAAQ;AAC3B,eAAO,OAAO,UAAU;AAAA,MAC1B;AAEA,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAAC,OAAO,QAAQ,SAAS,IAAI;AAAA,MAC/B;AACA,UAAI,UAAU,aAAa,GAAG;AAC5B,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,YAAM,MAAM,OAAO,UAAU,KAAK,CAAC,CAA4B;AAC/D,YAAM,iBACJ,WAAW,eAAe,WAAW,YAAY,WAAW,cAAc,SAAS;AACrF,UAAI,sBAAsB,eAAe,WAAW,aAAa;AAC/D,cAAM,OAAO,MAAM,kEAAkE,CAAC,IAAI,QAAQ,cAAc,CAAC;AAAA,MACnH;AACA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO;AAAA,IACT,SAASC,QAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAMA;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,OAAe,MAAsC;AACvE,QAAI,WAAW;AACf,eAAW,OAAO,MAAM;AACtB,YAAM,KAAK,KAAK;AAAA,QACd;AAAA;AAAA;AAAA;AAAA,QAIA,CAAC,OAAO,IAAI,YAAY,MAAM,IAAI,QAAQ,IAAI,OAAO;AAAA,MACvD;AACA,kBAAY;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,OAAwD;AACvE,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,mEAAmE,CAAC,KAAK,CAAC;AAC/G,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,eAAe,OAAe,OAA+C;AACjF,UAAM,aAAa,OAAO,UAAU;AACpC,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,YAAY,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,WAAW,KAAK,UAAU,MAAM,QAAQ,IAAI,IAAI;AAAA,IAChH;AACA,WAAO,YAAY,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC9D;AAAA,EAEA,MAAM,iBAAiB,OAA0C;AAC/D,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM,qEAAqE,CAAC,KAAK,CAAC;AACjH,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,YAAY,GAAG,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,UAAU,QAA4C;AAC1D,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,CAAC,MAAM;AAAA,IACT;AACA,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,OAAO,KAAK,CAAC,CAA4B;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW,QAA4C;AAC3D,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,aAAa,MAAM,OAAO,MAAM,gDAAgD,CAAC,MAAM,CAAC;AAC9F,UAAI,WAAW,aAAa,GAAG;AAC7B,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,WAAW,KAAK,CAAC;AACjC,YAAM,aAAa,OAAO,QAAQ,MAAM;AACxC,UAAI,eAAe,eAAe,eAAe,YAAY,eAAe,aAAa;AACvF,cAAM,OAAO,MAAM,UAAU;AAC7B,eAAO;AAAA,MACT;AAEA,UAAI,eAAe,cAAc,eAAe,WAAW;AACzD,cAAM,YAAY,MAAM,OAAO;AAAA,UAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOA,CAAC,MAAM;AAAA,QACT;AACA,YAAI,UAAU,aAAa,GAAG;AAC5B,gBAAM,YAAY,OAAO,UAAU,KAAK,CAAC,EAAE,MAAM;AACjD,cAAI,cAAc,eAAe,cAAc,YAAY,cAAc,aAAa;AACpF,kBAAM,OAAO;AAAA,cACX;AAAA;AAAA;AAAA;AAAA;AAAA,cAKA,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,mBAAmB,MAAM,OAAO;AAAA,QACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAAC,MAAM;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO,QAAQ,iBAAiB,KAAK,CAAC,CAA4B;AAAA,IACpE,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAe,OAAsD;AAC1F,UAAM,SAAS,MAAM,KAAK,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,OAAO;AAC1B,YAAM,YAAY,MAAM,OAAO;AAAA,QAC7B;AAAA,QACA,CAAC,KAAK;AAAA,MACR;AACA,YAAM,WAAW,OAAO,UAAU,KAAK,CAAC,EAAE,QAAQ;AAClD,YAAM,SAAS,MAAM,OAAO;AAAA,QAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,CAAC,OAAO,UAAU,MAAM,MAAM,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,MAC7D;AACA,YAAM,OAAO,MAAM,QAAQ;AAC3B,aAAO,cAAc,OAAO,KAAK,CAAC,CAA4B;AAAA,IAChE,SAAS,OAAO;AACd,YAAM,OAAO,MAAM,UAAU;AAC7B,YAAM;AAAA,IACR,UAAE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,OAAe,eAAiD;AACnF,UAAM,SAAS,MAAM,KAAK,KAAK;AAAA,MAC7B;AAAA,MACA,CAAC,OAAO,aAAa;AAAA,IACvB;AACA,WAAO,OAAO,KAAK,IAAI,CAAC,QAAiC,cAAc,GAAG,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,mBAAmB,OAAe,UAAiC;AACvE,UAAM,KAAK,KAAK;AAAA,MACd;AAAA,MACA,CAAC,OAAO,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAc,UAAU,QAAoB,QAAgB,cAAuC;AACjG,UAAM,OAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,CAAC,QAAQ,YAAY;AAAA,IACvB;AAAA,EACF;AACF;;;AC7cO,IAAM,mBAAN,MAAkD;AAAA,EACvD,YAA6B,OAAgB;AAAhB;AAAA,EAAiB;AAAA,EAAjB;AAAA,EAE7B,WAAW,OAA6C;AACtD,WAAO,KAAK,MAAM,WAAW,KAAK;AAAA,EACpC;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,KAAK,MAAM,UAAU,MAAM;AAAA,EACpC;AAAA,EAEA,WAAW,QAA4C;AACrD,WAAO,KAAK,MAAM,WAAW,MAAM;AAAA,EACrC;AAAA,EAEA,gBAAgB,OAAe,QAAmB,OAA2C;AAC3F,WAAO,KAAK,MAAM,gBAAgB,OAAO,QAAQ,KAAK;AAAA,EACxD;AAAA,EAEA,cAAc,OAAe,MAAsC;AACjE,WAAO,KAAK,MAAM,cAAc,OAAO,IAAI;AAAA,EAC7C;AAAA,EAEA,eAAe,OAAe,OAA+C;AAC3E,WAAO,KAAK,MAAM,eAAe,OAAO,KAAK;AAAA,EAC/C;AAAA,EAEA,iBAAiB,OAAe,OAAsD;AACpF,WAAO,KAAK,MAAM,iBAAiB,OAAO,KAAK;AAAA,EACjD;AAAA,EAEA,mBAAmB,OAAe,UAAiC;AACjE,WAAO,KAAK,MAAM,mBAAmB,OAAO,QAAQ;AAAA,EACtD;AACF;;;AChDA,SAAS,KAAAC,UAAS;AAGlB,IAAM,aAAa;AAAA,EACjB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACjC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACrC;AAEA,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,YAAY;AAAA,EAC5B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACzB,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnC,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAChC,GAAG;AAAA,EACL,CAAC;AACH,CAAC;AAED,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACnC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC1C,CAAC;AACH,CAAC;AAED,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,SAASA,GAAE,QAAQ,QAAQ;AAAA,EAC3B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,IAChB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAED,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,aAAaA,GAAE,QAAQ,EAAE,SAAS;AACpC,CAAC;AAED,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,OAAO;AAAA,EAC1B,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAAS;AACX,CAAC;AAED,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,QAAQ,aAAa;AAAA,EAChC,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9C,SAAS;AACX,CAAC;AAED,IAAM,aAAaA,GAAE,mBAAmB,WAAW;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,wBAAwB,OAAiC;AACvE,SAAO,WAAW,MAAM,KAAK;AAC/B;AAEA,IAAM,mBAAmBA,GAAE,mBAAmB,QAAQ;AAAA,EACpDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,OAAO;AAAA,IACvB,SAASA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,EAAE,CAAC;AAAA,EACxC,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,SAASA,GAAE,OAAO,EAAE,QAAQA,GAAE,KAAK,CAAC,WAAW,WAAW,QAAQ,CAAC,EAAE,CAAC;AAAA,EACxE,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,SAASA,GAAE,OAAO;AAAA,MAChB,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,MAChC,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAEM,SAAS,mBAAmB,OAAuC;AACxE,SAAO,iBAAiB,MAAM,KAAK;AACrC;;;AClGO,SAAS,iBAAiB,qBAA6D;AAC5F,MAAI,CAAC,qBAAqB;AACxB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,mBAAmB,KAAK,oBAAoB,KAAK,CAAC;AAChE,SAAO,QAAQ,CAAC;AAClB;AAEO,SAAS,mBAAmB,UAA8B,UAAuC;AACtG,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEO,SAAS,iBAAiB,KAA0C;AACzE,QAAM,SAAS,IAAI,QAAQ;AAC3B,QAAM,QAAQ,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAClD,SAAO,iBAAiB,KAAK;AAC/B;;;ACdO,SAAS,eACd,KACA,KACA,MACA,QACS;AACT,QAAM,SAAS,iBAAiB,GAAG;AAEnC,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,QAAQ;AACnB,QAAI,CAAC,mBAAmB,QAAQ,OAAO,SAAS,GAAG;AACjD,UAAI,aAAa;AACjB,UAAI,UAAU,gBAAgB,kBAAkB;AAChD,UAAI,IAAI,KAAK,UAAU,EAAE,OAAO,4BAA4B,CAAC,CAAC;AAC9D,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,YAAY;AACvB,QAAI,CAAC,mBAAmB,QAAQ,OAAO,aAAa,GAAG;AACrD,UAAI,aAAa;AACjB,UAAI,UAAU,gBAAgB,kBAAkB;AAChD,UAAI,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAClE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,QAAgB,UAA6B;AACxE,MAAI,aAAa,YAAY;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,aAAa,mBAAmB;AACvD,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,yBAAyB,KAAK,QAAQ,GAAG;AAChE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,0BAA0B,KAAK,QAAQ,GAAG;AACjE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,wBAAwB,KAAK,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,6BAA6B,KAAK,QAAQ,GAAG;AACpE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,SAAS,yBAAyB,KAAK,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,yCAAyC,KAAK,QAAQ,GAAG;AAChF,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,yBAAyB,KAAK,QAAQ,GAAG;AAChE,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,UAAU,aAAa,UAAU;AAC9C,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,0BAA0B,KAAK,QAAQ,GAAG;AACjE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAU,2BAA2B,KAAK,QAAQ,GAAG;AAClE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,MAAiB,QAA6B;AACpF,MAAI,SAAS,QAAQ;AACnB,WAAO,QAAQ,OAAO,SAAS;AAAA,EACjC;AACA,MAAI,SAAS,YAAY;AACvB,WAAO,QAAQ,OAAO,aAAa;AAAA,EACrC;AACA,SAAO;AACT;;;ATtFA,IAAM,eAAe,oBAAI,IAAe,CAAC,UAAU,YAAY,WAAW,aAAa,UAAU,WAAW,CAAC;AAE7G,SAAS,YAAY,OAA6C;AAChE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI,CAAC,aAAa,IAAI,KAAkB,GAAG;AACzC,UAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,EACnD;AACA,SAAO;AACT;AAEA,eAAe,SAAY,KAAkC;AAC3D,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,KAAK;AAC7B,WAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EACjE;AACA,QAAM,OAAO,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM;AAClD,SAAQ,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AACrC;AAEA,SAAS,UAAU,KAAqB,YAAoB,SAAwB;AAClF,QAAM,OAAO,KAAK,UAAU,OAAO;AACnC,MAAI,aAAa;AACjB,MAAI,UAAU,gBAAgB,kBAAkB;AAChD,MAAI,IAAI,IAAI;AACd;AAEA,eAAe,eAAe,OAAgB,QAG3C;AACD,MAAI,QAAQ,IAAI,uBAAuB,QAAQ;AAC7C,UAAM,EAAE,qBAAAC,qBAAoB,IAAI,MAAM;AACtC,UAAM,OAAOA,qBAAoB,KAAK;AACtC,UAAM,KAAK,OAAO;AAAA,MAChB,SAAS,QAAQ,IAAI,yBAAyB;AAAA,MAC9C,mBAAmB,OAAO;AAAA,MAC1B,cAAc,QAAQ,IAAI;AAAA,MAC1B,cAAc,QAAQ,IAAI;AAAA,IAC5B,CAAC;AACD,WAAO,EAAE,WAAW,MAAM,UAAU,MAAM,KAAK,SAAS,EAAE;AAAA,EAC5D;AAEA,SAAO,EAAE,WAAW,IAAI,iBAAiB,KAAK,GAAG,UAAU,YAAY;AAAA,EAAC,EAAE;AAC5E;AAEA,eAAe,OAAsB;AACnC,QAAM,SAAS,iBAAiB;AAChC,QAAM,OAAO,QAAQ,OAAO,WAAW;AACvC,QAAM,QAAQ,IAAI,QAAQ,IAAI;AAC9B,QAAM,EAAE,WAAW,UAAU,kBAAkB,IAAI,MAAM,eAAe,OAAO,MAAM;AAErF,QAAM,SAAS,aAAa,OAAO,KAAK,QAAQ;AAC9C,QAAI;AACF,UAAI,CAAC,IAAI,OAAO,CAAC,IAAI,QAAQ;AAC3B,kBAAU,KAAK,KAAK,EAAE,OAAO,kBAAkB,CAAC;AAChD;AAAA,MACF;AAEA,YAAM,MAAM,IAAI,IAAI,IAAI,KAAK,kBAAkB;AAC/C,YAAM,YAAY,aAAa,IAAI,QAAQ,IAAI,QAAQ;AACvD,YAAM,aAAa,EAAE,WAAW,OAAO,WAAW,eAAe,OAAO,cAAc;AACtF,UAAI,wBAAwB,WAAW,UAAU,KAAK,CAAC,eAAe,KAAK,KAAK,WAAW,UAAU,GAAG;AACtG;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,YAAY;AACvD,kBAAU,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,IAAI,aAAa,UAAU;AACtD,cAAM,OAAO,MAAM,SAA0B,GAAG;AAChD,cAAM,YAAY,wBAAwB,IAAI;AAC9C,cAAM,OAAO,MAAM,UAAU,WAAW;AAAA,UACtC,MAAM,UAAU;AAAA,UAChB,SAAS,UAAU;AAAA,UACnB,SAAS,UAAU;AAAA,UACnB,UAAU,UAAU,YAAY,CAAC;AAAA,QACnC,CAAC;AACD,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,UAAU;AACrD,cAAM,SAAS,YAAY,IAAI,aAAa,IAAI,QAAQ,CAAC;AACzD,cAAM,QAAQ,MAAM,MAAM,UAAU,MAAM;AAC1C,kBAAU,KAAK,KAAK,EAAE,MAAM,CAAC;AAC7B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,mBAAmB,KAAK,IAAI,QAAQ,GAAG;AACjE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,MAAM,QAAQ,MAAM;AACvC,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,iBAAiB,CAAC;AAC/C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,0BAA0B,KAAK,IAAI,QAAQ,GAAG;AACzE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,UAAU,UAAU,MAAM;AAC7C,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACtD;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,2BAA2B,KAAK,IAAI,QAAQ,GAAG;AAC1E,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,UAAU,WAAW,MAAM;AAC9C,YAAI,CAAC,MAAM;AACT,oBAAU,KAAK,KAAK,EAAE,OAAO,0BAA0B,CAAC;AACxD;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,IAAI,aAAa,SAAS;AACpD,cAAM,SAAS,IAAI,aAAa,IAAI,QAAQ,KAAK;AACjD,cAAM,SAAS,YAAY,IAAI,aAAa,IAAI,QAAQ,CAAC;AACzD,cAAM,OAAO,MAAM,MAAM,SAAS,EAAE,QAAQ,OAAO,CAAC;AACpD,kBAAU,KAAK,KAAK,EAAE,KAAK,CAAC;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,kBAAkB,KAAK,IAAI,QAAQ,GAAG;AAChE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,MAAM,MAAM,MAAM,OAAO,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,GAAG;AACvB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,wBAAwB,KAAK,IAAI,QAAQ,GAAG;AACtE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,MAAM,WAAW,KAAK;AACzC,kBAAU,KAAK,KAAK,EAAE,KAAK,CAAC;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,6BAA6B,KAAK,IAAI,QAAQ,GAAG;AAC3E,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,YAAY,MAAM,MAAM,iBAAiB,KAAK;AACpD,kBAAU,KAAK,KAAK,EAAE,UAAU,CAAC;AACjC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,IAAI,aAAa,mBAAmB;AAC/D,cAAM,OAAO,MAAM,SAAoE,GAAG;AAC1F,cAAM,OAAO,MAAM,MAAM,aAAa,KAAK,MAAM,KAAK,gBAAgB,CAAC,GAAG,KAAK,MAAM;AACrF,kBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACxE,cAAM,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACxC,cAAM,OAAO,MAAM,SAAqC,GAAG;AAC3D,cAAM,aAAa,MAAM,MAAM,SAAS,QAAQ,KAAK,gBAAgB,CAAC,CAAC;AACvE,kBAAU,KAAK,KAAK,EAAE,WAAW,CAAC;AAClC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,0BAA0B,KAAK,IAAI,QAAQ,GAAG;AACzE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAgD,GAAG;AACtE,cAAM,MAAM,MAAM,UAAU,gBAAgB,OAAO,KAAK,QAAQ,KAAK,KAAK;AAC1E,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,kBAAU,KAAK,KAAK,GAAG;AACvB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,wBAAwB,KAAK,IAAI,QAAQ,GAAG;AACvE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAkC,GAAG;AACxD,cAAM,WAAW,MAAM,UAAU,cAAc,OAAO,KAAK,QAAQ,CAAC,CAAC;AACrE,kBAAU,KAAK,KAAK,EAAE,SAAS,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,6BAA6B,KAAK,IAAI,QAAQ,GAAG;AAC5E,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,OAAO,MAAM,SAAwB,GAAG;AAC9C,cAAM,WAAW,MAAM,UAAU,eAAe,OAAO,IAAI;AAC3D,kBAAU,KAAK,KAAK,QAAQ;AAC5B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACxE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,MAAM,MAAM,MAAM,OAAO,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,oBAAU,KAAK,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAC9C;AAAA,QACF;AACA,YAAI,IAAI,WAAW,WAAW;AAC5B,oBAAU,KAAK,KAAK,EAAE,OAAO,oBAAoB,CAAC;AAClD;AAAA,QACF;AACA,cAAM,OAAO,MAAM,SAAgC,GAAG;AACtD,cAAM,YAAY,mBAAmB,IAAI;AACzC,cAAM,QAAQ,MAAM,UAAU,iBAAiB,OAAO,SAAS;AAC/D,kBAAU,KAAK,KAAK,KAAK;AACzB;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,SAAS,yBAAyB,KAAK,IAAI,QAAQ,GAAG;AACvE,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,cAAM,gBAAgB,OAAO,IAAI,aAAa,IAAI,eAAe,KAAK,GAAG;AACzE,cAAM,SAAS,MAAM,MAAM,eAAe,OAAO,aAAa;AAC9D,kBAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AAC9B;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,yCAAyC,KAAK,IAAI,QAAQ,GAAG;AACxF,cAAM,QAAQ,IAAI,SAAS,MAAM,GAAG;AACpC,cAAM,QAAQ,MAAM,CAAC;AACrB,cAAM,WAAW,OAAO,MAAM,CAAC,CAAC;AAChC,cAAM,UAAU,mBAAmB,OAAO,QAAQ;AAClD,kBAAU,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AAChC;AAAA,MACF;AAEA,gBAAU,KAAK,KAAK,EAAE,OAAO,YAAY,CAAC;AAAA,IAC5C,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,kBAAU,KAAK,KAAK,EAAE,OAAO,wBAAwB,SAAS,MAAM,CAAC;AACrE;AAAA,MACF;AACA,UAAI,iBAAiB,SAAS,MAAM,QAAQ,WAAW,wBAAwB,GAAG;AAChF,kBAAU,KAAK,KAAK,EAAE,OAAO,MAAM,QAAQ,CAAC;AAC5C;AAAA,MACF;AACA,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,gBAAU,KAAK,KAAK,EAAE,OAAO,QAAQ,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,MAAM,MAAM;AAC/B,YAAQ,OAAO,MAAM,kDAAkD,OAAO,IAAI;AAAA,CAAI;AAAA,EACxF,CAAC;AAED,QAAM,WAAW,YAA2B;AAC1C,UAAM,kBAAkB;AACxB,UAAM,KAAK,IAAI;AACf,WAAO,MAAM;AACb,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,GAAG,UAAU,MAAM;AACzB,SAAK,SAAS;AAAA,EAChB,CAAC;AACD,UAAQ,GAAG,WAAW,MAAM;AAC1B,SAAK,SAAS;AAAA,EAChB,CAAC;AACH;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,OAAO,MAAM,GAAG,OAAO,KAAK,CAAC;AAAA,CAAI;AACzC,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["nodeId","error","z","createDbosWorkflows"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workplane",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Durable execution plane for routing work across trusted nodes",
5
5
  "type": "module",
6
6
  "license": "MIT",