workplane 0.4.3 → 0.5.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.
- package/README.md +1 -1
- package/dist/cli.js +188 -73
- package/dist/cli.js.map +1 -1
- package/dist/migrate.js +14 -14
- package/dist/migrate.js.map +1 -1
- package/dist/node.js +40 -40
- package/dist/node.js.map +1 -1
- package/dist/server.js +254 -140
- package/dist/server.js.map +1 -1
- package/dist/setup.js +14 -14
- package/dist/setup.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../workplans/src/providers/anthropic.ts","../../workplans/src/providers/openai.ts","../../workplans/src/providers/ollama.ts","../../workplans/src/providers/shell.ts","../../workplans/src/providers/file.ts","../../dbos/src/scheduler.ts","../../dbos/src/index.ts","../../server/src/index.ts","../../core/src/config.ts","../../core/src/env.ts","../../db/src/client.ts","../../db/src/pg-store.ts","../../core/src/ids.ts","../../db/src/schema/pg.ts","../../db/src/sqlite-store.ts","../../db/src/schema/sqlite.ts","../../server/src/workflows-vanilla.ts","../../server/src/validation.ts","../../server/src/schedule-validation.ts","../../agent-skills/src/skills/code-review.ts","../../agent-skills/src/skills/hello.ts","../../agent-skills/src/skills/summarize-file.ts","../../agent-skills/src/skills/index.ts","../../workplans/src/sinks/stdout.ts","../../workplans/src/context.ts","../../workplans/src/template.ts","../../workplans/src/runner.ts","../../workplans/src/schedule-builder.ts","../../workplans/src/scheduler.ts","../../server/src/schedule-service.ts","../../core/src/auth.ts","../../server/src/auth-middleware.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\n\nexport interface AnthropicStepOptions {\n model: string;\n prompt: string;\n apiKey?: string;\n}\n\nexport async function runAnthropicStep(opts: AnthropicStepOptions): Promise<string> {\n const client = new Anthropic({ apiKey: opts.apiKey ?? process.env.ANTHROPIC_API_KEY });\n const message = await client.messages.create({\n model: opts.model,\n max_tokens: 4096,\n messages: [{ role: \"user\", content: opts.prompt }],\n });\n const block = message.content[0];\n return block.type === \"text\" ? block.text : \"\";\n}\n","import OpenAI from \"openai\";\n\nexport interface OpenAIStepOptions {\n model: string;\n prompt: string;\n apiKey?: string;\n}\n\nexport async function runOpenAIStep(opts: OpenAIStepOptions): Promise<string> {\n const client = new OpenAI({ apiKey: opts.apiKey ?? process.env.OPENAI_API_KEY });\n const completion = await client.chat.completions.create({\n model: opts.model,\n messages: [{ role: \"user\", content: opts.prompt }],\n });\n return completion.choices[0]?.message.content ?? \"\";\n}\n","import { Ollama } from \"ollama\";\n\nexport interface OllamaStepOptions {\n model: string;\n prompt: string;\n host?: string;\n}\n\nexport async function runOllamaStep(opts: OllamaStepOptions): Promise<string> {\n const host = opts.host ?? process.env.OLLAMA_HOST ?? \"http://localhost:11434\";\n const client = new Ollama({ host });\n const response = await client.generate({ model: opts.model, prompt: opts.prompt });\n return response.response;\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport interface ShellStepOptions {\n command: string;\n cwd?: string;\n}\n\nexport async function runShellStep(opts: ShellStepOptions): Promise<string> {\n const { stdout } = await execAsync(opts.command, {\n cwd: opts.cwd,\n maxBuffer: 10 * 1024 * 1024,\n });\n return stdout;\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport interface FileStepOptions {\n path: string;\n encoding?: BufferEncoding;\n}\n\nexport async function runFileStep(opts: FileStepOptions): Promise<string> {\n return readFile(opts.path, opts.encoding ?? \"utf8\");\n}\n","import { DBOS } from \"@dbos-inc/dbos-sdk\";\nimport type { WorkplanScheduler } from \"../../workplans/src/scheduler.js\";\n\nlet registered = false;\n\nexport function registerDbosSchedulerTick(scheduler: WorkplanScheduler): void {\n if (registered) {\n return;\n }\n\n DBOS.registerScheduled(\n async () => {\n await scheduler.tick();\n },\n { crontab: \"* * * * *\" },\n );\n\n registered = true;\n}\n","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\nexport { registerDbosSchedulerTick } from \"./scheduler.js\";\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 { createStore } from \"../../db/src/client.js\";\nimport type { WorkplaneStore } from \"../../db/src/store-interface.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 { validateCreateSchedule, validateUpdateSchedule } from \"./schedule-validation.js\";\nimport {\n createWorkplanScheduler,\n isSchedulerEnabled,\n listKnownPlanIds,\n startSchedulerLoop,\n withScheduleTiming,\n withUpdatedScheduleTiming,\n} from \"./schedule-service.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: WorkplaneStore, 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 { store, close: closeStore } = createStore(config.databaseUrl);\n const scheduler = createWorkplanScheduler(store);\n\n if (process.env.WORKPLANE_USE_DBOS === \"true\" && isSchedulerEnabled()) {\n const { registerDbosSchedulerTick } = await import(\"../../dbos/src/scheduler.js\");\n registerDbosSchedulerTick(scheduler);\n }\n\n const { workflows, shutdown: shutdownWorkflows } = await buildWorkflows(store, config);\n let stopSchedulerLoop = (): void => {};\n\n if (process.env.WORKPLANE_USE_DBOS !== \"true\" && isSchedulerEnabled()) {\n stopSchedulerLoop = startSchedulerLoop(scheduler);\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 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 if (req.method === \"GET\" && url.pathname === \"/plans\") {\n writeJson(res, 200, { plans: listKnownPlanIds() });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/schedules\") {\n const body = await readJson<Record<string, unknown>>(req);\n const validated = validateCreateSchedule(body);\n if (!listKnownPlanIds().includes(validated.planId)) {\n writeJson(res, 400, {\n error: `unknown planId: ${validated.planId}`,\n availablePlans: listKnownPlanIds(),\n });\n return;\n }\n const schedule = await store.createWorkplanSchedule(withScheduleTiming(validated));\n writeJson(res, 201, schedule);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/schedules\") {\n const enabledParam = url.searchParams.get(\"enabled\");\n const enabled = enabledParam === null ? undefined : enabledParam === \"true\";\n const schedules = await store.listWorkplanSchedules(enabled);\n writeJson(res, 200, { schedules });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const schedule = await store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n writeJson(res, 200, schedule);\n return;\n }\n\n if (req.method === \"PATCH\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const existing = await store.getWorkplanSchedule(scheduleId);\n if (!existing) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n const body = await readJson<Record<string, unknown>>(req);\n const validated = validateUpdateSchedule(body);\n const schedule = await store.updateWorkplanSchedule(\n scheduleId,\n withUpdatedScheduleTiming(existing, validated),\n );\n writeJson(res, 200, schedule);\n return;\n }\n\n if (req.method === \"DELETE\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const deleted = await store.deleteWorkplanSchedule(scheduleId);\n if (!deleted) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n writeJson(res, 200, { ok: true });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/schedules\\/[^/]+\\/run$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const schedule = await store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n const run = await scheduler.runNow(scheduleId);\n if (!run) {\n writeJson(res, 500, { error: \"failed to start workplan run\" });\n return;\n }\n writeJson(res, 201, run);\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/schedules/tick\") {\n const runs = await scheduler.tick();\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/workplan-runs\") {\n const scheduleId = url.searchParams.get(\"scheduleId\") ?? undefined;\n const runs = await store.listWorkplanRuns(scheduleId ? { scheduleId } : undefined);\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/workplan-runs\\/[^/]+\\/steps$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getWorkplanRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"workplan run not found\" });\n return;\n }\n const steps = await store.listWorkplanStepResults(runId);\n writeJson(res, 200, { steps });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/workplan-runs\\/[^/]+$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getWorkplanRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"workplan run not found\" });\n return;\n }\n writeJson(res, 200, run);\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 stopSchedulerLoop();\n await shutdownWorkflows();\n await closeStore();\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().optional().default(\"sqlite://~/.workplane/workplane.db\"),\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\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nlet envLoaded = false;\n\n// Load order (highest priority first, all with override:false so shell env vars win):\n// 1. .env.local — project-local overrides (gitignored)\n// 2. ~/.workplane/.env — user global config written by workplane-setup\n// 3. .env — project defaults (committed)\nexport function loadLocalEnv(): void {\n if (envLoaded) {\n return;\n }\n\n dotenvConfig({ path: \".env.local\" });\n dotenvConfig({ path: join(homedir(), \".workplane\", \".env\") });\n dotenvConfig({ path: \".env\" });\n\n envLoaded = true;\n}\n","import { mkdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { drizzle as drizzlePg } from \"drizzle-orm/node-postgres\";\nimport type { NodePgDatabase } from \"drizzle-orm/node-postgres\";\nimport { drizzle as drizzleSqlite } from \"drizzle-orm/better-sqlite3\";\nimport Database from \"better-sqlite3\";\nimport { Pool } from \"pg\";\nimport { PgStore } from \"./pg-store.js\";\nimport { SqliteStore } from \"./sqlite-store.js\";\nimport * as pgSchema from \"./schema/pg.js\";\nimport * as sqliteSchema from \"./schema/sqlite.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\n\nexport type DrizzleDb = NodePgDatabase<typeof pgSchema>;\n\nexport interface StoreHandle {\n store: WorkplaneStore;\n close: () => Promise<void>;\n}\n\nconst pools = new Map<string, Pool>();\n\nexport function getPool(databaseUrl: string): Pool {\n const existing = pools.get(databaseUrl);\n if (existing) return existing;\n const pool = new Pool({ connectionString: databaseUrl });\n pools.set(databaseUrl, pool);\n return pool;\n}\n\nexport function getDrizzle(pool: Pool): DrizzleDb {\n return drizzlePg(pool, { schema: pgSchema });\n}\n\nfunction parseSqlitePath(url: string): string {\n const path = url.startsWith(\"sqlite://\") ? url.slice(\"sqlite://\".length) : url;\n if (!path) return join(homedir(), \".workplane\", \"workplane.db\");\n if (path.startsWith(\"~/\")) return join(homedir(), path.slice(2));\n return path;\n}\n\nexport function createStore(databaseUrl?: string): StoreHandle {\n const url = databaseUrl ?? \"\";\n\n if (url.startsWith(\"postgres://\") || url.startsWith(\"postgresql://\")) {\n const pool = getPool(url);\n return {\n store: new PgStore(getDrizzle(pool)),\n close: () => pool.end(),\n };\n }\n\n const filePath = parseSqlitePath(url);\n mkdirSync(dirname(filePath), { recursive: true });\n const sqlite = new Database(filePath);\n sqlite.pragma(\"journal_mode = WAL\");\n sqlite.pragma(\"synchronous = NORMAL\");\n const db = drizzleSqlite(sqlite, { schema: sqliteSchema });\n return {\n store: new SqliteStore(db),\n close: async () => { sqlite.close(); },\n };\n}\n","import { and, arrayContains, asc, desc, eq, gt, isNotNull, lte, sql } from \"drizzle-orm\";\nimport { makeId } from \"../../core/src/ids.js\";\nimport type { DrizzleDb } from \"./client.js\";\nimport { artifacts, nodes, runInputEvents, runLogs, runs, tasks, workplanRuns, workplanSchedules, workplanStepResults } from \"./schema/pg.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n CreateWorkplanRunInput,\n CreateWorkplanScheduleInput,\n NodePollResult,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunLogRecord,\n RunRecord,\n TaskRecord,\n UpdateWorkplanScheduleInput,\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n WorkplanStepResultRecord,\n} from \"../../types/src/index.js\";\n\nfunction toTaskRecord(row: typeof tasks.$inferSelect): TaskRecord {\n return {\n id: row.id,\n kind: row.kind,\n adapter: row.adapter,\n payload: row.payload,\n requires: row.requires ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n };\n}\n\nfunction toRunRecord(row: typeof runs.$inferSelect): RunRecord {\n return {\n id: row.id,\n taskId: row.taskId,\n nodeId: row.nodeId,\n attempt: row.attempt,\n status: row.status as RunRecord[\"status\"],\n startedAt: row.startedAt?.toISOString() ?? null,\n endedAt: row.endedAt?.toISOString() ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toNodeRecord(row: typeof nodes.$inferSelect): NodeRecord {\n return {\n id: row.id,\n name: row.name,\n capabilities: row.capabilities ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.lastHeartbeatAt?.toISOString() ?? null,\n };\n}\n\nfunction toLogRecord(row: typeof runLogs.$inferSelect): RunLogRecord {\n return {\n id: row.id,\n runId: row.runId,\n stepName: row.stepName ?? null,\n stream: row.stream as RunLogRecord[\"stream\"],\n message: row.message,\n timestamp: row.timestamp.toISOString(),\n };\n}\n\nfunction toArtifactRecord(row: typeof artifacts.$inferSelect): ArtifactRecord {\n return {\n id: row.id,\n runId: row.runId,\n type: row.type,\n name: row.name,\n path: row.path,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt.toISOString(),\n };\n}\n\nfunction toInputEventRecord(row: typeof runInputEvents.$inferSelect): RunInputEvent {\n return {\n id: row.id,\n runId: row.runId,\n sequence: row.sequence,\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: row.payload,\n createdAt: row.createdAt.toISOString(),\n deliveredAt: row.deliveredAt?.toISOString() ?? null,\n };\n}\n\nfunction toScheduleRecord(row: typeof workplanSchedules.$inferSelect): WorkplanScheduleRecord {\n return {\n id: row.id,\n planId: row.planId,\n name: row.name,\n cronExpression: row.cronExpression,\n timezone: row.timezone,\n inputs: row.inputs ?? {},\n enabled: row.enabled,\n lastRunAt: row.lastRunAt?.toISOString() ?? null,\n nextRunAt: row.nextRunAt?.toISOString() ?? null,\n createdBy: row.createdBy ?? null,\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n };\n}\n\nfunction toWorkplanRunRecord(row: typeof workplanRuns.$inferSelect): WorkplanRunRecord {\n return {\n id: row.id,\n scheduleId: row.scheduleId ?? null,\n planId: row.planId,\n planName: row.planName,\n status: row.status as WorkplanRunRecord[\"status\"],\n idempotencyKey: row.idempotencyKey ?? null,\n createdAt: row.createdAt.toISOString(),\n endedAt: row.endedAt?.toISOString() ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toWorkplanStepResultRecord(row: typeof workplanStepResults.$inferSelect): WorkplanStepResultRecord {\n return {\n id: row.id,\n workplanRunId: row.workplanRunId,\n stepId: row.stepId,\n stepName: row.stepName,\n output: row.output ?? null,\n exitCode: row.exitCode ?? null,\n durationMs: row.durationMs ?? null,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt.toISOString(),\n };\n}\n\nfunction mapRawTask(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 mapRawRun(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\nexport class PgStore implements WorkplaneStore {\n constructor(private readonly db: DrizzleDb) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const taskId = makeId(\"task\");\n const [row] = await this.db.insert(tasks).values({\n id: taskId,\n kind: input.kind,\n adapter: input.adapter,\n payload: input.payload,\n requires: input.requires ?? [],\n status: \"queued\",\n }).returning();\n return toTaskRecord(row);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const rows = await this.db\n .select()\n .from(tasks)\n .where(status ? eq(tasks.status, status) : undefined)\n .orderBy(desc(tasks.createdAt))\n .limit(100);\n return rows.map(toTaskRecord);\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.select().from(tasks).where(eq(tasks.id, taskId));\n return row ? toTaskRecord(row) : null;\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const conditions = [];\n if (filters?.taskId) conditions.push(eq(runs.taskId, filters.taskId));\n if (filters?.status) conditions.push(eq(runs.status, filters.status));\n\n const rows = await this.db\n .select()\n .from(runs)\n .where(conditions.length ? and(...conditions) : undefined)\n .orderBy(desc(runs.createdAt))\n .limit(100);\n return rows.map(toRunRecord);\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const [row] = await this.db.select().from(runs).where(eq(runs.id, runId));\n return row ? toRunRecord(row) : null;\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const [existing] = await this.db.select().from(nodes).where(eq(nodes.name, name));\n\n if (existing) {\n const [updated] = await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: sql`now()`, updatedAt: sql`now()` })\n .where(eq(nodes.id, existing.id))\n .returning();\n return toNodeRecord(updated);\n }\n\n const nodeId = preferredId ?? makeId(\"node\");\n const [inserted] = await this.db.insert(nodes).values({\n id: nodeId, name, capabilities, status: \"online\", lastHeartbeatAt: sql`now()`,\n }).returning();\n return toNodeRecord(inserted);\n }\n\n async getRunCancellationState(runId: string): Promise<{ runStatus: string; taskStatus: string } | null> {\n const [row] = await this.db\n .select({ runStatus: runs.status, taskStatus: tasks.status })\n .from(runs)\n .innerJoin(tasks, eq(tasks.id, runs.taskId))\n .where(eq(runs.id, runId));\n return row ?? null;\n }\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n return await this.db.transaction(async (tx) => {\n await tx.update(nodes)\n .set({\n capabilities,\n status: \"online\",\n lastHeartbeatAt: sql`now()`,\n updatedAt: sql`now()`,\n })\n .where(eq(nodes.id, nodeId));\n\n const [taskRow] = await tx\n .select()\n .from(tasks)\n .where(and(eq(tasks.status, \"queued\"), arrayContains(tasks.requires, capabilities)))\n .orderBy(asc(tasks.createdAt))\n .limit(1)\n .for(\"update\", { skipLocked: true });\n\n if (!taskRow) return null;\n\n const taskId = taskRow.id;\n\n const attemptResult = await tx.execute(sql`\n SELECT COALESCE(MAX(attempt), 0) AS max_attempt FROM runs WHERE task_id = ${taskId}\n `);\n const attempt = Number((attemptResult.rows[0] as Record<string, unknown>).max_attempt) + 1;\n\n const runId = makeId(\"run\");\n\n const runResult = await tx.execute(sql`\n INSERT INTO runs (id, task_id, node_id, attempt, status, started_at)\n VALUES (${runId}, ${taskId}, ${nodeId}, ${attempt}, 'assigned', now())\n RETURNING *\n `);\n\n await tx.execute(sql`\n UPDATE tasks SET status = 'assigned', updated_at = now() WHERE id = ${taskId}\n `);\n\n return {\n task: toTaskRecord(taskRow),\n run: mapRawRun(runResult.rows[0] as Record<string, unknown>),\n };\n });\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n return await this.db.transaction(async (tx) => {\n const currentResult = await tx.execute(sql`\n SELECT r.*, t.status AS task_status\n FROM runs r JOIN tasks t ON t.id = r.task_id\n WHERE r.id = ${runId}\n FOR UPDATE\n `);\n\n if (currentResult.rows.length === 0) return null;\n\n const currentRow = currentResult.rows[0] as Record<string, unknown>;\n const currentTaskStatus = String(currentRow.task_status);\n\n if (currentTaskStatus === \"cancelled\" && status !== \"cancelled\") {\n return mapRawRun(currentRow);\n }\n\n const isTerminal = status === \"succeeded\" || status === \"failed\" || status === \"cancelled\";\n const [updatedRun] = await tx.update(runs)\n .set(isTerminal\n ? { status, error: error ?? null, endedAt: sql`now()`, updatedAt: sql`now()` }\n : { status, error: error ?? null, updatedAt: sql`now()` })\n .where(eq(runs.id, runId))\n .returning();\n\n if (!updatedRun) return null;\n\n const nextTaskStatus = isTerminal ? status : \"running\";\n if (currentTaskStatus !== \"cancelled\" || status === \"cancelled\") {\n await tx.update(tasks)\n .set({ status: nextTaskStatus, updatedAt: sql`now()` })\n .where(eq(tasks.id, updatedRun.taskId));\n }\n\n return toRunRecord(updatedRun);\n });\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n if (logs.length === 0) return 0;\n await this.db.insert(runLogs).values(\n logs.map((log) => ({\n runId,\n stepName: log.stepName ?? null,\n stream: log.stream,\n message: log.message,\n })),\n );\n return logs.length;\n }\n\n async getRunLogs(runId: string): Promise<RunLogRecord[]> {\n const rows = await this.db\n .select()\n .from(runLogs)\n .where(eq(runLogs.runId, runId))\n .orderBy(asc(runLogs.timestamp));\n return rows.map(toLogRecord);\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const artifactId = makeId(\"artifact\");\n const [row] = await this.db.insert(artifacts).values({\n id: artifactId,\n runId,\n type: input.type,\n name: input.name,\n path: input.path,\n metadata: input.metadata ?? null,\n }).returning();\n return toArtifactRecord(row);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const rows = await this.db\n .select()\n .from(artifacts)\n .where(eq(artifacts.runId, runId))\n .orderBy(asc(artifacts.createdAt));\n return rows.map(toArtifactRecord);\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.update(tasks)\n .set({ status: \"queued\", updatedAt: sql`now()` })\n .where(and(eq(tasks.id, taskId), eq(tasks.status, \"failed\")))\n .returning();\n return row ? toTaskRecord(row) : null;\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n return await this.db.transaction(async (tx) => {\n const taskResult = await tx.execute(sql`\n SELECT * FROM tasks WHERE id = ${taskId} FOR UPDATE\n `);\n\n if (taskResult.rows.length === 0) return null;\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskStatus = String(taskRow.status);\n\n if (taskStatus === \"succeeded\" || taskStatus === \"failed\" || taskStatus === \"cancelled\") {\n return null;\n }\n\n if (taskStatus === \"assigned\" || taskStatus === \"running\") {\n const runResult = await tx.execute(sql`\n SELECT * FROM runs WHERE task_id = ${taskId} ORDER BY attempt DESC LIMIT 1 FOR UPDATE\n `);\n\n if (runResult.rows.length > 0) {\n const runRow = runResult.rows[0] as Record<string, unknown>;\n const runStatus = String(runRow.status);\n if (runStatus !== \"succeeded\" && runStatus !== \"failed\" && runStatus !== \"cancelled\") {\n await tx.execute(sql`\n UPDATE runs SET status = 'cancelled', ended_at = now(), updated_at = now(),\n error = COALESCE(error, 'task cancelled')\n WHERE id = ${runRow.id}\n `);\n }\n }\n }\n\n const [updatedTask] = await tx.update(tasks)\n .set({ status: \"cancelled\", updatedAt: sql`now()` })\n .where(eq(tasks.id, taskId))\n .returning();\n\n return toTaskRecord(updatedTask);\n });\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n return await this.db.transaction(async (tx) => {\n const seqResult = await tx.execute(sql`\n SELECT COALESCE(MAX(sequence), 0) + 1 AS next_seq FROM run_input_events WHERE run_id = ${runId}\n `);\n const sequence = Number((seqResult.rows[0] as Record<string, unknown>).next_seq);\n\n const [inserted] = await tx.insert(runInputEvents)\n .values({ runId, sequence, kind: input.kind, payload: input.payload })\n .returning();\n\n return toInputEventRecord(inserted);\n });\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const rows = await this.db\n .select()\n .from(runInputEvents)\n .where(and(eq(runInputEvents.runId, runId), gt(runInputEvents.sequence, afterSequence)))\n .orderBy(asc(runInputEvents.sequence));\n return rows.map(toInputEventRecord);\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.db.update(runInputEvents)\n .set({ deliveredAt: sql`now()` })\n .where(and(eq(runInputEvents.runId, runId), eq(runInputEvents.sequence, sequence)));\n }\n\n async createWorkplanSchedule(input: CreateWorkplanScheduleInput): Promise<WorkplanScheduleRecord> {\n const [row] = await this.db.insert(workplanSchedules).values({\n id: makeId(\"sched\"),\n planId: input.planId,\n name: input.name,\n cronExpression: input.cronExpression,\n timezone: input.timezone,\n inputs: input.inputs ?? {},\n enabled: input.enabled ?? true,\n nextRunAt: input.enabled === false ? null : input.nextRunAt ? new Date(input.nextRunAt) : null,\n createdBy: input.createdBy ?? null,\n }).returning();\n return toScheduleRecord(row);\n }\n\n async listWorkplanSchedules(enabled?: boolean): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(enabled === undefined ? undefined : eq(workplanSchedules.enabled, enabled))\n .orderBy(desc(workplanSchedules.createdAt));\n return rows.map(toScheduleRecord);\n }\n\n async getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null> {\n const [row] = await this.db.select().from(workplanSchedules).where(eq(workplanSchedules.id, scheduleId));\n return row ? toScheduleRecord(row) : null;\n }\n\n async updateWorkplanSchedule(\n scheduleId: string,\n input: UpdateWorkplanScheduleInput,\n ): Promise<WorkplanScheduleRecord | null> {\n const patch: Partial<typeof workplanSchedules.$inferInsert> = {};\n if (input.name !== undefined) patch.name = input.name;\n if (input.cronExpression !== undefined) patch.cronExpression = input.cronExpression;\n if (input.timezone !== undefined) patch.timezone = input.timezone;\n if (input.inputs !== undefined) patch.inputs = input.inputs;\n if (input.enabled !== undefined) patch.enabled = input.enabled;\n if (input.nextRunAt !== undefined) patch.nextRunAt = input.nextRunAt ? new Date(input.nextRunAt) : null;\n patch.updatedAt = new Date();\n\n const [row] = await this.db.update(workplanSchedules)\n .set(patch)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning();\n return row ? toScheduleRecord(row) : null;\n }\n\n async deleteWorkplanSchedule(scheduleId: string): Promise<boolean> {\n return await this.db.transaction(async (tx) => {\n await tx.update(workplanRuns)\n .set({ scheduleId: null })\n .where(eq(workplanRuns.scheduleId, scheduleId));\n\n const deleted = await tx.delete(workplanSchedules)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning({ id: workplanSchedules.id });\n return deleted.length > 0;\n });\n }\n\n async listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]> {\n const asOfDate = new Date(asOf);\n const rows = await this.db.select().from(workplanSchedules)\n .where(and(\n eq(workplanSchedules.enabled, true),\n isNotNull(workplanSchedules.nextRunAt),\n lte(workplanSchedules.nextRunAt, asOfDate),\n ))\n .orderBy(asc(workplanSchedules.nextRunAt));\n return rows.map(toScheduleRecord);\n }\n\n async markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void> {\n await this.db.update(workplanSchedules)\n .set({\n lastRunAt: new Date(lastRunAt),\n nextRunAt: new Date(nextRunAt),\n updatedAt: sql`now()`,\n })\n .where(eq(workplanSchedules.id, scheduleId));\n }\n\n async tryCreateWorkplanRun(input: CreateWorkplanRunInput): Promise<WorkplanRunRecord | null> {\n try {\n const [row] = await this.db.insert(workplanRuns).values({\n id: makeId(\"wprun\"),\n scheduleId: input.scheduleId ?? null,\n planId: input.planId,\n planName: input.planName,\n status: \"running\",\n idempotencyKey: input.idempotencyKey ?? null,\n }).returning();\n return toWorkplanRunRecord(row);\n } catch (err) {\n const code = (err as { code?: string }).code;\n if (input.idempotencyKey && code === \"23505\") {\n return null;\n }\n throw err;\n }\n }\n\n async updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.update(workplanRuns)\n .set({\n status,\n error: error ?? null,\n endedAt: endedAt ? new Date(endedAt) : status !== \"running\" ? new Date() : null,\n })\n .where(eq(workplanRuns.id, runId))\n .returning();\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async getWorkplanRun(runId: string): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.select().from(workplanRuns).where(eq(workplanRuns.id, runId));\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async listWorkplanRuns(filters?: { scheduleId?: string }): Promise<WorkplanRunRecord[]> {\n const rows = await this.db.select().from(workplanRuns)\n .where(filters?.scheduleId ? eq(workplanRuns.scheduleId, filters.scheduleId) : undefined)\n .orderBy(desc(workplanRuns.createdAt))\n .limit(100);\n return rows.map(toWorkplanRunRecord);\n }\n\n async appendWorkplanStepResults(\n runId: string,\n steps: WorkplanStepResultInput[],\n ): Promise<WorkplanStepResultRecord[]> {\n if (steps.length === 0) return [];\n const rows = await this.db.insert(workplanStepResults).values(\n steps.map((step) => ({\n id: makeId(\"wpstep\"),\n workplanRunId: runId,\n stepId: step.stepId,\n stepName: step.stepName,\n output: step.output ?? null,\n exitCode: step.exitCode ?? null,\n durationMs: step.durationMs ?? null,\n metadata: step.metadata ?? null,\n })),\n ).returning();\n return rows.map(toWorkplanStepResultRecord);\n }\n\n async listWorkplanStepResults(runId: string): Promise<WorkplanStepResultRecord[]> {\n const rows = await this.db.select().from(workplanStepResults)\n .where(eq(workplanStepResults.workplanRunId, runId))\n .orderBy(asc(workplanStepResults.createdAt));\n return rows.map(toWorkplanStepResultRecord);\n }\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 { isNull, sql } from \"drizzle-orm\";\nimport { bigint, bigserial, boolean, index, integer, jsonb, pgTable, text, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\n\nexport const tasks = pgTable(\"tasks\", {\n id: text(\"id\").primaryKey(),\n kind: text(\"kind\").notNull(),\n adapter: text(\"adapter\").notNull(),\n payload: jsonb(\"payload\").$type<Record<string, unknown>>().notNull(),\n requires: text(\"requires\").array().notNull().default(sql`'{}'::text[]`),\n status: text(\"status\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n statusCreatedAtIdx: index(\"idx_tasks_status_created_at\").on(table.status, table.createdAt),\n}));\n\nexport const nodes = pgTable(\"nodes\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n capabilities: text(\"capabilities\").array().notNull().default(sql`'{}'::text[]`),\n status: text(\"status\").notNull().default(\"online\"),\n lastHeartbeatAt: timestamp(\"last_heartbeat_at\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const runs = pgTable(\"runs\", {\n id: text(\"id\").primaryKey(),\n taskId: text(\"task_id\").notNull().references(() => tasks.id),\n nodeId: text(\"node_id\").notNull().references(() => nodes.id),\n attempt: integer(\"attempt\").notNull(),\n status: text(\"status\").notNull(),\n startedAt: timestamp(\"started_at\", { withTimezone: true }),\n endedAt: timestamp(\"ended_at\", { withTimezone: true }),\n error: text(\"error\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n taskIdIdx: index(\"idx_runs_task_id\").on(table.taskId),\n nodeIdIdx: index(\"idx_runs_node_id\").on(table.nodeId),\n}));\n\nexport const runLogs = pgTable(\"run_logs\", {\n id: bigserial(\"id\", { mode: \"number\" }).primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n stepName: text(\"step_name\"),\n stream: text(\"stream\").notNull(),\n message: text(\"message\").notNull(),\n timestamp: timestamp(\"timestamp\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdTimestampIdx: index(\"idx_run_logs_run_id_timestamp\").on(table.runId, table.timestamp),\n}));\n\nexport const artifacts = pgTable(\"artifacts\", {\n id: text(\"id\").primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n type: text(\"type\").notNull(),\n name: text(\"name\").notNull(),\n path: text(\"path\").notNull(),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdIdx: index(\"idx_artifacts_run_id\").on(table.runId),\n}));\n\nexport const workplanSchedules = pgTable(\"workplan_schedules\", {\n id: text(\"id\").primaryKey(),\n planId: text(\"plan_id\").notNull(),\n name: text(\"name\").notNull(),\n cronExpression: text(\"cron_expression\").notNull(),\n timezone: text(\"timezone\").notNull(),\n inputs: jsonb(\"inputs\").$type<Record<string, unknown>>().notNull().default({}),\n enabled: boolean(\"enabled\").notNull().default(true),\n lastRunAt: timestamp(\"last_run_at\", { withTimezone: true }),\n nextRunAt: timestamp(\"next_run_at\", { withTimezone: true }),\n createdBy: text(\"created_by\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n dueIdx: index(\"idx_workplan_schedules_due\").on(table.nextRunAt),\n}));\n\nexport const workplanRuns = pgTable(\"workplan_runs\", {\n id: text(\"id\").primaryKey(),\n scheduleId: text(\"schedule_id\").references(() => workplanSchedules.id),\n planId: text(\"plan_id\").notNull(),\n planName: text(\"plan_name\").notNull(),\n status: text(\"status\").notNull().default(\"running\"),\n idempotencyKey: text(\"idempotency_key\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\", { withTimezone: true }),\n error: text(\"error\"),\n}, (table) => ({\n scheduleIdx: index(\"idx_workplan_runs_schedule_id\").on(table.scheduleId),\n idempotencyUnique: uniqueIndex(\"idx_workplan_runs_idempotency\").on(table.idempotencyKey),\n}));\n\nexport const workplanStepResults = pgTable(\"workplan_step_results\", {\n id: text(\"id\").primaryKey(),\n workplanRunId: text(\"workplan_run_id\").notNull().references(() => workplanRuns.id),\n stepId: text(\"step_id\").notNull(),\n stepName: text(\"step_name\").notNull(),\n output: text(\"output\"),\n exitCode: integer(\"exit_code\"),\n durationMs: integer(\"duration_ms\"),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdx: index(\"idx_workplan_step_results_run_id\").on(table.workplanRunId),\n}));\n\nexport const runInputEvents = pgTable(\"run_input_events\", {\n id: bigserial(\"id\", { mode: \"number\" }).primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n sequence: bigint(\"sequence\", { mode: \"number\" }).notNull(),\n kind: text(\"kind\").notNull(),\n payload: jsonb(\"payload\").$type<Record<string, unknown>>().notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n deliveredAt: timestamp(\"delivered_at\", { withTimezone: true }),\n}, (table) => ({\n runSequenceUniqueIdx: uniqueIndex(\"idx_run_input_events_run_sequence\").on(table.runId, table.sequence),\n undeliveredIdx: index(\"idx_run_input_events_undelivered\").on(table.runId, table.sequence).where(isNull(table.deliveredAt)),\n}));\n","import { and, asc, desc, eq, gt, lte, sql } from \"drizzle-orm\";\nimport type { BetterSQLite3Database } from \"drizzle-orm/better-sqlite3\";\nimport { makeId } from \"../../core/src/ids.js\";\nimport { artifacts, nodes, runInputEvents, runLogs, runs, tasks, workplanRuns, workplanSchedules, workplanStepResults } from \"./schema/sqlite.js\";\nimport type * as sqliteSchema from \"./schema/sqlite.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n CreateWorkplanRunInput,\n CreateWorkplanScheduleInput,\n NodePollResult,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunLogRecord,\n RunRecord,\n TaskRecord,\n UpdateWorkplanScheduleInput,\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n WorkplanStepResultRecord,\n} from \"../../types/src/index.js\";\n\ntype SqliteDb = BetterSQLite3Database<typeof sqliteSchema>;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n// Drizzle-typed mappers for simple CRUD methods (camelCase, text timestamps)\n\nfunction toTaskRecord(row: typeof tasks.$inferSelect): TaskRecord {\n return {\n id: row.id,\n kind: row.kind,\n adapter: row.adapter,\n payload: row.payload,\n requires: row.requires ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toRunRecord(row: typeof runs.$inferSelect): RunRecord {\n return {\n id: row.id,\n taskId: row.taskId,\n nodeId: row.nodeId,\n attempt: row.attempt,\n status: row.status as RunRecord[\"status\"],\n startedAt: row.startedAt ?? null,\n endedAt: row.endedAt ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toNodeRecord(row: typeof nodes.$inferSelect): NodeRecord {\n return {\n id: row.id,\n name: row.name,\n capabilities: row.capabilities ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.lastHeartbeatAt ?? null,\n };\n}\n\nfunction toLogRecord(row: typeof runLogs.$inferSelect): RunLogRecord {\n return {\n id: row.id,\n runId: row.runId,\n stepName: row.stepName ?? null,\n stream: row.stream as RunLogRecord[\"stream\"],\n message: row.message,\n timestamp: row.timestamp,\n };\n}\n\nfunction toArtifactRecord(row: typeof artifacts.$inferSelect): ArtifactRecord {\n return {\n id: row.id,\n runId: row.runId,\n type: row.type,\n name: row.name,\n path: row.path,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt,\n };\n}\n\nfunction toInputEventRecord(row: typeof runInputEvents.$inferSelect): RunInputEvent {\n return {\n id: row.id,\n runId: row.runId,\n sequence: row.sequence,\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: row.payload,\n createdAt: row.createdAt,\n deliveredAt: row.deliveredAt ?? null,\n };\n}\n\nfunction toScheduleRecord(row: typeof workplanSchedules.$inferSelect): WorkplanScheduleRecord {\n return {\n id: row.id,\n planId: row.planId,\n name: row.name,\n cronExpression: row.cronExpression,\n timezone: row.timezone,\n inputs: row.inputs ?? {},\n enabled: row.enabled,\n lastRunAt: row.lastRunAt ?? null,\n nextRunAt: row.nextRunAt ?? null,\n createdBy: row.createdBy ?? null,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toWorkplanRunRecord(row: typeof workplanRuns.$inferSelect): WorkplanRunRecord {\n return {\n id: row.id,\n scheduleId: row.scheduleId ?? null,\n planId: row.planId,\n planName: row.planName,\n status: row.status as WorkplanRunRecord[\"status\"],\n idempotencyKey: row.idempotencyKey ?? null,\n createdAt: row.createdAt,\n endedAt: row.endedAt ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toWorkplanStepResultRecord(row: typeof workplanStepResults.$inferSelect): WorkplanStepResultRecord {\n return {\n id: row.id,\n workplanRunId: row.workplanRunId,\n stepId: row.stepId,\n stepName: row.stepName,\n output: row.output ?? null,\n exitCode: row.exitCode ?? null,\n durationMs: row.durationMs ?? null,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt,\n };\n}\n\n// Raw-row mappers for transaction methods that use $client directly.\n// better-sqlite3 rejects async transaction callbacks so we use the sync\n// $client API with prepared statements for the 4 methods that need atomicity.\n\ninterface RawTaskRow {\n id: string; kind: string; adapter: string;\n payload: string; requires: string; status: string;\n created_at: string; updated_at: string;\n}\n\ninterface RawRunRow {\n id: string; task_id: string; node_id: string; attempt: number; status: string;\n started_at: string | null; ended_at: string | null; error: string | null;\n created_at: string; updated_at: string;\n}\n\nfunction mapRawTask(row: RawTaskRow): TaskRecord {\n return {\n id: row.id, kind: row.kind, adapter: row.adapter,\n payload: JSON.parse(row.payload) as Record<string, unknown>,\n requires: JSON.parse(row.requires) as string[],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.created_at, updatedAt: row.updated_at,\n };\n}\n\nfunction mapRawRun(row: RawRunRow): RunRecord {\n return {\n id: row.id, taskId: row.task_id, nodeId: row.node_id,\n attempt: row.attempt, status: row.status as RunRecord[\"status\"],\n startedAt: row.started_at ?? null, endedAt: row.ended_at ?? null,\n error: row.error ?? null,\n };\n}\n\nexport class SqliteStore implements WorkplaneStore {\n constructor(private readonly db: SqliteDb) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(tasks).values({\n id: makeId(\"task\"),\n kind: input.kind,\n adapter: input.adapter,\n payload: input.payload,\n requires: input.requires ?? [],\n status: \"queued\",\n createdAt: now,\n updatedAt: now,\n }).returning();\n return toTaskRecord(row);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const rows = await this.db.select().from(tasks)\n .where(status ? eq(tasks.status, status) : undefined)\n .orderBy(desc(tasks.createdAt)).limit(100);\n return rows.map(toTaskRecord);\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.select().from(tasks).where(eq(tasks.id, taskId));\n return row ? toTaskRecord(row) : null;\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const conds = [];\n if (filters?.taskId) conds.push(eq(runs.taskId, filters.taskId));\n if (filters?.status) conds.push(eq(runs.status, filters.status));\n const rows = await this.db.select().from(runs)\n .where(conds.length ? and(...conds) : undefined)\n .orderBy(desc(runs.createdAt)).limit(100);\n return rows.map(toRunRecord);\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const [row] = await this.db.select().from(runs).where(eq(runs.id, runId));\n return row ? toRunRecord(row) : null;\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const now = nowIso();\n const [existing] = await this.db.select().from(nodes).where(eq(nodes.name, name));\n if (existing) {\n const [updated] = await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: now, updatedAt: now })\n .where(eq(nodes.id, existing.id)).returning();\n return toNodeRecord(updated);\n }\n const [inserted] = await this.db.insert(nodes).values({\n id: preferredId ?? makeId(\"node\"), name, capabilities,\n status: \"online\", lastHeartbeatAt: now, createdAt: now, updatedAt: now,\n }).returning();\n return toNodeRecord(inserted);\n }\n\n async getRunCancellationState(runId: string): Promise<{ runStatus: string; taskStatus: string } | null> {\n const [row] = await this.db\n .select({ runStatus: runs.status, taskStatus: tasks.status })\n .from(runs).innerJoin(tasks, eq(tasks.id, runs.taskId)).where(eq(runs.id, runId));\n return row ? { runStatus: row.runStatus, taskStatus: row.taskStatus ?? \"\" } : null;\n }\n\n // Transaction methods use this.db.$client directly because better-sqlite3\n // rejects async callbacks — all operations inside must be synchronous.\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n const now = nowIso();\n await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: now, updatedAt: now })\n .where(eq(nodes.id, nodeId));\n\n const raw = this.db.$client;\n return raw.transaction(() => {\n const capSet = new Set(capabilities);\n const queued = raw.prepare(\n \"SELECT * FROM tasks WHERE status = 'queued' ORDER BY created_at ASC\",\n ).all() as RawTaskRow[];\n\n const task = queued.find((t) =>\n (JSON.parse(t.requires) as string[]).every((r) => capSet.has(r)),\n );\n if (!task) return null;\n\n const { max_attempt } = raw.prepare(\n \"SELECT COALESCE(MAX(attempt), 0) AS max_attempt FROM runs WHERE task_id = ?\",\n ).get(task.id) as { max_attempt: number };\n\n const runId = makeId(\"run\");\n raw.prepare(\n \"INSERT INTO runs (id, task_id, node_id, attempt, status, started_at, created_at, updated_at) VALUES (?, ?, ?, ?, 'assigned', ?, ?, ?)\",\n ).run(runId, task.id, nodeId, max_attempt + 1, now, now, now);\n\n raw.prepare(\"UPDATE tasks SET status = 'assigned', updated_at = ? WHERE id = ?\").run(now, task.id);\n\n return {\n task: mapRawTask(task),\n run: mapRawRun(raw.prepare(\"SELECT * FROM runs WHERE id = ?\").get(runId) as RawRunRow),\n };\n })();\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n const current = raw.prepare(\n \"SELECT r.*, t.status AS task_status FROM runs r JOIN tasks t ON t.id = r.task_id WHERE r.id = ?\",\n ).get(runId) as (RawRunRow & { task_status: string }) | undefined;\n if (!current) return null;\n\n if (current.task_status === \"cancelled\" && status !== \"cancelled\") {\n return mapRawRun(current);\n }\n\n const now = nowIso();\n const isTerminal = status === \"succeeded\" || status === \"failed\" || status === \"cancelled\";\n if (isTerminal) {\n raw.prepare(\n \"UPDATE runs SET status = ?, error = ?, ended_at = ?, updated_at = ? WHERE id = ?\",\n ).run(status, error ?? null, now, now, runId);\n } else {\n raw.prepare(\n \"UPDATE runs SET status = ?, error = ?, updated_at = ? WHERE id = ?\",\n ).run(status, error ?? null, now, runId);\n }\n\n const updatedRun = raw.prepare(\"SELECT * FROM runs WHERE id = ?\").get(runId) as RawRunRow;\n const nextTaskStatus = isTerminal ? status : \"running\";\n if (current.task_status !== \"cancelled\" || status === \"cancelled\") {\n raw.prepare(\"UPDATE tasks SET status = ?, updated_at = ? WHERE id = ?\").run(\n nextTaskStatus, now, updatedRun.task_id,\n );\n }\n return mapRawRun(updatedRun);\n })();\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n if (logs.length === 0) return 0;\n const now = nowIso();\n await this.db.insert(runLogs).values(\n logs.map((log) => ({\n runId, stepName: log.stepName ?? null,\n stream: log.stream, message: log.message, timestamp: now,\n })),\n );\n return logs.length;\n }\n\n async getRunLogs(runId: string): Promise<RunLogRecord[]> {\n const rows = await this.db.select().from(runLogs)\n .where(eq(runLogs.runId, runId)).orderBy(asc(runLogs.timestamp));\n return rows.map(toLogRecord);\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(artifacts).values({\n id: makeId(\"artifact\"), runId, type: input.type, name: input.name,\n path: input.path, metadata: input.metadata ?? null, createdAt: now,\n }).returning();\n return toArtifactRecord(row);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const rows = await this.db.select().from(artifacts)\n .where(eq(artifacts.runId, runId)).orderBy(asc(artifacts.createdAt));\n return rows.map(toArtifactRecord);\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.update(tasks)\n .set({ status: \"queued\", updatedAt: nowIso() })\n .where(and(eq(tasks.id, taskId), eq(tasks.status, \"failed\"))).returning();\n return row ? toTaskRecord(row) : null;\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n const taskRow = raw.prepare(\"SELECT * FROM tasks WHERE id = ?\").get(taskId) as RawTaskRow | undefined;\n if (!taskRow) return null;\n\n const terminal = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n if (terminal.has(taskRow.status)) return null;\n\n const now = nowIso();\n if (taskRow.status === \"assigned\" || taskRow.status === \"running\") {\n const latestRun = raw.prepare(\n \"SELECT * FROM runs WHERE task_id = ? ORDER BY attempt DESC LIMIT 1\",\n ).get(taskId) as RawRunRow | undefined;\n\n if (latestRun && !terminal.has(latestRun.status)) {\n raw.prepare(\n \"UPDATE runs SET status = 'cancelled', ended_at = ?, updated_at = ?, error = COALESCE(error, 'task cancelled') WHERE id = ?\",\n ).run(now, now, latestRun.id);\n }\n }\n\n raw.prepare(\"UPDATE tasks SET status = 'cancelled', updated_at = ? WHERE id = ?\").run(now, taskId);\n return mapRawTask(raw.prepare(\"SELECT * FROM tasks WHERE id = ?\").get(taskId) as RawTaskRow);\n })();\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n const raw = this.db.$client;\n const now = nowIso();\n const event = raw.transaction(() => {\n const { next_seq } = raw.prepare(\n \"SELECT COALESCE(MAX(sequence), 0) + 1 AS next_seq FROM run_input_events WHERE run_id = ?\",\n ).get(runId) as { next_seq: number };\n\n raw.prepare(\n \"INSERT INTO run_input_events (run_id, sequence, kind, payload, created_at) VALUES (?, ?, ?, ?, ?)\",\n ).run(runId, next_seq, input.kind, JSON.stringify(input.payload), now);\n\n return raw.prepare(\n \"SELECT * FROM run_input_events WHERE run_id = ? AND sequence = ?\",\n ).get(runId, next_seq) as {\n id: number; run_id: string; sequence: number; kind: string;\n payload: string; created_at: string; delivered_at: string | null;\n };\n })();\n\n return {\n id: event.id, runId: event.run_id, sequence: event.sequence,\n kind: event.kind as RunInputEvent[\"kind\"],\n payload: JSON.parse(event.payload) as Record<string, unknown>,\n createdAt: event.created_at, deliveredAt: event.delivered_at ?? null,\n };\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const rows = await this.db.select().from(runInputEvents)\n .where(and(eq(runInputEvents.runId, runId), gt(runInputEvents.sequence, afterSequence)))\n .orderBy(asc(runInputEvents.sequence));\n return rows.map(toInputEventRecord);\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.db.update(runInputEvents)\n .set({ deliveredAt: nowIso() })\n .where(and(eq(runInputEvents.runId, runId), eq(runInputEvents.sequence, sequence)));\n }\n\n async createWorkplanSchedule(input: CreateWorkplanScheduleInput): Promise<WorkplanScheduleRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(workplanSchedules).values({\n id: makeId(\"sched\"),\n planId: input.planId,\n name: input.name,\n cronExpression: input.cronExpression,\n timezone: input.timezone,\n inputs: input.inputs ?? {},\n enabled: input.enabled ?? true,\n nextRunAt: input.enabled === false ? null : input.nextRunAt ?? null,\n createdBy: input.createdBy ?? null,\n createdAt: now,\n updatedAt: now,\n }).returning();\n return toScheduleRecord(row);\n }\n\n async listWorkplanSchedules(enabled?: boolean): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(enabled === undefined ? undefined : eq(workplanSchedules.enabled, enabled))\n .orderBy(desc(workplanSchedules.createdAt));\n return rows.map(toScheduleRecord);\n }\n\n async getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null> {\n const [row] = await this.db.select().from(workplanSchedules).where(eq(workplanSchedules.id, scheduleId));\n return row ? toScheduleRecord(row) : null;\n }\n\n async updateWorkplanSchedule(\n scheduleId: string,\n input: UpdateWorkplanScheduleInput,\n ): Promise<WorkplanScheduleRecord | null> {\n const patch: Partial<typeof workplanSchedules.$inferInsert> = { updatedAt: nowIso() };\n if (input.name !== undefined) patch.name = input.name;\n if (input.cronExpression !== undefined) patch.cronExpression = input.cronExpression;\n if (input.timezone !== undefined) patch.timezone = input.timezone;\n if (input.inputs !== undefined) patch.inputs = input.inputs;\n if (input.enabled !== undefined) patch.enabled = input.enabled;\n if (input.nextRunAt !== undefined) patch.nextRunAt = input.nextRunAt;\n\n const [row] = await this.db.update(workplanSchedules)\n .set(patch)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning();\n return row ? toScheduleRecord(row) : null;\n }\n\n async deleteWorkplanSchedule(scheduleId: string): Promise<boolean> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n raw.prepare(\"UPDATE workplan_runs SET schedule_id = NULL WHERE schedule_id = ?\").run(scheduleId);\n const result = raw.prepare(\"DELETE FROM workplan_schedules WHERE id = ?\").run(scheduleId);\n return (result.changes ?? 0) > 0;\n })();\n }\n\n async listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(and(\n eq(workplanSchedules.enabled, true),\n sql`${workplanSchedules.nextRunAt} IS NOT NULL`,\n lte(workplanSchedules.nextRunAt, asOf),\n ))\n .orderBy(asc(workplanSchedules.nextRunAt));\n return rows.map(toScheduleRecord);\n }\n\n async markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void> {\n await this.db.update(workplanSchedules)\n .set({ lastRunAt, nextRunAt, updatedAt: nowIso() })\n .where(eq(workplanSchedules.id, scheduleId));\n }\n\n async tryCreateWorkplanRun(input: CreateWorkplanRunInput): Promise<WorkplanRunRecord | null> {\n const now = nowIso();\n try {\n const [row] = await this.db.insert(workplanRuns).values({\n id: makeId(\"wprun\"),\n scheduleId: input.scheduleId ?? null,\n planId: input.planId,\n planName: input.planName,\n status: \"running\",\n idempotencyKey: input.idempotencyKey ?? null,\n createdAt: now,\n }).returning();\n return toWorkplanRunRecord(row);\n } catch (err) {\n if (input.idempotencyKey && err instanceof Error && err.message.includes(\"UNIQUE constraint failed\")) {\n return null;\n }\n throw err;\n }\n }\n\n async updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.update(workplanRuns)\n .set({\n status,\n error: error ?? null,\n endedAt: endedAt ?? (status !== \"running\" ? nowIso() : null),\n })\n .where(eq(workplanRuns.id, runId))\n .returning();\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async getWorkplanRun(runId: string): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.select().from(workplanRuns).where(eq(workplanRuns.id, runId));\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async listWorkplanRuns(filters?: { scheduleId?: string }): Promise<WorkplanRunRecord[]> {\n const rows = await this.db.select().from(workplanRuns)\n .where(filters?.scheduleId ? eq(workplanRuns.scheduleId, filters.scheduleId) : undefined)\n .orderBy(desc(workplanRuns.createdAt))\n .limit(100);\n return rows.map(toWorkplanRunRecord);\n }\n\n async appendWorkplanStepResults(\n runId: string,\n steps: WorkplanStepResultInput[],\n ): Promise<WorkplanStepResultRecord[]> {\n if (steps.length === 0) return [];\n const now = nowIso();\n const rows = await this.db.insert(workplanStepResults).values(\n steps.map((step) => ({\n id: makeId(\"wpstep\"),\n workplanRunId: runId,\n stepId: step.stepId,\n stepName: step.stepName,\n output: step.output ?? null,\n exitCode: step.exitCode ?? null,\n durationMs: step.durationMs ?? null,\n metadata: step.metadata ?? null,\n createdAt: now,\n })),\n ).returning();\n return rows.map(toWorkplanStepResultRecord);\n }\n\n async listWorkplanStepResults(runId: string): Promise<WorkplanStepResultRecord[]> {\n const rows = await this.db.select().from(workplanStepResults)\n .where(eq(workplanStepResults.workplanRunId, runId))\n .orderBy(asc(workplanStepResults.createdAt));\n return rows.map(toWorkplanStepResultRecord);\n }\n}\n","import { isNull, sql } from \"drizzle-orm\";\nimport { index, integer, sqliteTable, text, uniqueIndex } from \"drizzle-orm/sqlite-core\";\n\nconst nowDefault = sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`;\n\nexport const tasks = sqliteTable(\"tasks\", {\n id: text(\"id\").primaryKey(),\n kind: text(\"kind\").notNull(),\n adapter: text(\"adapter\").notNull(),\n payload: text(\"payload\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n requires: text(\"requires\", { mode: \"json\" }).$type<string[]>().notNull().default([]),\n status: text(\"status\").notNull(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n statusCreatedAtIdx: index(\"idx_tasks_status_created_at\").on(table.status, table.createdAt),\n}));\n\nexport const nodes = sqliteTable(\"nodes\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n capabilities: text(\"capabilities\", { mode: \"json\" }).$type<string[]>().notNull().default([]),\n status: text(\"status\").notNull().default(\"online\"),\n lastHeartbeatAt: text(\"last_heartbeat_at\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n});\n\nexport const runs = sqliteTable(\"runs\", {\n id: text(\"id\").primaryKey(),\n taskId: text(\"task_id\").notNull().references(() => tasks.id),\n nodeId: text(\"node_id\").notNull().references(() => nodes.id),\n attempt: integer(\"attempt\").notNull(),\n status: text(\"status\").notNull(),\n startedAt: text(\"started_at\"),\n endedAt: text(\"ended_at\"),\n error: text(\"error\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n taskIdIdx: index(\"idx_runs_task_id\").on(table.taskId),\n nodeIdIdx: index(\"idx_runs_node_id\").on(table.nodeId),\n}));\n\nexport const runLogs = sqliteTable(\"run_logs\", {\n id: integer(\"id\").primaryKey({ autoIncrement: true }),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n stepName: text(\"step_name\"),\n stream: text(\"stream\").notNull(),\n message: text(\"message\").notNull(),\n timestamp: text(\"timestamp\").notNull().default(nowDefault),\n}, (table) => ({\n runIdTimestampIdx: index(\"idx_run_logs_run_id_timestamp\").on(table.runId, table.timestamp),\n}));\n\nexport const artifacts = sqliteTable(\"artifacts\", {\n id: text(\"id\").primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n type: text(\"type\").notNull(),\n name: text(\"name\").notNull(),\n path: text(\"path\").notNull(),\n metadata: text(\"metadata\", { mode: \"json\" }).$type<Record<string, unknown>>(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n}, (table) => ({\n runIdIdx: index(\"idx_artifacts_run_id\").on(table.runId),\n}));\n\nexport const workplanSchedules = sqliteTable(\"workplan_schedules\", {\n id: text(\"id\").primaryKey(),\n planId: text(\"plan_id\").notNull(),\n name: text(\"name\").notNull(),\n cronExpression: text(\"cron_expression\").notNull(),\n timezone: text(\"timezone\").notNull(),\n inputs: text(\"inputs\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n enabled: integer(\"enabled\", { mode: \"boolean\" }).notNull().default(true),\n lastRunAt: text(\"last_run_at\"),\n nextRunAt: text(\"next_run_at\"),\n createdBy: text(\"created_by\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n dueIdx: index(\"idx_workplan_schedules_due\").on(table.nextRunAt),\n}));\n\nexport const workplanRuns = sqliteTable(\"workplan_runs\", {\n id: text(\"id\").primaryKey(),\n scheduleId: text(\"schedule_id\").references(() => workplanSchedules.id),\n planId: text(\"plan_id\").notNull(),\n planName: text(\"plan_name\").notNull(),\n status: text(\"status\").notNull().default(\"running\"),\n idempotencyKey: text(\"idempotency_key\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n endedAt: text(\"ended_at\"),\n error: text(\"error\"),\n}, (table) => ({\n scheduleIdx: index(\"idx_workplan_runs_schedule_id\").on(table.scheduleId),\n idempotencyUnique: uniqueIndex(\"idx_workplan_runs_idempotency\").on(table.idempotencyKey),\n}));\n\nexport const workplanStepResults = sqliteTable(\"workplan_step_results\", {\n id: text(\"id\").primaryKey(),\n workplanRunId: text(\"workplan_run_id\").notNull().references(() => workplanRuns.id),\n stepId: text(\"step_id\").notNull(),\n stepName: text(\"step_name\").notNull(),\n output: text(\"output\"),\n exitCode: integer(\"exit_code\"),\n durationMs: integer(\"duration_ms\"),\n metadata: text(\"metadata\", { mode: \"json\" }).$type<Record<string, unknown>>(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n}, (table) => ({\n runIdx: index(\"idx_workplan_step_results_run_id\").on(table.workplanRunId),\n}));\n\nexport const runInputEvents = sqliteTable(\"run_input_events\", {\n id: integer(\"id\").primaryKey({ autoIncrement: true }),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n sequence: integer(\"sequence\").notNull(),\n kind: text(\"kind\").notNull(),\n payload: text(\"payload\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n deliveredAt: text(\"delivered_at\"),\n}, (table) => ({\n runSequenceUniqueIdx: uniqueIndex(\"idx_run_input_events_run_sequence\").on(table.runId, table.sequence),\n undeliveredIdx: index(\"idx_run_input_events_undelivered\").on(table.runId, table.sequence).where(isNull(table.deliveredAt)),\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 type { WorkplaneStore } from \"../../db/src/store-interface.js\";\n\nexport class VanillaWorkflows implements ServerWorkflows {\n constructor(private readonly store: WorkplaneStore) {}\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 { z } from \"zod\";\n\nexport const createScheduleSchema = z.object({\n planId: z.string().min(1),\n name: z.string().min(1),\n cronExpression: z.string().min(1),\n timezone: z.string().min(1),\n inputs: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n});\n\nexport const updateScheduleSchema = z.object({\n name: z.string().min(1).optional(),\n cronExpression: z.string().min(1).optional(),\n timezone: z.string().min(1).optional(),\n inputs: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n});\n\nexport type CreateScheduleBody = z.infer<typeof createScheduleSchema>;\nexport type UpdateScheduleBody = z.infer<typeof updateScheduleSchema>;\n\nexport function validateCreateSchedule(body: unknown): CreateScheduleBody {\n return createScheduleSchema.parse(body);\n}\n\nexport function validateUpdateSchedule(body: unknown): UpdateScheduleBody {\n return updateScheduleSchema.parse(body);\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface CodeReviewOptions {\n repoPath?: string;\n model?: string;\n branch?: string;\n}\n\nexport function codeReviewPlan(opts: CodeReviewOptions = {}): Workplan {\n const { repoPath = \".\", model = \"claude-haiku-4-5-20251001\", branch } = opts;\n const diffCmd = branch ? `git diff ${branch}..HEAD` : \"git diff HEAD~1\";\n\n return {\n id: \"code-review\",\n name: \"Code Review\",\n steps: [\n {\n id: \"diff\",\n name: \"Git Diff\",\n adapter: \"shell\",\n provider: \"shell\",\n payload: { command: diffCmd, cwd: repoPath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: \"ollama\",\n provider: \"ollama\",\n model: \"llama3\",\n payload: { prompt: \"Summarize these code changes concisely:\\n{{prevOutput}}\" },\n output: { dest: \"next\" },\n },\n {\n id: \"critique\",\n name: \"Critique\",\n adapter: \"anthropic\",\n provider: \"anthropic\",\n model,\n payload: { prompt: \"Review this summary for correctness, security issues, and code quality:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface HelloOptions {\n message?: string;\n}\n\nexport function helloPlan(opts: HelloOptions = {}): Workplan {\n const message = opts.message ?? \"hello from workplane\";\n return {\n id: \"hello\",\n name: \"Hello\",\n description: \"Single shell echo — useful for scheduler smoke tests\",\n steps: [\n {\n id: \"echo\",\n name: \"Echo\",\n adapter: \"shell\",\n provider: \"shell\",\n payload: { command: `echo ${JSON.stringify(message)}` },\n },\n ],\n };\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface SummarizeFileOptions {\n filePath: string;\n provider?: string;\n model?: string;\n}\n\nexport function summarizeFilePlan(opts: SummarizeFileOptions): Workplan {\n const { filePath, provider = \"ollama\", model = \"llama3\" } = opts;\n\n return {\n id: \"summarize-file\",\n name: \"Summarize File\",\n steps: [\n {\n id: \"read\",\n name: \"Read File\",\n adapter: \"file\",\n provider: \"file\",\n payload: { path: filePath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: provider,\n provider,\n model,\n payload: { prompt: \"Summarize the following file content concisely:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { SkillEntry } from \"../types.js\";\nimport { codeReviewPlan } from \"./code-review.js\";\nimport { helloPlan } from \"./hello.js\";\nimport { summarizeFilePlan } from \"./summarize-file.js\";\n\nexport class SkillRegistry {\n private readonly skills = new Map<string, SkillEntry>();\n\n register(entry: SkillEntry): void {\n this.skills.set(entry.name, entry);\n }\n\n get(name: string): SkillEntry | undefined {\n return this.skills.get(name);\n }\n\n list(): SkillEntry[] {\n return Array.from(this.skills.values());\n }\n}\n\nexport function createDefaultRegistry(): SkillRegistry {\n const registry = new SkillRegistry();\n\n registry.register({\n name: \"hello\",\n description: \"Shell echo (scheduler smoke test)\",\n buildPlan: (opts) =>\n helloPlan({\n message: typeof opts.message === \"string\" ? opts.message : undefined,\n }),\n });\n\n registry.register({\n name: \"code-review\",\n description: \"Git diff → local summarize (ollama) → frontier critique (anthropic)\",\n buildPlan: (opts) =>\n codeReviewPlan({\n repoPath: typeof opts.repo === \"string\" ? opts.repo : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n branch: typeof opts.branch === \"string\" ? opts.branch : undefined,\n }),\n });\n\n registry.register({\n name: \"summarize-file\",\n description: \"Read file → summarize with configurable provider (default: ollama)\",\n buildPlan: (opts) => {\n const filePath = typeof opts.file === \"string\" ? opts.file : \"\";\n if (!filePath) throw new Error(\"--file is required for summarize-file\");\n return summarizeFilePlan({\n filePath,\n provider: typeof opts.provider === \"string\" ? opts.provider : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n });\n },\n });\n\n return registry;\n}\n\nexport function listSkills(registry: SkillRegistry): void {\n for (const skill of registry.list()) {\n process.stdout.write(` ${skill.name.padEnd(20)} ${skill.description}\\n`);\n }\n}\n","export function printStepResult(stepName: string, output: string): void {\n process.stdout.write(`=== step: ${stepName} ===\\n${output}\\n\\n`);\n}\n","import type { NodeHandle, WorkplanRunContext, WorkplanStep, StepResult } from \"./types.js\";\nimport { printStepResult } from \"./sinks/stdout.js\";\n\nexport interface LocalWorkplanContextOptions {\n serverUrl?: string;\n nodeToken?: string;\n}\n\nclass WorkplaneNodeHandle implements NodeHandle {\n constructor(\n private readonly serverUrl: string,\n private readonly nodeToken: string,\n ) {}\n\n async execute(step: WorkplanStep): Promise<StepResult> {\n const start = Date.now();\n const taskRes = await fetch(`${this.serverUrl}/tasks`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${this.nodeToken}`,\n },\n body: JSON.stringify({\n kind: \"workplan.step\",\n adapter: step.adapter,\n payload: step.payload,\n requires: step.requires ?? [],\n }),\n });\n\n if (!taskRes.ok) {\n throw new Error(`failed to submit step ${step.id}: ${taskRes.status}`);\n }\n\n const task = (await taskRes.json()) as { id: string };\n const output = await this.pollUntilDone(task.id);\n return { stepId: step.id, output, exitCode: 0, durationMs: Date.now() - start };\n }\n\n private async pollUntilDone(taskId: string): Promise<string> {\n const terminalStatuses = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n for (;;) {\n await new Promise((r) => setTimeout(r, 1000));\n const res = await fetch(`${this.serverUrl}/tasks/${taskId}`, {\n headers: { authorization: `Bearer ${this.nodeToken}` },\n });\n const task = (await res.json()) as { status: string; payload?: Record<string, unknown> };\n if (terminalStatuses.has(task.status)) {\n if (task.status !== \"succeeded\") {\n throw new Error(`step task ${taskId} ended with status: ${task.status}`);\n }\n return typeof task.payload?.output === \"string\" ? task.payload.output : \"\";\n }\n }\n }\n}\n\nexport class LocalWorkplanContext implements WorkplanRunContext {\n private readonly serverUrl: string;\n private readonly nodeToken: string;\n\n constructor(opts: LocalWorkplanContextOptions = {}) {\n this.serverUrl = opts.serverUrl ?? process.env.WORKPLANE_SERVER_URL ?? \"http://localhost:8787\";\n this.nodeToken = opts.nodeToken ?? process.env.WORKPLANE_NODE_TOKEN ?? \"\";\n }\n\n async resolveNode(_requires: string[], _provider?: string): Promise<NodeHandle> {\n return new WorkplaneNodeHandle(this.serverUrl, this.nodeToken);\n }\n\n emitResult(_stepId: string, stepName: string, output: string): void {\n printStepResult(stepName, output);\n }\n}\n","export function applyTemplate(payload: Record<string, unknown>, prevOutput: string): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(payload).map(([k, v]) => [\n k,\n typeof v === \"string\" ? v.replaceAll(\"{{prevOutput}}\", prevOutput) : v,\n ]),\n );\n}\n","import type { Workplan, WorkplanResult, WorkplanRunner, WorkplanRunContext, StepResult, WorkplanStep } from \"./types.js\";\nimport { applyTemplate } from \"./template.js\";\n\nconst INLINE_PROVIDERS = new Set([\"anthropic\", \"openai\", \"ollama\", \"shell\", \"file\"]);\n\nasync function runInlineStep(step: WorkplanStep, prompt: string): Promise<string> {\n const provider = step.provider!;\n if (provider === \"anthropic\") {\n const { runAnthropicStep } = await import(\"./providers/anthropic.js\");\n return runAnthropicStep({ model: step.model ?? \"claude-haiku-4-5-20251001\", prompt });\n }\n if (provider === \"openai\") {\n const { runOpenAIStep } = await import(\"./providers/openai.js\");\n return runOpenAIStep({ model: step.model ?? \"gpt-4o-mini\", prompt });\n }\n if (provider === \"ollama\") {\n const { runOllamaStep } = await import(\"./providers/ollama.js\");\n return runOllamaStep({ model: step.model ?? \"llama3\", prompt });\n }\n if (provider === \"shell\") {\n const { runShellStep } = await import(\"./providers/shell.js\");\n return runShellStep({\n command: String(step.payload.command ?? \"\"),\n cwd: typeof step.payload.cwd === \"string\" ? step.payload.cwd : undefined,\n });\n }\n if (provider === \"file\") {\n const { runFileStep } = await import(\"./providers/file.js\");\n return runFileStep({ path: String(step.payload.path ?? \"\") });\n }\n throw new Error(`unknown inline provider: ${provider}`);\n}\n\nexport class SequentialWorkplanRunner implements WorkplanRunner {\n async run(plan: Workplan, ctx: WorkplanRunContext): Promise<WorkplanResult> {\n const results: StepResult[] = [];\n let prevOutput = \"\";\n let planSucceeded = true;\n\n for (const step of plan.steps) {\n const payload = prevOutput ? applyTemplate(step.payload, prevOutput) : step.payload;\n const prompt = typeof payload.prompt === \"string\" ? payload.prompt : \"\";\n const start = Date.now();\n let output = \"\";\n let exitCode = 0;\n\n try {\n if (step.provider && INLINE_PROVIDERS.has(step.provider)) {\n output = await runInlineStep({ ...step, payload }, prompt);\n } else {\n const node = await ctx.resolveNode(step.requires ?? [], step.provider);\n const result = await node.execute({ ...step, payload });\n output = result.output;\n exitCode = result.exitCode;\n }\n } catch (err) {\n exitCode = 1;\n output = err instanceof Error ? err.message : String(err);\n planSucceeded = false;\n\n const stepResult: StepResult = {\n stepId: step.id,\n output,\n exitCode,\n durationMs: Date.now() - start,\n };\n results.push(stepResult);\n ctx.emitResult(step.id, step.name, output);\n\n if (!step.continueOnError) {\n return {\n planId: plan.id,\n status: \"step_failed\",\n steps: results,\n succeeded: false,\n };\n }\n prevOutput = \"\";\n continue;\n }\n\n const dest = step.output?.dest ?? \"stdout\";\n const stepResult: StepResult = {\n stepId: step.id,\n output,\n exitCode,\n durationMs: Date.now() - start,\n };\n results.push(stepResult);\n\n if (dest === \"stdout\" || dest === \"artifact\") {\n ctx.emitResult(step.id, step.name, output);\n prevOutput = \"\";\n } else if (dest === \"next\") {\n prevOutput = output;\n }\n }\n\n return {\n planId: plan.id,\n status: planSucceeded ? \"completed\" : \"failed\",\n steps: results,\n succeeded: planSucceeded,\n };\n }\n}\n","import { CronExpressionParser } from \"cron-parser\";\nimport type { WorkplanSchedule } from \"./types.js\";\n\nexport class ScheduleBuilder {\n static nextRunAt(cronExpression: string, timezone: string): string {\n const expr = CronExpressionParser.parse(cronExpression, { tz: timezone });\n return expr.next().toISOString() ?? new Date().toISOString();\n }\n\n static withNextRunAt(schedule: WorkplanSchedule): WorkplanSchedule {\n return {\n ...schedule,\n nextRunAt: ScheduleBuilder.nextRunAt(schedule.cronExpression, schedule.timezone),\n };\n }\n}\n","import type {\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n} from \"../../types/src/index.js\";\nimport { ScheduleBuilder } from \"./schedule-builder.js\";\nimport { SequentialWorkplanRunner } from \"./runner.js\";\nimport type { Workplan, WorkplanRunContext, WorkplanRunner } from \"./types.js\";\n\nexport interface ScheduleStore {\n listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]>;\n getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null>;\n markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void>;\n tryCreateWorkplanRun(input: {\n scheduleId?: string;\n planId: string;\n planName: string;\n idempotencyKey?: string;\n }): Promise<WorkplanRunRecord | null>;\n updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null>;\n appendWorkplanStepResults(runId: string, steps: WorkplanStepResultInput[]): Promise<unknown>;\n}\n\nexport interface PlanResolver {\n resolve(planId: string, inputs: Record<string, unknown>): Workplan;\n}\n\nexport interface ExecuteScheduleOptions {\n advanceSchedule?: boolean;\n idempotencyKey?: string;\n}\n\nexport class WorkplanScheduler {\n constructor(\n private readonly store: ScheduleStore,\n private readonly resolver: PlanResolver,\n private readonly contextFactory: () => WorkplanRunContext,\n private readonly runner: WorkplanRunner = new SequentialWorkplanRunner(),\n ) {}\n\n async tick(now = new Date()): Promise<WorkplanRunRecord[]> {\n const due = await this.store.listDueWorkplanSchedules(now.toISOString());\n const launched: WorkplanRunRecord[] = [];\n\n for (const schedule of due) {\n if (!schedule.nextRunAt) {\n continue;\n }\n const run = await this.executeSchedule(schedule, {\n scheduledTime: schedule.nextRunAt,\n advanceSchedule: true,\n });\n if (run) {\n launched.push(run);\n }\n }\n\n return launched;\n }\n\n async runNow(scheduleId: string): Promise<WorkplanRunRecord | null> {\n const schedule = await this.store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n return null;\n }\n\n return this.executeSchedule(schedule, {\n scheduledTime: new Date().toISOString(),\n advanceSchedule: false,\n });\n }\n\n async executeSchedule(\n schedule: WorkplanScheduleRecord,\n options: ExecuteScheduleOptions & { scheduledTime: string },\n ): Promise<WorkplanRunRecord | null> {\n const idempotencyKey = options.idempotencyKey\n ?? (options.advanceSchedule ? `${schedule.id}:${options.scheduledTime}` : undefined);\n\n const run = await this.store.tryCreateWorkplanRun({\n scheduleId: schedule.id,\n planId: schedule.planId,\n planName: schedule.name,\n idempotencyKey,\n });\n if (!run) {\n return null;\n }\n\n if (options.advanceSchedule) {\n const nextRunAt = ScheduleBuilder.nextRunAt(schedule.cronExpression, schedule.timezone);\n await this.store.markWorkplanScheduleRan(schedule.id, options.scheduledTime, nextRunAt);\n }\n\n try {\n const plan = this.resolver.resolve(schedule.planId, schedule.inputs);\n const result = await this.runner.run(plan, this.contextFactory());\n const stepNames = new Map(plan.steps.map((step) => [step.id, step.name]));\n const stepInputs: WorkplanStepResultInput[] = result.steps.map((step) => ({\n stepId: step.stepId,\n stepName: stepNames.get(step.stepId) ?? step.stepId,\n output: step.output,\n exitCode: step.exitCode,\n durationMs: step.durationMs,\n metadata: step.metadata,\n }));\n await this.store.appendWorkplanStepResults(run.id, stepInputs);\n\n const error = result.succeeded ? undefined : result.steps.at(-1)?.output;\n return await this.store.updateWorkplanRun(run.id, result.status, error);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return await this.store.updateWorkplanRun(run.id, \"failed\", message);\n }\n }\n}\n","import { createDefaultRegistry } from \"../../agent-skills/src/skills/index.js\";\nimport type { WorkplaneStore } from \"../../db/src/store-interface.js\";\nimport { LocalWorkplanContext } from \"../../workplans/src/context.js\";\nimport { ScheduleBuilder, WorkplanScheduler } from \"../../workplans/src/index.js\";\nimport type { CreateWorkplanScheduleInput, UpdateWorkplanScheduleInput } from \"../../types/src/index.js\";\n\nconst skillRegistry = createDefaultRegistry();\n\nexport function createWorkplanScheduler(store: WorkplaneStore): WorkplanScheduler {\n return new WorkplanScheduler(\n store,\n {\n resolve(planId, inputs) {\n const skill = skillRegistry.get(planId);\n if (!skill) {\n throw new Error(`unknown workplan skill: ${planId}`);\n }\n return skill.buildPlan(inputs);\n },\n },\n () => new LocalWorkplanContext(),\n );\n}\n\nexport function withScheduleTiming(\n input: CreateWorkplanScheduleInput,\n): CreateWorkplanScheduleInput {\n if (input.enabled === false) {\n return { ...input, nextRunAt: null };\n }\n return {\n ...input,\n nextRunAt: ScheduleBuilder.nextRunAt(input.cronExpression, input.timezone),\n };\n}\n\nexport function withUpdatedScheduleTiming(\n current: { cronExpression: string; timezone: string; enabled: boolean },\n input: UpdateWorkplanScheduleInput,\n): UpdateWorkplanScheduleInput {\n const cronExpression = input.cronExpression ?? current.cronExpression;\n const timezone = input.timezone ?? current.timezone;\n const enabled = input.enabled ?? current.enabled;\n\n if (!enabled) {\n return { ...input, nextRunAt: null };\n }\n\n if (input.cronExpression !== undefined || input.timezone !== undefined || input.enabled === true) {\n return {\n ...input,\n nextRunAt: ScheduleBuilder.nextRunAt(cronExpression, timezone),\n };\n }\n\n return input;\n}\n\nexport function isSchedulerEnabled(): boolean {\n return process.env.WORKPLANE_SCHEDULER_ENABLED !== \"false\";\n}\n\nexport function schedulerIntervalMs(): number {\n const raw = process.env.WORKPLANE_SCHEDULER_INTERVAL_MS;\n const parsed = raw ? Number(raw) : 60_000;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 60_000;\n}\n\nexport function startSchedulerLoop(scheduler: WorkplanScheduler): () => void {\n const intervalMs = schedulerIntervalMs();\n const timer = setInterval(() => {\n void scheduler.tick().catch((error) => {\n process.stderr.write(`workplan scheduler tick failed: ${String(error)}\\n`);\n });\n }, intervalMs);\n timer.unref();\n\n void scheduler.tick().catch((error) => {\n process.stderr.write(`workplan scheduler initial tick failed: ${String(error)}\\n`);\n });\n\n process.stdout.write(`workplan scheduler enabled (interval ${intervalMs}ms)\\n`);\n return () => clearInterval(timer);\n}\n\nexport function listKnownPlanIds(): string[] {\n return skillRegistry.list().map((skill) => skill.name);\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 if (method === \"POST\" && pathname === \"/schedules\") {\n return \"operator\";\n }\n if (method === \"PATCH\" && /^\\/schedules\\/[^/]+$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"DELETE\" && /^\\/schedules\\/[^/]+$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/schedules\\/[^/]+\\/run$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && pathname === \"/schedules/tick\") {\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":"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","names":["DBOS","homedir","join","sql","sql","and","asc","desc","eq","gt","lte","sql","artifacts","nodes","runInputEvents","runLogs","runs","tasks","workplanRuns","workplanSchedules","workplanStepResults","isNull","sql","index","integer","text","uniqueIndex","toTaskRecord","toRunRecord","toNodeRecord","toLogRecord","toArtifactRecord","toInputEventRecord","toScheduleRecord","toWorkplanRunRecord","toWorkplanStepResultRecord","mapRawRun","tasks","eq","desc","runs","and","nodes","runLogs","asc","artifacts","runInputEvents","gt","workplanSchedules","sql","lte","workplanRuns","workplanStepResults","join","homedir","z","z","runAnthropicStep","runOpenAIStep","runOllamaStep","runShellStep","runFileStep","stepResult","createDbosWorkflows","registerDbosSchedulerTick","tasks","runs","artifacts"]}
|
|
1
|
+
{"version":3,"sources":["../../../libs/workplans/src/providers/anthropic.ts","../../../libs/workplans/src/providers/openai.ts","../../../libs/workplans/src/providers/ollama.ts","../../../libs/workplans/src/providers/shell.ts","../../../libs/workplans/src/providers/file.ts","../../../libs/dbos/src/scheduler.ts","../../../libs/dbos/src/index.ts","../../server/src/index.ts","../../../libs/core/src/auth.ts","../../../libs/core/src/config.ts","../../../libs/core/src/env.ts","../../../libs/core/src/ids.ts","../../../libs/db/src/client.ts","../../../libs/db/src/pg-store.ts","../../../libs/db/src/schema/pg.ts","../../../libs/db/src/sqlite-store.ts","../../../libs/db/src/schema/sqlite.ts","../../server/src/workflows-vanilla.ts","../../server/src/validation.ts","../../server/src/schedule-validation.ts","../../../libs/agent-skills/src/skills/code-review.ts","../../../libs/agent-skills/src/skills/hello.ts","../../../libs/agent-skills/src/skills/summarize-file.ts","../../../libs/agent-skills/src/skills/index.ts","../../../libs/workplans/src/template.ts","../../../libs/workplans/src/runner.ts","../../../libs/workplans/src/sinks/stdout.ts","../../../libs/workplans/src/context.ts","../../../libs/workplans/src/schedule-builder.ts","../../../libs/workplans/src/scheduler.ts","../../server/src/schedule-service.ts","../../server/src/auth-middleware.ts","../../server/src/cors.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\n\nexport interface AnthropicStepOptions {\n model: string;\n prompt: string;\n apiKey?: string;\n}\n\nexport async function runAnthropicStep(opts: AnthropicStepOptions): Promise<string> {\n const client = new Anthropic({ apiKey: opts.apiKey ?? process.env.ANTHROPIC_API_KEY });\n const message = await client.messages.create({\n model: opts.model,\n max_tokens: 4096,\n messages: [{ role: \"user\", content: opts.prompt }],\n });\n const block = message.content[0];\n return block.type === \"text\" ? block.text : \"\";\n}\n","import OpenAI from \"openai\";\n\nexport interface OpenAIStepOptions {\n model: string;\n prompt: string;\n apiKey?: string;\n}\n\nexport async function runOpenAIStep(opts: OpenAIStepOptions): Promise<string> {\n const client = new OpenAI({ apiKey: opts.apiKey ?? process.env.OPENAI_API_KEY });\n const completion = await client.chat.completions.create({\n model: opts.model,\n messages: [{ role: \"user\", content: opts.prompt }],\n });\n return completion.choices[0]?.message.content ?? \"\";\n}\n","import { Ollama } from \"ollama\";\n\nexport interface OllamaStepOptions {\n model: string;\n prompt: string;\n host?: string;\n}\n\nexport async function runOllamaStep(opts: OllamaStepOptions): Promise<string> {\n const host = opts.host ?? process.env.OLLAMA_HOST ?? \"http://localhost:11434\";\n const client = new Ollama({ host });\n const response = await client.generate({ model: opts.model, prompt: opts.prompt });\n return response.response;\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport interface ShellStepOptions {\n command: string;\n cwd?: string;\n}\n\nexport async function runShellStep(opts: ShellStepOptions): Promise<string> {\n const { stdout } = await execAsync(opts.command, {\n cwd: opts.cwd,\n maxBuffer: 10 * 1024 * 1024,\n });\n return stdout;\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport interface FileStepOptions {\n path: string;\n encoding?: BufferEncoding;\n}\n\nexport async function runFileStep(opts: FileStepOptions): Promise<string> {\n return readFile(opts.path, opts.encoding ?? \"utf8\");\n}\n","import { DBOS } from \"@dbos-inc/dbos-sdk\";\nimport type { WorkplanScheduler } from \"../../workplans/src/scheduler.js\";\n\nlet registered = false;\n\nexport function registerDbosSchedulerTick(scheduler: WorkplanScheduler): void {\n if (registered) {\n return;\n }\n\n DBOS.registerScheduled(\n async () => {\n await scheduler.tick();\n },\n { crontab: \"* * * * *\" },\n );\n\n registered = true;\n}\n","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\nexport { registerDbosSchedulerTick } from \"./scheduler.js\";\n","import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { URL } from \"node:url\";\nimport { ZodError } from \"zod\";\nimport { loadServerConfig } from \"@workplane/core\";\nimport { createStore, type WorkplaneStore } from \"@workplane/db\";\nimport type { AppendInputEventInput, ArtifactInput, CreateTaskInput, RunLogInput, RunStatus, ServerWorkflows } from \"@workplane/types\";\nimport { VanillaWorkflows } from \"./workflows-vanilla.js\";\nimport { validateCreateTaskInput, validateInputEvent } from \"./validation.js\";\nimport { validateCreateSchedule, validateUpdateSchedule } from \"./schedule-validation.js\";\nimport {\n createWorkplanScheduler,\n isSchedulerEnabled,\n listSkillSummaries,\n listKnownPlanIds,\n startSchedulerLoop,\n withScheduleTiming,\n withUpdatedScheduleTiming,\n} from \"./schedule-service.js\";\nimport { checkRouteAuth, requiresConfiguredToken, routeAuthFor } from \"./auth-middleware.js\";\nimport { applyCors, parseCorsOrigins } from \"./cors.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: WorkplaneStore, 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(\"@workplane/dbos\");\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 { store, close: closeStore } = createStore(config.databaseUrl);\n const scheduler = createWorkplanScheduler(store);\n\n if (process.env.WORKPLANE_USE_DBOS === \"true\" && isSchedulerEnabled()) {\n const { registerDbosSchedulerTick } = await import(\"@workplane/dbos/scheduler\");\n registerDbosSchedulerTick(scheduler);\n }\n\n const { workflows, shutdown: shutdownWorkflows } = await buildWorkflows(store, config);\n let stopSchedulerLoop = (): void => {};\n\n if (process.env.WORKPLANE_USE_DBOS !== \"true\" && isSchedulerEnabled()) {\n stopSchedulerLoop = startSchedulerLoop(scheduler);\n }\n\n const corsConfig = parseCorsOrigins(process.env.WORKPLANE_CORS_ORIGINS);\n const protectReads = process.env.WORKPLANE_PROTECT_READS === \"true\";\n if (protectReads && !(config.operatorToken || config.nodeToken)) {\n process.stderr.write(\"WORKPLANE_PROTECT_READS=true has no effect: set WORKPLANE_OPERATOR_TOKEN (and WORKPLANE_NODE_TOKEN) first\\n\");\n } else if (protectReads && !config.nodeToken) {\n process.stderr.write(\"WORKPLANE_PROTECT_READS=true: also set WORKPLANE_NODE_TOKEN, nodes read /runs/:id and /tasks/:id without a token otherwise\\n\");\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 if (applyCors(req, res, corsConfig)) {\n return;\n }\n\n const url = new URL(req.url, \"http://localhost\");\n const routeAuth = routeAuthFor(req.method, url.pathname, { protectReads });\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 afterIdParam = url.searchParams.get(\"afterId\");\n const afterId = afterIdParam === null ? undefined : Number(afterIdParam);\n if (afterId !== undefined && (!Number.isInteger(afterId) || afterId < 0)) {\n writeJson(res, 400, { error: \"afterId must be a non-negative integer\" });\n return;\n }\n const logs = await store.getRunLogs(runId, afterId);\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 === \"GET\" && url.pathname === \"/nodes\") {\n const nodes = await store.listNodes();\n writeJson(res, 200, { nodes });\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 if (req.method === \"GET\" && url.pathname === \"/skills\") {\n writeJson(res, 200, { skills: listSkillSummaries() });\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/plans\") {\n writeJson(res, 200, { plans: listKnownPlanIds() });\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/schedules\") {\n const body = await readJson<Record<string, unknown>>(req);\n const validated = validateCreateSchedule(body);\n if (!listKnownPlanIds().includes(validated.planId)) {\n writeJson(res, 400, {\n error: `unknown planId: ${validated.planId}`,\n availablePlans: listKnownPlanIds(),\n });\n return;\n }\n const schedule = await store.createWorkplanSchedule(withScheduleTiming(validated));\n writeJson(res, 201, schedule);\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/schedules\") {\n const enabledParam = url.searchParams.get(\"enabled\");\n const enabled = enabledParam === null ? undefined : enabledParam === \"true\";\n const schedules = await store.listWorkplanSchedules(enabled);\n writeJson(res, 200, { schedules });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const schedule = await store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n writeJson(res, 200, schedule);\n return;\n }\n\n if (req.method === \"PATCH\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const existing = await store.getWorkplanSchedule(scheduleId);\n if (!existing) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n const body = await readJson<Record<string, unknown>>(req);\n const validated = validateUpdateSchedule(body);\n const schedule = await store.updateWorkplanSchedule(\n scheduleId,\n withUpdatedScheduleTiming(existing, validated),\n );\n writeJson(res, 200, schedule);\n return;\n }\n\n if (req.method === \"DELETE\" && /^\\/schedules\\/[^/]+$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const deleted = await store.deleteWorkplanSchedule(scheduleId);\n if (!deleted) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n writeJson(res, 200, { ok: true });\n return;\n }\n\n if (req.method === \"POST\" && /^\\/schedules\\/[^/]+\\/run$/.test(url.pathname)) {\n const scheduleId = url.pathname.split(\"/\")[2];\n const schedule = await store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n writeJson(res, 404, { error: \"schedule not found\" });\n return;\n }\n const run = await scheduler.runNow(scheduleId);\n if (!run) {\n writeJson(res, 500, { error: \"failed to start workplan run\" });\n return;\n }\n writeJson(res, 201, run);\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === \"/schedules/tick\") {\n const runs = await scheduler.tick();\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === \"/workplan-runs\") {\n const scheduleId = url.searchParams.get(\"scheduleId\") ?? undefined;\n const runs = await store.listWorkplanRuns(scheduleId ? { scheduleId } : undefined);\n writeJson(res, 200, { runs });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/workplan-runs\\/[^/]+\\/steps$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getWorkplanRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"workplan run not found\" });\n return;\n }\n const steps = await store.listWorkplanStepResults(runId);\n writeJson(res, 200, { steps });\n return;\n }\n\n if (req.method === \"GET\" && /^\\/workplan-runs\\/[^/]+$/.test(url.pathname)) {\n const runId = url.pathname.split(\"/\")[2];\n const run = await store.getWorkplanRun(runId);\n if (!run) {\n writeJson(res, 404, { error: \"workplan run not found\" });\n return;\n }\n writeJson(res, 200, run);\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 stopSchedulerLoop();\n await shutdownWorkflows();\n await closeStore();\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 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 { z } from \"zod\";\nimport { loadLocalEnv } from \"./env.js\";\n\nloadLocalEnv();\n\nconst serverEnvSchema = z.object({\n DATABASE_URL: z.string().optional().default(\"sqlite://~/.workplane/workplane.db\"),\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\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nlet envLoaded = false;\n\n// Load order (highest priority first, all with override:false so shell env vars win):\n// 1. .env.local — project-local overrides (gitignored)\n// 2. ~/.workplane/.env — user global config written by workplane-setup\n// 3. .env — project defaults (committed)\nexport function loadLocalEnv(): void {\n if (envLoaded) {\n return;\n }\n\n dotenvConfig({ path: \".env.local\" });\n dotenvConfig({ path: join(homedir(), \".workplane\", \".env\") });\n dotenvConfig({ path: \".env\" });\n\n envLoaded = true;\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 { mkdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { drizzle as drizzlePg } from \"drizzle-orm/node-postgres\";\nimport type { NodePgDatabase } from \"drizzle-orm/node-postgres\";\nimport { drizzle as drizzleSqlite } from \"drizzle-orm/better-sqlite3\";\nimport Database from \"better-sqlite3\";\nimport { Pool } from \"pg\";\nimport { PgStore } from \"./pg-store.js\";\nimport { SqliteStore } from \"./sqlite-store.js\";\nimport * as pgSchema from \"./schema/pg.js\";\nimport * as sqliteSchema from \"./schema/sqlite.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\n\nexport type DrizzleDb = NodePgDatabase<typeof pgSchema>;\n\nexport interface StoreHandle {\n store: WorkplaneStore;\n close: () => Promise<void>;\n}\n\nconst pools = new Map<string, Pool>();\n\nexport function getPool(databaseUrl: string): Pool {\n const existing = pools.get(databaseUrl);\n if (existing) return existing;\n const pool = new Pool({ connectionString: databaseUrl });\n pools.set(databaseUrl, pool);\n return pool;\n}\n\nexport function getDrizzle(pool: Pool): DrizzleDb {\n return drizzlePg(pool, { schema: pgSchema });\n}\n\nfunction parseSqlitePath(url: string): string {\n const path = url.startsWith(\"sqlite://\") ? url.slice(\"sqlite://\".length) : url;\n if (!path) return join(homedir(), \".workplane\", \"workplane.db\");\n if (path.startsWith(\"~/\")) return join(homedir(), path.slice(2));\n return path;\n}\n\nexport function createStore(databaseUrl?: string): StoreHandle {\n const url = databaseUrl ?? \"\";\n\n if (url.startsWith(\"postgres://\") || url.startsWith(\"postgresql://\")) {\n const pool = getPool(url);\n return {\n store: new PgStore(getDrizzle(pool)),\n close: () => pool.end(),\n };\n }\n\n const filePath = parseSqlitePath(url);\n mkdirSync(dirname(filePath), { recursive: true });\n const sqlite = new Database(filePath);\n sqlite.pragma(\"journal_mode = WAL\");\n sqlite.pragma(\"synchronous = NORMAL\");\n const db = drizzleSqlite(sqlite, { schema: sqliteSchema });\n return {\n store: new SqliteStore(db),\n close: async () => { sqlite.close(); },\n };\n}\n","import { and, arrayContains, asc, desc, eq, gt, isNotNull, lte, sql } from \"drizzle-orm\";\nimport { makeId } from \"@workplane/core\";\nimport type { DrizzleDb } from \"./client.js\";\nimport { artifacts, nodes, runInputEvents, runLogs, runs, tasks, workplanRuns, workplanSchedules, workplanStepResults } from \"./schema/pg.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n CreateWorkplanRunInput,\n CreateWorkplanScheduleInput,\n NodePollResult,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunLogRecord,\n RunRecord,\n TaskRecord,\n UpdateWorkplanScheduleInput,\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n WorkplanStepResultRecord,\n} from \"@workplane/types\";\n\nfunction toTaskRecord(row: typeof tasks.$inferSelect): TaskRecord {\n return {\n id: row.id,\n kind: row.kind,\n adapter: row.adapter,\n payload: row.payload,\n requires: row.requires ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n };\n}\n\nfunction toRunRecord(row: typeof runs.$inferSelect): RunRecord {\n return {\n id: row.id,\n taskId: row.taskId,\n nodeId: row.nodeId,\n attempt: row.attempt,\n status: row.status as RunRecord[\"status\"],\n startedAt: row.startedAt?.toISOString() ?? null,\n endedAt: row.endedAt?.toISOString() ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toNodeRecord(row: typeof nodes.$inferSelect): NodeRecord {\n return {\n id: row.id,\n name: row.name,\n capabilities: row.capabilities ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.lastHeartbeatAt?.toISOString() ?? null,\n };\n}\n\nfunction toLogRecord(row: typeof runLogs.$inferSelect): RunLogRecord {\n return {\n id: row.id,\n runId: row.runId,\n stepName: row.stepName ?? null,\n stream: row.stream as RunLogRecord[\"stream\"],\n message: row.message,\n timestamp: row.timestamp.toISOString(),\n };\n}\n\nfunction toArtifactRecord(row: typeof artifacts.$inferSelect): ArtifactRecord {\n return {\n id: row.id,\n runId: row.runId,\n type: row.type,\n name: row.name,\n path: row.path,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt.toISOString(),\n };\n}\n\nfunction toInputEventRecord(row: typeof runInputEvents.$inferSelect): RunInputEvent {\n return {\n id: row.id,\n runId: row.runId,\n sequence: row.sequence,\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: row.payload,\n createdAt: row.createdAt.toISOString(),\n deliveredAt: row.deliveredAt?.toISOString() ?? null,\n };\n}\n\nfunction toScheduleRecord(row: typeof workplanSchedules.$inferSelect): WorkplanScheduleRecord {\n return {\n id: row.id,\n planId: row.planId,\n name: row.name,\n cronExpression: row.cronExpression,\n timezone: row.timezone,\n inputs: row.inputs ?? {},\n enabled: row.enabled,\n lastRunAt: row.lastRunAt?.toISOString() ?? null,\n nextRunAt: row.nextRunAt?.toISOString() ?? null,\n createdBy: row.createdBy ?? null,\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n };\n}\n\nfunction toWorkplanRunRecord(row: typeof workplanRuns.$inferSelect): WorkplanRunRecord {\n return {\n id: row.id,\n scheduleId: row.scheduleId ?? null,\n planId: row.planId,\n planName: row.planName,\n status: row.status as WorkplanRunRecord[\"status\"],\n idempotencyKey: row.idempotencyKey ?? null,\n createdAt: row.createdAt.toISOString(),\n endedAt: row.endedAt?.toISOString() ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toWorkplanStepResultRecord(row: typeof workplanStepResults.$inferSelect): WorkplanStepResultRecord {\n return {\n id: row.id,\n workplanRunId: row.workplanRunId,\n stepId: row.stepId,\n stepName: row.stepName,\n output: row.output ?? null,\n exitCode: row.exitCode ?? null,\n durationMs: row.durationMs ?? null,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt.toISOString(),\n };\n}\n\nfunction mapRawTask(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 mapRawRun(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\nexport class PgStore implements WorkplaneStore {\n constructor(private readonly db: DrizzleDb) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const taskId = makeId(\"task\");\n const [row] = await this.db.insert(tasks).values({\n id: taskId,\n kind: input.kind,\n adapter: input.adapter,\n payload: input.payload,\n requires: input.requires ?? [],\n status: \"queued\",\n }).returning();\n return toTaskRecord(row);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const rows = await this.db\n .select()\n .from(tasks)\n .where(status ? eq(tasks.status, status) : undefined)\n .orderBy(desc(tasks.createdAt))\n .limit(100);\n return rows.map(toTaskRecord);\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.select().from(tasks).where(eq(tasks.id, taskId));\n return row ? toTaskRecord(row) : null;\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const conditions = [];\n if (filters?.taskId) conditions.push(eq(runs.taskId, filters.taskId));\n if (filters?.status) conditions.push(eq(runs.status, filters.status));\n\n const rows = await this.db\n .select()\n .from(runs)\n .where(conditions.length ? and(...conditions) : undefined)\n .orderBy(desc(runs.createdAt))\n .limit(100);\n return rows.map(toRunRecord);\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const [row] = await this.db.select().from(runs).where(eq(runs.id, runId));\n return row ? toRunRecord(row) : null;\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const [existing] = await this.db.select().from(nodes).where(eq(nodes.name, name));\n\n if (existing) {\n const [updated] = await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: sql`now()`, updatedAt: sql`now()` })\n .where(eq(nodes.id, existing.id))\n .returning();\n return toNodeRecord(updated);\n }\n\n const nodeId = preferredId ?? makeId(\"node\");\n const [inserted] = await this.db.insert(nodes).values({\n id: nodeId, name, capabilities, status: \"online\", lastHeartbeatAt: sql`now()`,\n }).returning();\n return toNodeRecord(inserted);\n }\n\n async listNodes(): Promise<NodeRecord[]> {\n const rows = await this.db.select().from(nodes).orderBy(asc(nodes.name));\n return rows.map(toNodeRecord);\n }\n\n async getRunCancellationState(runId: string): Promise<{ runStatus: string; taskStatus: string } | null> {\n const [row] = await this.db\n .select({ runStatus: runs.status, taskStatus: tasks.status })\n .from(runs)\n .innerJoin(tasks, eq(tasks.id, runs.taskId))\n .where(eq(runs.id, runId));\n return row ?? null;\n }\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n return await this.db.transaction(async (tx) => {\n await tx.update(nodes)\n .set({\n capabilities,\n status: \"online\",\n lastHeartbeatAt: sql`now()`,\n updatedAt: sql`now()`,\n })\n .where(eq(nodes.id, nodeId));\n\n const [taskRow] = await tx\n .select()\n .from(tasks)\n .where(and(eq(tasks.status, \"queued\"), arrayContains(tasks.requires, capabilities)))\n .orderBy(asc(tasks.createdAt))\n .limit(1)\n .for(\"update\", { skipLocked: true });\n\n if (!taskRow) return null;\n\n const taskId = taskRow.id;\n\n const attemptResult = await tx.execute(sql`\n SELECT COALESCE(MAX(attempt), 0) AS max_attempt FROM runs WHERE task_id = ${taskId}\n `);\n const attempt = Number((attemptResult.rows[0] as Record<string, unknown>).max_attempt) + 1;\n\n const runId = makeId(\"run\");\n\n const runResult = await tx.execute(sql`\n INSERT INTO runs (id, task_id, node_id, attempt, status, started_at)\n VALUES (${runId}, ${taskId}, ${nodeId}, ${attempt}, 'assigned', now())\n RETURNING *\n `);\n\n await tx.execute(sql`\n UPDATE tasks SET status = 'assigned', updated_at = now() WHERE id = ${taskId}\n `);\n\n return {\n task: toTaskRecord(taskRow),\n run: mapRawRun(runResult.rows[0] as Record<string, unknown>),\n };\n });\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n return await this.db.transaction(async (tx) => {\n const currentResult = await tx.execute(sql`\n SELECT r.*, t.status AS task_status\n FROM runs r JOIN tasks t ON t.id = r.task_id\n WHERE r.id = ${runId}\n FOR UPDATE\n `);\n\n if (currentResult.rows.length === 0) return null;\n\n const currentRow = currentResult.rows[0] as Record<string, unknown>;\n const currentTaskStatus = String(currentRow.task_status);\n\n if (currentTaskStatus === \"cancelled\" && status !== \"cancelled\") {\n return mapRawRun(currentRow);\n }\n\n const isTerminal = status === \"succeeded\" || status === \"failed\" || status === \"cancelled\";\n const [updatedRun] = await tx.update(runs)\n .set(isTerminal\n ? { status, error: error ?? null, endedAt: sql`now()`, updatedAt: sql`now()` }\n : { status, error: error ?? null, updatedAt: sql`now()` })\n .where(eq(runs.id, runId))\n .returning();\n\n if (!updatedRun) return null;\n\n const nextTaskStatus = isTerminal ? status : \"running\";\n if (currentTaskStatus !== \"cancelled\" || status === \"cancelled\") {\n await tx.update(tasks)\n .set({ status: nextTaskStatus, updatedAt: sql`now()` })\n .where(eq(tasks.id, updatedRun.taskId));\n }\n\n return toRunRecord(updatedRun);\n });\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n if (logs.length === 0) return 0;\n await this.db.insert(runLogs).values(\n logs.map((log) => ({\n runId,\n stepName: log.stepName ?? null,\n stream: log.stream,\n message: log.message,\n })),\n );\n return logs.length;\n }\n\n async getRunLogs(runId: string, afterId?: number): Promise<RunLogRecord[]> {\n const rows = await this.db\n .select()\n .from(runLogs)\n .where(afterId === undefined ? eq(runLogs.runId, runId) : and(eq(runLogs.runId, runId), gt(runLogs.id, afterId)))\n .orderBy(asc(runLogs.timestamp), asc(runLogs.id));\n return rows.map(toLogRecord);\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const artifactId = makeId(\"artifact\");\n const [row] = await this.db.insert(artifacts).values({\n id: artifactId,\n runId,\n type: input.type,\n name: input.name,\n path: input.path,\n metadata: input.metadata ?? null,\n }).returning();\n return toArtifactRecord(row);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const rows = await this.db\n .select()\n .from(artifacts)\n .where(eq(artifacts.runId, runId))\n .orderBy(asc(artifacts.createdAt));\n return rows.map(toArtifactRecord);\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.update(tasks)\n .set({ status: \"queued\", updatedAt: sql`now()` })\n .where(and(eq(tasks.id, taskId), eq(tasks.status, \"failed\")))\n .returning();\n return row ? toTaskRecord(row) : null;\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n return await this.db.transaction(async (tx) => {\n const taskResult = await tx.execute(sql`\n SELECT * FROM tasks WHERE id = ${taskId} FOR UPDATE\n `);\n\n if (taskResult.rows.length === 0) return null;\n\n const taskRow = taskResult.rows[0] as Record<string, unknown>;\n const taskStatus = String(taskRow.status);\n\n if (taskStatus === \"succeeded\" || taskStatus === \"failed\" || taskStatus === \"cancelled\") {\n return null;\n }\n\n if (taskStatus === \"assigned\" || taskStatus === \"running\") {\n const runResult = await tx.execute(sql`\n SELECT * FROM runs WHERE task_id = ${taskId} ORDER BY attempt DESC LIMIT 1 FOR UPDATE\n `);\n\n if (runResult.rows.length > 0) {\n const runRow = runResult.rows[0] as Record<string, unknown>;\n const runStatus = String(runRow.status);\n if (runStatus !== \"succeeded\" && runStatus !== \"failed\" && runStatus !== \"cancelled\") {\n await tx.execute(sql`\n UPDATE runs SET status = 'cancelled', ended_at = now(), updated_at = now(),\n error = COALESCE(error, 'task cancelled')\n WHERE id = ${runRow.id}\n `);\n }\n }\n }\n\n const [updatedTask] = await tx.update(tasks)\n .set({ status: \"cancelled\", updatedAt: sql`now()` })\n .where(eq(tasks.id, taskId))\n .returning();\n\n return toTaskRecord(updatedTask);\n });\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n return await this.db.transaction(async (tx) => {\n const seqResult = await tx.execute(sql`\n SELECT COALESCE(MAX(sequence), 0) + 1 AS next_seq FROM run_input_events WHERE run_id = ${runId}\n `);\n const sequence = Number((seqResult.rows[0] as Record<string, unknown>).next_seq);\n\n const [inserted] = await tx.insert(runInputEvents)\n .values({ runId, sequence, kind: input.kind, payload: input.payload })\n .returning();\n\n return toInputEventRecord(inserted);\n });\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const rows = await this.db\n .select()\n .from(runInputEvents)\n .where(and(eq(runInputEvents.runId, runId), gt(runInputEvents.sequence, afterSequence)))\n .orderBy(asc(runInputEvents.sequence));\n return rows.map(toInputEventRecord);\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.db.update(runInputEvents)\n .set({ deliveredAt: sql`now()` })\n .where(and(eq(runInputEvents.runId, runId), eq(runInputEvents.sequence, sequence)));\n }\n\n async createWorkplanSchedule(input: CreateWorkplanScheduleInput): Promise<WorkplanScheduleRecord> {\n const [row] = await this.db.insert(workplanSchedules).values({\n id: makeId(\"sched\"),\n planId: input.planId,\n name: input.name,\n cronExpression: input.cronExpression,\n timezone: input.timezone,\n inputs: input.inputs ?? {},\n enabled: input.enabled ?? true,\n nextRunAt: input.enabled === false ? null : input.nextRunAt ? new Date(input.nextRunAt) : null,\n createdBy: input.createdBy ?? null,\n }).returning();\n return toScheduleRecord(row);\n }\n\n async listWorkplanSchedules(enabled?: boolean): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(enabled === undefined ? undefined : eq(workplanSchedules.enabled, enabled))\n .orderBy(desc(workplanSchedules.createdAt));\n return rows.map(toScheduleRecord);\n }\n\n async getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null> {\n const [row] = await this.db.select().from(workplanSchedules).where(eq(workplanSchedules.id, scheduleId));\n return row ? toScheduleRecord(row) : null;\n }\n\n async updateWorkplanSchedule(\n scheduleId: string,\n input: UpdateWorkplanScheduleInput,\n ): Promise<WorkplanScheduleRecord | null> {\n const patch: Partial<typeof workplanSchedules.$inferInsert> = {};\n if (input.name !== undefined) patch.name = input.name;\n if (input.cronExpression !== undefined) patch.cronExpression = input.cronExpression;\n if (input.timezone !== undefined) patch.timezone = input.timezone;\n if (input.inputs !== undefined) patch.inputs = input.inputs;\n if (input.enabled !== undefined) patch.enabled = input.enabled;\n if (input.nextRunAt !== undefined) patch.nextRunAt = input.nextRunAt ? new Date(input.nextRunAt) : null;\n patch.updatedAt = new Date();\n\n const [row] = await this.db.update(workplanSchedules)\n .set(patch)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning();\n return row ? toScheduleRecord(row) : null;\n }\n\n async deleteWorkplanSchedule(scheduleId: string): Promise<boolean> {\n return await this.db.transaction(async (tx) => {\n await tx.update(workplanRuns)\n .set({ scheduleId: null })\n .where(eq(workplanRuns.scheduleId, scheduleId));\n\n const deleted = await tx.delete(workplanSchedules)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning({ id: workplanSchedules.id });\n return deleted.length > 0;\n });\n }\n\n async listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]> {\n const asOfDate = new Date(asOf);\n const rows = await this.db.select().from(workplanSchedules)\n .where(and(\n eq(workplanSchedules.enabled, true),\n isNotNull(workplanSchedules.nextRunAt),\n lte(workplanSchedules.nextRunAt, asOfDate),\n ))\n .orderBy(asc(workplanSchedules.nextRunAt));\n return rows.map(toScheduleRecord);\n }\n\n async markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void> {\n await this.db.update(workplanSchedules)\n .set({\n lastRunAt: new Date(lastRunAt),\n nextRunAt: new Date(nextRunAt),\n updatedAt: sql`now()`,\n })\n .where(eq(workplanSchedules.id, scheduleId));\n }\n\n async tryCreateWorkplanRun(input: CreateWorkplanRunInput): Promise<WorkplanRunRecord | null> {\n try {\n const [row] = await this.db.insert(workplanRuns).values({\n id: makeId(\"wprun\"),\n scheduleId: input.scheduleId ?? null,\n planId: input.planId,\n planName: input.planName,\n status: \"running\",\n idempotencyKey: input.idempotencyKey ?? null,\n }).returning();\n return toWorkplanRunRecord(row);\n } catch (err) {\n const code = (err as { code?: string }).code;\n if (input.idempotencyKey && code === \"23505\") {\n return null;\n }\n throw err;\n }\n }\n\n async updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.update(workplanRuns)\n .set({\n status,\n error: error ?? null,\n endedAt: endedAt ? new Date(endedAt) : status !== \"running\" ? new Date() : null,\n })\n .where(eq(workplanRuns.id, runId))\n .returning();\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async getWorkplanRun(runId: string): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.select().from(workplanRuns).where(eq(workplanRuns.id, runId));\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async listWorkplanRuns(filters?: { scheduleId?: string }): Promise<WorkplanRunRecord[]> {\n const rows = await this.db.select().from(workplanRuns)\n .where(filters?.scheduleId ? eq(workplanRuns.scheduleId, filters.scheduleId) : undefined)\n .orderBy(desc(workplanRuns.createdAt))\n .limit(100);\n return rows.map(toWorkplanRunRecord);\n }\n\n async appendWorkplanStepResults(\n runId: string,\n steps: WorkplanStepResultInput[],\n ): Promise<WorkplanStepResultRecord[]> {\n if (steps.length === 0) return [];\n const rows = await this.db.insert(workplanStepResults).values(\n steps.map((step) => ({\n id: makeId(\"wpstep\"),\n workplanRunId: runId,\n stepId: step.stepId,\n stepName: step.stepName,\n output: step.output ?? null,\n exitCode: step.exitCode ?? null,\n durationMs: step.durationMs ?? null,\n metadata: step.metadata ?? null,\n })),\n ).returning();\n return rows.map(toWorkplanStepResultRecord);\n }\n\n async listWorkplanStepResults(runId: string): Promise<WorkplanStepResultRecord[]> {\n const rows = await this.db.select().from(workplanStepResults)\n .where(eq(workplanStepResults.workplanRunId, runId))\n .orderBy(asc(workplanStepResults.createdAt));\n return rows.map(toWorkplanStepResultRecord);\n }\n}\n","import { isNull, sql } from \"drizzle-orm\";\nimport { bigint, bigserial, boolean, index, integer, jsonb, pgTable, text, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\n\nexport const tasks = pgTable(\"tasks\", {\n id: text(\"id\").primaryKey(),\n kind: text(\"kind\").notNull(),\n adapter: text(\"adapter\").notNull(),\n payload: jsonb(\"payload\").$type<Record<string, unknown>>().notNull(),\n requires: text(\"requires\").array().notNull().default(sql`'{}'::text[]`),\n status: text(\"status\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n statusCreatedAtIdx: index(\"idx_tasks_status_created_at\").on(table.status, table.createdAt),\n}));\n\nexport const nodes = pgTable(\"nodes\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n capabilities: text(\"capabilities\").array().notNull().default(sql`'{}'::text[]`),\n status: text(\"status\").notNull().default(\"online\"),\n lastHeartbeatAt: timestamp(\"last_heartbeat_at\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const runs = pgTable(\"runs\", {\n id: text(\"id\").primaryKey(),\n taskId: text(\"task_id\").notNull().references(() => tasks.id),\n nodeId: text(\"node_id\").notNull().references(() => nodes.id),\n attempt: integer(\"attempt\").notNull(),\n status: text(\"status\").notNull(),\n startedAt: timestamp(\"started_at\", { withTimezone: true }),\n endedAt: timestamp(\"ended_at\", { withTimezone: true }),\n error: text(\"error\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n taskIdIdx: index(\"idx_runs_task_id\").on(table.taskId),\n nodeIdIdx: index(\"idx_runs_node_id\").on(table.nodeId),\n}));\n\nexport const runLogs = pgTable(\"run_logs\", {\n id: bigserial(\"id\", { mode: \"number\" }).primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n stepName: text(\"step_name\"),\n stream: text(\"stream\").notNull(),\n message: text(\"message\").notNull(),\n timestamp: timestamp(\"timestamp\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdTimestampIdx: index(\"idx_run_logs_run_id_timestamp\").on(table.runId, table.timestamp),\n}));\n\nexport const artifacts = pgTable(\"artifacts\", {\n id: text(\"id\").primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n type: text(\"type\").notNull(),\n name: text(\"name\").notNull(),\n path: text(\"path\").notNull(),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdIdx: index(\"idx_artifacts_run_id\").on(table.runId),\n}));\n\nexport const workplanSchedules = pgTable(\"workplan_schedules\", {\n id: text(\"id\").primaryKey(),\n planId: text(\"plan_id\").notNull(),\n name: text(\"name\").notNull(),\n cronExpression: text(\"cron_expression\").notNull(),\n timezone: text(\"timezone\").notNull(),\n inputs: jsonb(\"inputs\").$type<Record<string, unknown>>().notNull().default({}),\n enabled: boolean(\"enabled\").notNull().default(true),\n lastRunAt: timestamp(\"last_run_at\", { withTimezone: true }),\n nextRunAt: timestamp(\"next_run_at\", { withTimezone: true }),\n createdBy: text(\"created_by\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n dueIdx: index(\"idx_workplan_schedules_due\").on(table.nextRunAt),\n}));\n\nexport const workplanRuns = pgTable(\"workplan_runs\", {\n id: text(\"id\").primaryKey(),\n scheduleId: text(\"schedule_id\").references(() => workplanSchedules.id),\n planId: text(\"plan_id\").notNull(),\n planName: text(\"plan_name\").notNull(),\n status: text(\"status\").notNull().default(\"running\"),\n idempotencyKey: text(\"idempotency_key\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\", { withTimezone: true }),\n error: text(\"error\"),\n}, (table) => ({\n scheduleIdx: index(\"idx_workplan_runs_schedule_id\").on(table.scheduleId),\n idempotencyUnique: uniqueIndex(\"idx_workplan_runs_idempotency\").on(table.idempotencyKey),\n}));\n\nexport const workplanStepResults = pgTable(\"workplan_step_results\", {\n id: text(\"id\").primaryKey(),\n workplanRunId: text(\"workplan_run_id\").notNull().references(() => workplanRuns.id),\n stepId: text(\"step_id\").notNull(),\n stepName: text(\"step_name\").notNull(),\n output: text(\"output\"),\n exitCode: integer(\"exit_code\"),\n durationMs: integer(\"duration_ms\"),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => ({\n runIdx: index(\"idx_workplan_step_results_run_id\").on(table.workplanRunId),\n}));\n\nexport const runInputEvents = pgTable(\"run_input_events\", {\n id: bigserial(\"id\", { mode: \"number\" }).primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n sequence: bigint(\"sequence\", { mode: \"number\" }).notNull(),\n kind: text(\"kind\").notNull(),\n payload: jsonb(\"payload\").$type<Record<string, unknown>>().notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n deliveredAt: timestamp(\"delivered_at\", { withTimezone: true }),\n}, (table) => ({\n runSequenceUniqueIdx: uniqueIndex(\"idx_run_input_events_run_sequence\").on(table.runId, table.sequence),\n undeliveredIdx: index(\"idx_run_input_events_undelivered\").on(table.runId, table.sequence).where(isNull(table.deliveredAt)),\n}));\n","import { and, asc, desc, eq, gt, lte, sql } from \"drizzle-orm\";\nimport type { BetterSQLite3Database } from \"drizzle-orm/better-sqlite3\";\nimport type BetterSqlite3Client from \"better-sqlite3\";\nimport { makeId } from \"@workplane/core\";\nimport { artifacts, nodes, runInputEvents, runLogs, runs, tasks, workplanRuns, workplanSchedules, workplanStepResults } from \"./schema/sqlite.js\";\nimport type * as sqliteSchema from \"./schema/sqlite.js\";\nimport type { WorkplaneStore } from \"./store-interface.js\";\nimport type {\n AppendInputEventInput,\n ArtifactInput,\n ArtifactRecord,\n CreateTaskInput,\n CreateWorkplanRunInput,\n CreateWorkplanScheduleInput,\n NodePollResult,\n NodeRecord,\n RunInputEvent,\n RunLogInput,\n RunLogRecord,\n RunRecord,\n TaskRecord,\n UpdateWorkplanScheduleInput,\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n WorkplanStepResultRecord,\n} from \"@workplane/types\";\n\ntype SqliteDb = BetterSQLite3Database<typeof sqliteSchema> & { $client: BetterSqlite3Client.Database };\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n// Drizzle-typed mappers for simple CRUD methods (camelCase, text timestamps)\n\nfunction toTaskRecord(row: typeof tasks.$inferSelect): TaskRecord {\n return {\n id: row.id,\n kind: row.kind,\n adapter: row.adapter,\n payload: row.payload,\n requires: row.requires ?? [],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toRunRecord(row: typeof runs.$inferSelect): RunRecord {\n return {\n id: row.id,\n taskId: row.taskId,\n nodeId: row.nodeId,\n attempt: row.attempt,\n status: row.status as RunRecord[\"status\"],\n startedAt: row.startedAt ?? null,\n endedAt: row.endedAt ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toNodeRecord(row: typeof nodes.$inferSelect): NodeRecord {\n return {\n id: row.id,\n name: row.name,\n capabilities: row.capabilities ?? [],\n status: row.status as NodeRecord[\"status\"],\n lastHeartbeatAt: row.lastHeartbeatAt ?? null,\n };\n}\n\nfunction toLogRecord(row: typeof runLogs.$inferSelect): RunLogRecord {\n return {\n id: row.id,\n runId: row.runId,\n stepName: row.stepName ?? null,\n stream: row.stream as RunLogRecord[\"stream\"],\n message: row.message,\n timestamp: row.timestamp,\n };\n}\n\nfunction toArtifactRecord(row: typeof artifacts.$inferSelect): ArtifactRecord {\n return {\n id: row.id,\n runId: row.runId,\n type: row.type,\n name: row.name,\n path: row.path,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt,\n };\n}\n\nfunction toInputEventRecord(row: typeof runInputEvents.$inferSelect): RunInputEvent {\n return {\n id: row.id,\n runId: row.runId,\n sequence: row.sequence,\n kind: row.kind as RunInputEvent[\"kind\"],\n payload: row.payload,\n createdAt: row.createdAt,\n deliveredAt: row.deliveredAt ?? null,\n };\n}\n\nfunction toScheduleRecord(row: typeof workplanSchedules.$inferSelect): WorkplanScheduleRecord {\n return {\n id: row.id,\n planId: row.planId,\n name: row.name,\n cronExpression: row.cronExpression,\n timezone: row.timezone,\n inputs: row.inputs ?? {},\n enabled: row.enabled,\n lastRunAt: row.lastRunAt ?? null,\n nextRunAt: row.nextRunAt ?? null,\n createdBy: row.createdBy ?? null,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toWorkplanRunRecord(row: typeof workplanRuns.$inferSelect): WorkplanRunRecord {\n return {\n id: row.id,\n scheduleId: row.scheduleId ?? null,\n planId: row.planId,\n planName: row.planName,\n status: row.status as WorkplanRunRecord[\"status\"],\n idempotencyKey: row.idempotencyKey ?? null,\n createdAt: row.createdAt,\n endedAt: row.endedAt ?? null,\n error: row.error ?? null,\n };\n}\n\nfunction toWorkplanStepResultRecord(row: typeof workplanStepResults.$inferSelect): WorkplanStepResultRecord {\n return {\n id: row.id,\n workplanRunId: row.workplanRunId,\n stepId: row.stepId,\n stepName: row.stepName,\n output: row.output ?? null,\n exitCode: row.exitCode ?? null,\n durationMs: row.durationMs ?? null,\n metadata: row.metadata ?? null,\n createdAt: row.createdAt,\n };\n}\n\n// Raw-row mappers for transaction methods that use $client directly.\n// better-sqlite3 rejects async transaction callbacks so we use the sync\n// $client API with prepared statements for the 4 methods that need atomicity.\n\ninterface RawTaskRow {\n id: string; kind: string; adapter: string;\n payload: string; requires: string; status: string;\n created_at: string; updated_at: string;\n}\n\ninterface RawRunRow {\n id: string; task_id: string; node_id: string; attempt: number; status: string;\n started_at: string | null; ended_at: string | null; error: string | null;\n created_at: string; updated_at: string;\n}\n\nfunction mapRawTask(row: RawTaskRow): TaskRecord {\n return {\n id: row.id, kind: row.kind, adapter: row.adapter,\n payload: JSON.parse(row.payload) as Record<string, unknown>,\n requires: JSON.parse(row.requires) as string[],\n status: row.status as TaskRecord[\"status\"],\n createdAt: row.created_at, updatedAt: row.updated_at,\n };\n}\n\nfunction mapRawRun(row: RawRunRow): RunRecord {\n return {\n id: row.id, taskId: row.task_id, nodeId: row.node_id,\n attempt: row.attempt, status: row.status as RunRecord[\"status\"],\n startedAt: row.started_at ?? null, endedAt: row.ended_at ?? null,\n error: row.error ?? null,\n };\n}\n\nexport class SqliteStore implements WorkplaneStore {\n constructor(private readonly db: SqliteDb) {}\n\n async createTask(input: CreateTaskInput): Promise<TaskRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(tasks).values({\n id: makeId(\"task\"),\n kind: input.kind,\n adapter: input.adapter,\n payload: input.payload,\n requires: input.requires ?? [],\n status: \"queued\",\n createdAt: now,\n updatedAt: now,\n }).returning();\n return toTaskRecord(row);\n }\n\n async listTasks(status?: TaskRecord[\"status\"]): Promise<TaskRecord[]> {\n const rows = await this.db.select().from(tasks)\n .where(status ? eq(tasks.status, status) : undefined)\n .orderBy(desc(tasks.createdAt)).limit(100);\n return rows.map(toTaskRecord);\n }\n\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.select().from(tasks).where(eq(tasks.id, taskId));\n return row ? toTaskRecord(row) : null;\n }\n\n async listRuns(filters?: { taskId?: string; status?: RunRecord[\"status\"] }): Promise<RunRecord[]> {\n const conds = [];\n if (filters?.taskId) conds.push(eq(runs.taskId, filters.taskId));\n if (filters?.status) conds.push(eq(runs.status, filters.status));\n const rows = await this.db.select().from(runs)\n .where(conds.length ? and(...conds) : undefined)\n .orderBy(desc(runs.createdAt)).limit(100);\n return rows.map(toRunRecord);\n }\n\n async getRun(runId: string): Promise<RunRecord | null> {\n const [row] = await this.db.select().from(runs).where(eq(runs.id, runId));\n return row ? toRunRecord(row) : null;\n }\n\n async registerNode(name: string, capabilities: string[], preferredId?: string): Promise<NodeRecord> {\n const now = nowIso();\n const [existing] = await this.db.select().from(nodes).where(eq(nodes.name, name));\n if (existing) {\n const [updated] = await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: now, updatedAt: now })\n .where(eq(nodes.id, existing.id)).returning();\n return toNodeRecord(updated);\n }\n const [inserted] = await this.db.insert(nodes).values({\n id: preferredId ?? makeId(\"node\"), name, capabilities,\n status: \"online\", lastHeartbeatAt: now, createdAt: now, updatedAt: now,\n }).returning();\n return toNodeRecord(inserted);\n }\n\n async listNodes(): Promise<NodeRecord[]> {\n const rows = await this.db.select().from(nodes).orderBy(asc(nodes.name));\n return rows.map(toNodeRecord);\n }\n\n async getRunCancellationState(runId: string): Promise<{ runStatus: string; taskStatus: string } | null> {\n const [row] = await this.db\n .select({ runStatus: runs.status, taskStatus: tasks.status })\n .from(runs).innerJoin(tasks, eq(tasks.id, runs.taskId)).where(eq(runs.id, runId));\n return row ? { runStatus: row.runStatus, taskStatus: row.taskStatus ?? \"\" } : null;\n }\n\n // Transaction methods use this.db.$client directly because better-sqlite3\n // rejects async callbacks — all operations inside must be synchronous.\n\n async pollNode(nodeId: string, capabilities: string[]): Promise<NodePollResult | null> {\n const now = nowIso();\n await this.db.update(nodes)\n .set({ capabilities, status: \"online\", lastHeartbeatAt: now, updatedAt: now })\n .where(eq(nodes.id, nodeId));\n\n const raw = this.db.$client;\n return raw.transaction(() => {\n const capSet = new Set(capabilities);\n const queued = raw.prepare(\n \"SELECT * FROM tasks WHERE status = 'queued' ORDER BY created_at ASC\",\n ).all() as RawTaskRow[];\n\n const task = queued.find((t) =>\n (JSON.parse(t.requires) as string[]).every((r) => capSet.has(r)),\n );\n if (!task) return null;\n\n const { max_attempt } = raw.prepare(\n \"SELECT COALESCE(MAX(attempt), 0) AS max_attempt FROM runs WHERE task_id = ?\",\n ).get(task.id) as { max_attempt: number };\n\n const runId = makeId(\"run\");\n raw.prepare(\n \"INSERT INTO runs (id, task_id, node_id, attempt, status, started_at, created_at, updated_at) VALUES (?, ?, ?, ?, 'assigned', ?, ?, ?)\",\n ).run(runId, task.id, nodeId, max_attempt + 1, now, now, now);\n\n raw.prepare(\"UPDATE tasks SET status = 'assigned', updated_at = ? WHERE id = ?\").run(now, task.id);\n\n return {\n task: mapRawTask(task),\n run: mapRawRun(raw.prepare(\"SELECT * FROM runs WHERE id = ?\").get(runId) as RawRunRow),\n };\n })();\n }\n\n async updateRunStatus(runId: string, status: RunRecord[\"status\"], error?: string): Promise<RunRecord | null> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n const current = raw.prepare(\n \"SELECT r.*, t.status AS task_status FROM runs r JOIN tasks t ON t.id = r.task_id WHERE r.id = ?\",\n ).get(runId) as (RawRunRow & { task_status: string }) | undefined;\n if (!current) return null;\n\n if (current.task_status === \"cancelled\" && status !== \"cancelled\") {\n return mapRawRun(current);\n }\n\n const now = nowIso();\n const isTerminal = status === \"succeeded\" || status === \"failed\" || status === \"cancelled\";\n if (isTerminal) {\n raw.prepare(\n \"UPDATE runs SET status = ?, error = ?, ended_at = ?, updated_at = ? WHERE id = ?\",\n ).run(status, error ?? null, now, now, runId);\n } else {\n raw.prepare(\n \"UPDATE runs SET status = ?, error = ?, updated_at = ? WHERE id = ?\",\n ).run(status, error ?? null, now, runId);\n }\n\n const updatedRun = raw.prepare(\"SELECT * FROM runs WHERE id = ?\").get(runId) as RawRunRow;\n const nextTaskStatus = isTerminal ? status : \"running\";\n if (current.task_status !== \"cancelled\" || status === \"cancelled\") {\n raw.prepare(\"UPDATE tasks SET status = ?, updated_at = ? WHERE id = ?\").run(\n nextTaskStatus, now, updatedRun.task_id,\n );\n }\n return mapRawRun(updatedRun);\n })();\n }\n\n async appendRunLogs(runId: string, logs: RunLogInput[]): Promise<number> {\n if (logs.length === 0) return 0;\n const now = nowIso();\n await this.db.insert(runLogs).values(\n logs.map((log) => ({\n runId, stepName: log.stepName ?? null,\n stream: log.stream, message: log.message, timestamp: now,\n })),\n );\n return logs.length;\n }\n\n async getRunLogs(runId: string, afterId?: number): Promise<RunLogRecord[]> {\n const rows = await this.db.select().from(runLogs)\n .where(afterId === undefined ? eq(runLogs.runId, runId) : and(eq(runLogs.runId, runId), gt(runLogs.id, afterId)))\n .orderBy(asc(runLogs.timestamp), asc(runLogs.id));\n return rows.map(toLogRecord);\n }\n\n async createArtifact(runId: string, input: ArtifactInput): Promise<ArtifactRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(artifacts).values({\n id: makeId(\"artifact\"), runId, type: input.type, name: input.name,\n path: input.path, metadata: input.metadata ?? null, createdAt: now,\n }).returning();\n return toArtifactRecord(row);\n }\n\n async listRunArtifacts(runId: string): Promise<ArtifactRecord[]> {\n const rows = await this.db.select().from(artifacts)\n .where(eq(artifacts.runId, runId)).orderBy(asc(artifacts.createdAt));\n return rows.map(toArtifactRecord);\n }\n\n async retryTask(taskId: string): Promise<TaskRecord | null> {\n const [row] = await this.db.update(tasks)\n .set({ status: \"queued\", updatedAt: nowIso() })\n .where(and(eq(tasks.id, taskId), eq(tasks.status, \"failed\"))).returning();\n return row ? toTaskRecord(row) : null;\n }\n\n async cancelTask(taskId: string): Promise<TaskRecord | null> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n const taskRow = raw.prepare(\"SELECT * FROM tasks WHERE id = ?\").get(taskId) as RawTaskRow | undefined;\n if (!taskRow) return null;\n\n const terminal = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n if (terminal.has(taskRow.status)) return null;\n\n const now = nowIso();\n if (taskRow.status === \"assigned\" || taskRow.status === \"running\") {\n const latestRun = raw.prepare(\n \"SELECT * FROM runs WHERE task_id = ? ORDER BY attempt DESC LIMIT 1\",\n ).get(taskId) as RawRunRow | undefined;\n\n if (latestRun && !terminal.has(latestRun.status)) {\n raw.prepare(\n \"UPDATE runs SET status = 'cancelled', ended_at = ?, updated_at = ?, error = COALESCE(error, 'task cancelled') WHERE id = ?\",\n ).run(now, now, latestRun.id);\n }\n }\n\n raw.prepare(\"UPDATE tasks SET status = 'cancelled', updated_at = ? WHERE id = ?\").run(now, taskId);\n return mapRawTask(raw.prepare(\"SELECT * FROM tasks WHERE id = ?\").get(taskId) as RawTaskRow);\n })();\n }\n\n async appendInputEvent(runId: string, input: AppendInputEventInput): Promise<RunInputEvent> {\n const raw = this.db.$client;\n const now = nowIso();\n const event = raw.transaction(() => {\n const { next_seq } = raw.prepare(\n \"SELECT COALESCE(MAX(sequence), 0) + 1 AS next_seq FROM run_input_events WHERE run_id = ?\",\n ).get(runId) as { next_seq: number };\n\n raw.prepare(\n \"INSERT INTO run_input_events (run_id, sequence, kind, payload, created_at) VALUES (?, ?, ?, ?, ?)\",\n ).run(runId, next_seq, input.kind, JSON.stringify(input.payload), now);\n\n return raw.prepare(\n \"SELECT * FROM run_input_events WHERE run_id = ? AND sequence = ?\",\n ).get(runId, next_seq) as {\n id: number; run_id: string; sequence: number; kind: string;\n payload: string; created_at: string; delivered_at: string | null;\n };\n })();\n\n return {\n id: event.id, runId: event.run_id, sequence: event.sequence,\n kind: event.kind as RunInputEvent[\"kind\"],\n payload: JSON.parse(event.payload) as Record<string, unknown>,\n createdAt: event.created_at, deliveredAt: event.delivered_at ?? null,\n };\n }\n\n async getInputEvents(runId: string, afterSequence: number): Promise<RunInputEvent[]> {\n const rows = await this.db.select().from(runInputEvents)\n .where(and(eq(runInputEvents.runId, runId), gt(runInputEvents.sequence, afterSequence)))\n .orderBy(asc(runInputEvents.sequence));\n return rows.map(toInputEventRecord);\n }\n\n async markInputDelivered(runId: string, sequence: number): Promise<void> {\n await this.db.update(runInputEvents)\n .set({ deliveredAt: nowIso() })\n .where(and(eq(runInputEvents.runId, runId), eq(runInputEvents.sequence, sequence)));\n }\n\n async createWorkplanSchedule(input: CreateWorkplanScheduleInput): Promise<WorkplanScheduleRecord> {\n const now = nowIso();\n const [row] = await this.db.insert(workplanSchedules).values({\n id: makeId(\"sched\"),\n planId: input.planId,\n name: input.name,\n cronExpression: input.cronExpression,\n timezone: input.timezone,\n inputs: input.inputs ?? {},\n enabled: input.enabled ?? true,\n nextRunAt: input.enabled === false ? null : input.nextRunAt ?? null,\n createdBy: input.createdBy ?? null,\n createdAt: now,\n updatedAt: now,\n }).returning();\n return toScheduleRecord(row);\n }\n\n async listWorkplanSchedules(enabled?: boolean): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(enabled === undefined ? undefined : eq(workplanSchedules.enabled, enabled))\n .orderBy(desc(workplanSchedules.createdAt));\n return rows.map(toScheduleRecord);\n }\n\n async getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null> {\n const [row] = await this.db.select().from(workplanSchedules).where(eq(workplanSchedules.id, scheduleId));\n return row ? toScheduleRecord(row) : null;\n }\n\n async updateWorkplanSchedule(\n scheduleId: string,\n input: UpdateWorkplanScheduleInput,\n ): Promise<WorkplanScheduleRecord | null> {\n const patch: Partial<typeof workplanSchedules.$inferInsert> = { updatedAt: nowIso() };\n if (input.name !== undefined) patch.name = input.name;\n if (input.cronExpression !== undefined) patch.cronExpression = input.cronExpression;\n if (input.timezone !== undefined) patch.timezone = input.timezone;\n if (input.inputs !== undefined) patch.inputs = input.inputs;\n if (input.enabled !== undefined) patch.enabled = input.enabled;\n if (input.nextRunAt !== undefined) patch.nextRunAt = input.nextRunAt;\n\n const [row] = await this.db.update(workplanSchedules)\n .set(patch)\n .where(eq(workplanSchedules.id, scheduleId))\n .returning();\n return row ? toScheduleRecord(row) : null;\n }\n\n async deleteWorkplanSchedule(scheduleId: string): Promise<boolean> {\n const raw = this.db.$client;\n return raw.transaction(() => {\n raw.prepare(\"UPDATE workplan_runs SET schedule_id = NULL WHERE schedule_id = ?\").run(scheduleId);\n const result = raw.prepare(\"DELETE FROM workplan_schedules WHERE id = ?\").run(scheduleId);\n return (result.changes ?? 0) > 0;\n })();\n }\n\n async listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]> {\n const rows = await this.db.select().from(workplanSchedules)\n .where(and(\n eq(workplanSchedules.enabled, true),\n sql`${workplanSchedules.nextRunAt} IS NOT NULL`,\n lte(workplanSchedules.nextRunAt, asOf),\n ))\n .orderBy(asc(workplanSchedules.nextRunAt));\n return rows.map(toScheduleRecord);\n }\n\n async markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void> {\n await this.db.update(workplanSchedules)\n .set({ lastRunAt, nextRunAt, updatedAt: nowIso() })\n .where(eq(workplanSchedules.id, scheduleId));\n }\n\n async tryCreateWorkplanRun(input: CreateWorkplanRunInput): Promise<WorkplanRunRecord | null> {\n const now = nowIso();\n try {\n const [row] = await this.db.insert(workplanRuns).values({\n id: makeId(\"wprun\"),\n scheduleId: input.scheduleId ?? null,\n planId: input.planId,\n planName: input.planName,\n status: \"running\",\n idempotencyKey: input.idempotencyKey ?? null,\n createdAt: now,\n }).returning();\n return toWorkplanRunRecord(row);\n } catch (err) {\n if (input.idempotencyKey && err instanceof Error && err.message.includes(\"UNIQUE constraint failed\")) {\n return null;\n }\n throw err;\n }\n }\n\n async updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.update(workplanRuns)\n .set({\n status,\n error: error ?? null,\n endedAt: endedAt ?? (status !== \"running\" ? nowIso() : null),\n })\n .where(eq(workplanRuns.id, runId))\n .returning();\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async getWorkplanRun(runId: string): Promise<WorkplanRunRecord | null> {\n const [row] = await this.db.select().from(workplanRuns).where(eq(workplanRuns.id, runId));\n return row ? toWorkplanRunRecord(row) : null;\n }\n\n async listWorkplanRuns(filters?: { scheduleId?: string }): Promise<WorkplanRunRecord[]> {\n const rows = await this.db.select().from(workplanRuns)\n .where(filters?.scheduleId ? eq(workplanRuns.scheduleId, filters.scheduleId) : undefined)\n .orderBy(desc(workplanRuns.createdAt))\n .limit(100);\n return rows.map(toWorkplanRunRecord);\n }\n\n async appendWorkplanStepResults(\n runId: string,\n steps: WorkplanStepResultInput[],\n ): Promise<WorkplanStepResultRecord[]> {\n if (steps.length === 0) return [];\n const now = nowIso();\n const rows = await this.db.insert(workplanStepResults).values(\n steps.map((step) => ({\n id: makeId(\"wpstep\"),\n workplanRunId: runId,\n stepId: step.stepId,\n stepName: step.stepName,\n output: step.output ?? null,\n exitCode: step.exitCode ?? null,\n durationMs: step.durationMs ?? null,\n metadata: step.metadata ?? null,\n createdAt: now,\n })),\n ).returning();\n return rows.map(toWorkplanStepResultRecord);\n }\n\n async listWorkplanStepResults(runId: string): Promise<WorkplanStepResultRecord[]> {\n const rows = await this.db.select().from(workplanStepResults)\n .where(eq(workplanStepResults.workplanRunId, runId))\n .orderBy(asc(workplanStepResults.createdAt));\n return rows.map(toWorkplanStepResultRecord);\n }\n}\n","import { isNull, sql } from \"drizzle-orm\";\nimport { index, integer, sqliteTable, text, uniqueIndex } from \"drizzle-orm/sqlite-core\";\n\nconst nowDefault = sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`;\n\nexport const tasks = sqliteTable(\"tasks\", {\n id: text(\"id\").primaryKey(),\n kind: text(\"kind\").notNull(),\n adapter: text(\"adapter\").notNull(),\n payload: text(\"payload\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n requires: text(\"requires\", { mode: \"json\" }).$type<string[]>().notNull().default([]),\n status: text(\"status\").notNull(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n statusCreatedAtIdx: index(\"idx_tasks_status_created_at\").on(table.status, table.createdAt),\n}));\n\nexport const nodes = sqliteTable(\"nodes\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n capabilities: text(\"capabilities\", { mode: \"json\" }).$type<string[]>().notNull().default([]),\n status: text(\"status\").notNull().default(\"online\"),\n lastHeartbeatAt: text(\"last_heartbeat_at\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n});\n\nexport const runs = sqliteTable(\"runs\", {\n id: text(\"id\").primaryKey(),\n taskId: text(\"task_id\").notNull().references(() => tasks.id),\n nodeId: text(\"node_id\").notNull().references(() => nodes.id),\n attempt: integer(\"attempt\").notNull(),\n status: text(\"status\").notNull(),\n startedAt: text(\"started_at\"),\n endedAt: text(\"ended_at\"),\n error: text(\"error\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n taskIdIdx: index(\"idx_runs_task_id\").on(table.taskId),\n nodeIdIdx: index(\"idx_runs_node_id\").on(table.nodeId),\n}));\n\nexport const runLogs = sqliteTable(\"run_logs\", {\n id: integer(\"id\").primaryKey({ autoIncrement: true }),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n stepName: text(\"step_name\"),\n stream: text(\"stream\").notNull(),\n message: text(\"message\").notNull(),\n timestamp: text(\"timestamp\").notNull().default(nowDefault),\n}, (table) => ({\n runIdTimestampIdx: index(\"idx_run_logs_run_id_timestamp\").on(table.runId, table.timestamp),\n}));\n\nexport const artifacts = sqliteTable(\"artifacts\", {\n id: text(\"id\").primaryKey(),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n type: text(\"type\").notNull(),\n name: text(\"name\").notNull(),\n path: text(\"path\").notNull(),\n metadata: text(\"metadata\", { mode: \"json\" }).$type<Record<string, unknown>>(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n}, (table) => ({\n runIdIdx: index(\"idx_artifacts_run_id\").on(table.runId),\n}));\n\nexport const workplanSchedules = sqliteTable(\"workplan_schedules\", {\n id: text(\"id\").primaryKey(),\n planId: text(\"plan_id\").notNull(),\n name: text(\"name\").notNull(),\n cronExpression: text(\"cron_expression\").notNull(),\n timezone: text(\"timezone\").notNull(),\n inputs: text(\"inputs\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n enabled: integer(\"enabled\", { mode: \"boolean\" }).notNull().default(true),\n lastRunAt: text(\"last_run_at\"),\n nextRunAt: text(\"next_run_at\"),\n createdBy: text(\"created_by\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n updatedAt: text(\"updated_at\").notNull().default(nowDefault),\n}, (table) => ({\n dueIdx: index(\"idx_workplan_schedules_due\").on(table.nextRunAt),\n}));\n\nexport const workplanRuns = sqliteTable(\"workplan_runs\", {\n id: text(\"id\").primaryKey(),\n scheduleId: text(\"schedule_id\").references(() => workplanSchedules.id),\n planId: text(\"plan_id\").notNull(),\n planName: text(\"plan_name\").notNull(),\n status: text(\"status\").notNull().default(\"running\"),\n idempotencyKey: text(\"idempotency_key\"),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n endedAt: text(\"ended_at\"),\n error: text(\"error\"),\n}, (table) => ({\n scheduleIdx: index(\"idx_workplan_runs_schedule_id\").on(table.scheduleId),\n idempotencyUnique: uniqueIndex(\"idx_workplan_runs_idempotency\").on(table.idempotencyKey),\n}));\n\nexport const workplanStepResults = sqliteTable(\"workplan_step_results\", {\n id: text(\"id\").primaryKey(),\n workplanRunId: text(\"workplan_run_id\").notNull().references(() => workplanRuns.id),\n stepId: text(\"step_id\").notNull(),\n stepName: text(\"step_name\").notNull(),\n output: text(\"output\"),\n exitCode: integer(\"exit_code\"),\n durationMs: integer(\"duration_ms\"),\n metadata: text(\"metadata\", { mode: \"json\" }).$type<Record<string, unknown>>(),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n}, (table) => ({\n runIdx: index(\"idx_workplan_step_results_run_id\").on(table.workplanRunId),\n}));\n\nexport const runInputEvents = sqliteTable(\"run_input_events\", {\n id: integer(\"id\").primaryKey({ autoIncrement: true }),\n runId: text(\"run_id\").notNull().references(() => runs.id),\n sequence: integer(\"sequence\").notNull(),\n kind: text(\"kind\").notNull(),\n payload: text(\"payload\", { mode: \"json\" }).$type<Record<string, unknown>>().notNull().default({}),\n createdAt: text(\"created_at\").notNull().default(nowDefault),\n deliveredAt: text(\"delivered_at\"),\n}, (table) => ({\n runSequenceUniqueIdx: uniqueIndex(\"idx_run_input_events_run_sequence\").on(table.runId, table.sequence),\n undeliveredIdx: index(\"idx_run_input_events_undelivered\").on(table.runId, table.sequence).where(isNull(table.deliveredAt)),\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 \"@workplane/types\";\nimport type { WorkplaneStore } from \"@workplane/db\";\n\nexport class VanillaWorkflows implements ServerWorkflows {\n constructor(private readonly store: WorkplaneStore) {}\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 \"@workplane/types\";\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 { z } from \"zod\";\n\nexport const createScheduleSchema = z.object({\n planId: z.string().min(1),\n name: z.string().min(1),\n cronExpression: z.string().min(1),\n timezone: z.string().min(1),\n inputs: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n});\n\nexport const updateScheduleSchema = z.object({\n name: z.string().min(1).optional(),\n cronExpression: z.string().min(1).optional(),\n timezone: z.string().min(1).optional(),\n inputs: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n});\n\nexport type CreateScheduleBody = z.infer<typeof createScheduleSchema>;\nexport type UpdateScheduleBody = z.infer<typeof updateScheduleSchema>;\n\nexport function validateCreateSchedule(body: unknown): CreateScheduleBody {\n return createScheduleSchema.parse(body);\n}\n\nexport function validateUpdateSchedule(body: unknown): UpdateScheduleBody {\n return updateScheduleSchema.parse(body);\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface CodeReviewOptions {\n repoPath?: string;\n model?: string;\n branch?: string;\n}\n\nexport function codeReviewPlan(opts: CodeReviewOptions = {}): Workplan {\n const { repoPath = \".\", model = \"claude-haiku-4-5-20251001\", branch } = opts;\n const diffCmd = branch ? `git diff ${branch}..HEAD` : \"git diff HEAD~1\";\n\n return {\n id: \"code-review\",\n name: \"Code Review\",\n steps: [\n {\n id: \"diff\",\n name: \"Git Diff\",\n adapter: \"shell\",\n provider: \"shell\",\n payload: { command: diffCmd, cwd: repoPath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: \"ollama\",\n provider: \"ollama\",\n model: \"llama3\",\n payload: { prompt: \"Summarize these code changes concisely:\\n{{prevOutput}}\" },\n output: { dest: \"next\" },\n },\n {\n id: \"critique\",\n name: \"Critique\",\n adapter: \"anthropic\",\n provider: \"anthropic\",\n model,\n payload: { prompt: \"Review this summary for correctness, security issues, and code quality:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface HelloOptions {\n message?: string;\n}\n\nexport function helloPlan(opts: HelloOptions = {}): Workplan {\n const message = opts.message ?? \"hello from workplane\";\n return {\n id: \"hello\",\n name: \"Hello\",\n description: \"Single shell echo — useful for scheduler smoke tests\",\n steps: [\n {\n id: \"echo\",\n name: \"Echo\",\n adapter: \"shell\",\n provider: \"shell\",\n payload: { command: `echo ${JSON.stringify(message)}` },\n },\n ],\n };\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface SummarizeFileOptions {\n filePath: string;\n provider?: string;\n model?: string;\n}\n\nexport function summarizeFilePlan(opts: SummarizeFileOptions): Workplan {\n const { filePath, provider = \"ollama\", model = \"llama3\" } = opts;\n\n return {\n id: \"summarize-file\",\n name: \"Summarize File\",\n steps: [\n {\n id: \"read\",\n name: \"Read File\",\n adapter: \"file\",\n provider: \"file\",\n payload: { path: filePath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: provider,\n provider,\n model,\n payload: { prompt: \"Summarize the following file content concisely:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { SkillEntry } from \"../types.js\";\nimport { codeReviewPlan } from \"./code-review.js\";\nimport { helloPlan } from \"./hello.js\";\nimport { summarizeFilePlan } from \"./summarize-file.js\";\n\nexport class SkillRegistry {\n private readonly skills = new Map<string, SkillEntry>();\n\n register(entry: SkillEntry): void {\n this.skills.set(entry.name, entry);\n }\n\n get(name: string): SkillEntry | undefined {\n return this.skills.get(name);\n }\n\n list(): SkillEntry[] {\n return Array.from(this.skills.values());\n }\n}\n\nexport function createDefaultRegistry(): SkillRegistry {\n const registry = new SkillRegistry();\n\n registry.register({\n name: \"hello\",\n description: \"Shell echo (scheduler smoke test)\",\n inputSchema: {\n type: \"object\",\n properties: {\n message: { type: \"string\", description: \"Text to echo\", default: \"hello from workplane\" },\n },\n },\n buildPlan: (opts) =>\n helloPlan({\n message: typeof opts.message === \"string\" ? opts.message : undefined,\n }),\n });\n\n registry.register({\n name: \"code-review\",\n description: \"Git diff → local summarize (ollama) → frontier critique (anthropic)\",\n inputSchema: {\n type: \"object\",\n properties: {\n repo: { type: \"string\", description: \"Path to the git repository\" },\n model: { type: \"string\", description: \"Model used for the local summarize step\" },\n branch: { type: \"string\", description: \"Branch to diff against\" },\n },\n },\n buildPlan: (opts) =>\n codeReviewPlan({\n repoPath: typeof opts.repo === \"string\" ? opts.repo : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n branch: typeof opts.branch === \"string\" ? opts.branch : undefined,\n }),\n });\n\n registry.register({\n name: \"summarize-file\",\n description: \"Read file → summarize with configurable provider (default: ollama)\",\n inputSchema: {\n type: \"object\",\n properties: {\n file: { type: \"string\", description: \"Path of the file to summarize\" },\n provider: { type: \"string\", description: \"Model provider\", default: \"ollama\" },\n model: { type: \"string\", description: \"Model name\" },\n },\n required: [\"file\"],\n },\n buildPlan: (opts) => {\n const filePath = typeof opts.file === \"string\" ? opts.file : \"\";\n if (!filePath) throw new Error(\"--file is required for summarize-file\");\n return summarizeFilePlan({\n filePath,\n provider: typeof opts.provider === \"string\" ? opts.provider : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n });\n },\n });\n\n return registry;\n}\n\nexport function listSkills(registry: SkillRegistry): void {\n for (const skill of registry.list()) {\n process.stdout.write(` ${skill.name.padEnd(20)} ${skill.description}\\n`);\n }\n}\n","export function applyTemplate(payload: Record<string, unknown>, prevOutput: string): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(payload).map(([k, v]) => [\n k,\n typeof v === \"string\" ? v.replaceAll(\"{{prevOutput}}\", prevOutput) : v,\n ]),\n );\n}\n","import type { Workplan, WorkplanResult, WorkplanRunner, WorkplanRunContext, StepResult, WorkplanStep } from \"./types.js\";\nimport { applyTemplate } from \"./template.js\";\n\nconst INLINE_PROVIDERS = new Set([\"anthropic\", \"openai\", \"ollama\", \"shell\", \"file\"]);\n\nasync function runInlineStep(step: WorkplanStep, prompt: string): Promise<string> {\n const provider = step.provider!;\n if (provider === \"anthropic\") {\n const { runAnthropicStep } = await import(\"./providers/anthropic.js\");\n return runAnthropicStep({ model: step.model ?? \"claude-haiku-4-5-20251001\", prompt });\n }\n if (provider === \"openai\") {\n const { runOpenAIStep } = await import(\"./providers/openai.js\");\n return runOpenAIStep({ model: step.model ?? \"gpt-4o-mini\", prompt });\n }\n if (provider === \"ollama\") {\n const { runOllamaStep } = await import(\"./providers/ollama.js\");\n return runOllamaStep({ model: step.model ?? \"llama3\", prompt });\n }\n if (provider === \"shell\") {\n const { runShellStep } = await import(\"./providers/shell.js\");\n return runShellStep({\n command: String(step.payload.command ?? \"\"),\n cwd: typeof step.payload.cwd === \"string\" ? step.payload.cwd : undefined,\n });\n }\n if (provider === \"file\") {\n const { runFileStep } = await import(\"./providers/file.js\");\n return runFileStep({ path: String(step.payload.path ?? \"\") });\n }\n throw new Error(`unknown inline provider: ${provider}`);\n}\n\nexport class SequentialWorkplanRunner implements WorkplanRunner {\n async run(plan: Workplan, ctx: WorkplanRunContext): Promise<WorkplanResult> {\n const results: StepResult[] = [];\n let prevOutput = \"\";\n let planSucceeded = true;\n\n for (const step of plan.steps) {\n const payload = prevOutput ? applyTemplate(step.payload, prevOutput) : step.payload;\n const prompt = typeof payload.prompt === \"string\" ? payload.prompt : \"\";\n const start = Date.now();\n let output = \"\";\n let exitCode = 0;\n\n try {\n if (step.provider && INLINE_PROVIDERS.has(step.provider)) {\n output = await runInlineStep({ ...step, payload }, prompt);\n } else {\n const node = await ctx.resolveNode(step.requires ?? [], step.provider);\n const result = await node.execute({ ...step, payload });\n output = result.output;\n exitCode = result.exitCode;\n }\n } catch (err) {\n exitCode = 1;\n output = err instanceof Error ? err.message : String(err);\n planSucceeded = false;\n\n const stepResult: StepResult = {\n stepId: step.id,\n output,\n exitCode,\n durationMs: Date.now() - start,\n };\n results.push(stepResult);\n ctx.emitResult(step.id, step.name, output);\n\n if (!step.continueOnError) {\n return {\n planId: plan.id,\n status: \"step_failed\",\n steps: results,\n succeeded: false,\n };\n }\n prevOutput = \"\";\n continue;\n }\n\n const dest = step.output?.dest ?? \"stdout\";\n const stepResult: StepResult = {\n stepId: step.id,\n output,\n exitCode,\n durationMs: Date.now() - start,\n };\n results.push(stepResult);\n\n if (dest === \"stdout\" || dest === \"artifact\") {\n ctx.emitResult(step.id, step.name, output);\n prevOutput = \"\";\n } else if (dest === \"next\") {\n prevOutput = output;\n }\n }\n\n return {\n planId: plan.id,\n status: planSucceeded ? \"completed\" : \"failed\",\n steps: results,\n succeeded: planSucceeded,\n };\n }\n}\n","export function printStepResult(stepName: string, output: string): void {\n process.stdout.write(`=== step: ${stepName} ===\\n${output}\\n\\n`);\n}\n","import type { NodeHandle, WorkplanRunContext, WorkplanStep, StepResult } from \"./types.js\";\nimport { printStepResult } from \"./sinks/stdout.js\";\n\nexport interface LocalWorkplanContextOptions {\n serverUrl?: string;\n nodeToken?: string;\n}\n\nclass WorkplaneNodeHandle implements NodeHandle {\n constructor(\n private readonly serverUrl: string,\n private readonly nodeToken: string,\n ) {}\n\n async execute(step: WorkplanStep): Promise<StepResult> {\n const start = Date.now();\n const taskRes = await fetch(`${this.serverUrl}/tasks`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${this.nodeToken}`,\n },\n body: JSON.stringify({\n kind: \"workplan.step\",\n adapter: step.adapter,\n payload: step.payload,\n requires: step.requires ?? [],\n }),\n });\n\n if (!taskRes.ok) {\n throw new Error(`failed to submit step ${step.id}: ${taskRes.status}`);\n }\n\n const task = (await taskRes.json()) as { id: string };\n const output = await this.pollUntilDone(task.id);\n return { stepId: step.id, output, exitCode: 0, durationMs: Date.now() - start };\n }\n\n private async pollUntilDone(taskId: string): Promise<string> {\n const terminalStatuses = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n for (;;) {\n await new Promise((r) => setTimeout(r, 1000));\n const res = await fetch(`${this.serverUrl}/tasks/${taskId}`, {\n headers: { authorization: `Bearer ${this.nodeToken}` },\n });\n const task = (await res.json()) as { status: string; payload?: Record<string, unknown> };\n if (terminalStatuses.has(task.status)) {\n if (task.status !== \"succeeded\") {\n throw new Error(`step task ${taskId} ended with status: ${task.status}`);\n }\n return typeof task.payload?.output === \"string\" ? task.payload.output : \"\";\n }\n }\n }\n}\n\nexport class LocalWorkplanContext implements WorkplanRunContext {\n private readonly serverUrl: string;\n private readonly nodeToken: string;\n\n constructor(opts: LocalWorkplanContextOptions = {}) {\n this.serverUrl = opts.serverUrl ?? process.env.WORKPLANE_SERVER_URL ?? \"http://localhost:8787\";\n this.nodeToken = opts.nodeToken ?? process.env.WORKPLANE_NODE_TOKEN ?? \"\";\n }\n\n async resolveNode(_requires: string[], _provider?: string): Promise<NodeHandle> {\n return new WorkplaneNodeHandle(this.serverUrl, this.nodeToken);\n }\n\n emitResult(_stepId: string, stepName: string, output: string): void {\n printStepResult(stepName, output);\n }\n}\n","import { CronExpressionParser } from \"cron-parser\";\nimport type { WorkplanSchedule } from \"./types.js\";\n\nexport class ScheduleBuilder {\n static nextRunAt(cronExpression: string, timezone: string): string {\n const expr = CronExpressionParser.parse(cronExpression, { tz: timezone });\n return expr.next().toISOString() ?? new Date().toISOString();\n }\n\n static withNextRunAt(schedule: WorkplanSchedule): WorkplanSchedule {\n return {\n ...schedule,\n nextRunAt: ScheduleBuilder.nextRunAt(schedule.cronExpression, schedule.timezone),\n };\n }\n}\n","import type {\n WorkplanRunRecord,\n WorkplanScheduleRecord,\n WorkplanStepResultInput,\n} from \"../../types/src/index.js\";\nimport { ScheduleBuilder } from \"./schedule-builder.js\";\nimport { SequentialWorkplanRunner } from \"./runner.js\";\nimport type { Workplan, WorkplanRunContext, WorkplanRunner } from \"./types.js\";\n\nexport interface ScheduleStore {\n listDueWorkplanSchedules(asOf: string): Promise<WorkplanScheduleRecord[]>;\n getWorkplanSchedule(scheduleId: string): Promise<WorkplanScheduleRecord | null>;\n markWorkplanScheduleRan(scheduleId: string, lastRunAt: string, nextRunAt: string): Promise<void>;\n tryCreateWorkplanRun(input: {\n scheduleId?: string;\n planId: string;\n planName: string;\n idempotencyKey?: string;\n }): Promise<WorkplanRunRecord | null>;\n updateWorkplanRun(\n runId: string,\n status: WorkplanRunRecord[\"status\"],\n error?: string,\n endedAt?: string,\n ): Promise<WorkplanRunRecord | null>;\n appendWorkplanStepResults(runId: string, steps: WorkplanStepResultInput[]): Promise<unknown>;\n}\n\nexport interface PlanResolver {\n resolve(planId: string, inputs: Record<string, unknown>): Workplan;\n}\n\nexport interface ExecuteScheduleOptions {\n advanceSchedule?: boolean;\n idempotencyKey?: string;\n}\n\nexport class WorkplanScheduler {\n constructor(\n private readonly store: ScheduleStore,\n private readonly resolver: PlanResolver,\n private readonly contextFactory: () => WorkplanRunContext,\n private readonly runner: WorkplanRunner = new SequentialWorkplanRunner(),\n ) {}\n\n async tick(now = new Date()): Promise<WorkplanRunRecord[]> {\n const due = await this.store.listDueWorkplanSchedules(now.toISOString());\n const launched: WorkplanRunRecord[] = [];\n\n for (const schedule of due) {\n if (!schedule.nextRunAt) {\n continue;\n }\n const run = await this.executeSchedule(schedule, {\n scheduledTime: schedule.nextRunAt,\n advanceSchedule: true,\n });\n if (run) {\n launched.push(run);\n }\n }\n\n return launched;\n }\n\n async runNow(scheduleId: string): Promise<WorkplanRunRecord | null> {\n const schedule = await this.store.getWorkplanSchedule(scheduleId);\n if (!schedule) {\n return null;\n }\n\n return this.executeSchedule(schedule, {\n scheduledTime: new Date().toISOString(),\n advanceSchedule: false,\n });\n }\n\n async executeSchedule(\n schedule: WorkplanScheduleRecord,\n options: ExecuteScheduleOptions & { scheduledTime: string },\n ): Promise<WorkplanRunRecord | null> {\n const idempotencyKey = options.idempotencyKey\n ?? (options.advanceSchedule ? `${schedule.id}:${options.scheduledTime}` : undefined);\n\n const run = await this.store.tryCreateWorkplanRun({\n scheduleId: schedule.id,\n planId: schedule.planId,\n planName: schedule.name,\n idempotencyKey,\n });\n if (!run) {\n return null;\n }\n\n if (options.advanceSchedule) {\n const nextRunAt = ScheduleBuilder.nextRunAt(schedule.cronExpression, schedule.timezone);\n await this.store.markWorkplanScheduleRan(schedule.id, options.scheduledTime, nextRunAt);\n }\n\n try {\n const plan = this.resolver.resolve(schedule.planId, schedule.inputs);\n const result = await this.runner.run(plan, this.contextFactory());\n const stepNames = new Map(plan.steps.map((step) => [step.id, step.name]));\n const stepInputs: WorkplanStepResultInput[] = result.steps.map((step) => ({\n stepId: step.stepId,\n stepName: stepNames.get(step.stepId) ?? step.stepId,\n output: step.output,\n exitCode: step.exitCode,\n durationMs: step.durationMs,\n metadata: step.metadata,\n }));\n await this.store.appendWorkplanStepResults(run.id, stepInputs);\n\n const error = result.succeeded ? undefined : result.steps.at(-1)?.output;\n return await this.store.updateWorkplanRun(run.id, result.status, error);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return await this.store.updateWorkplanRun(run.id, \"failed\", message);\n }\n }\n}\n","import { createDefaultRegistry } from \"@workplane/agent-skills\";\nimport type { WorkplaneStore } from \"@workplane/db\";\nimport { LocalWorkplanContext, ScheduleBuilder, WorkplanScheduler } from \"@workplane/workplans\";\nimport type { CreateWorkplanScheduleInput, SkillSummary, UpdateWorkplanScheduleInput } from \"@workplane/types\";\n\nconst skillRegistry = createDefaultRegistry();\n\nexport function listSkillSummaries(): SkillSummary[] {\n return skillRegistry.list().map((skill) => ({\n name: skill.name,\n description: skill.description,\n inputSchema: skill.inputSchema ?? { type: \"object\", properties: {} },\n }));\n}\n\nexport function createWorkplanScheduler(store: WorkplaneStore): WorkplanScheduler {\n return new WorkplanScheduler(\n store,\n {\n resolve(planId, inputs) {\n const skill = skillRegistry.get(planId);\n if (!skill) {\n throw new Error(`unknown workplan skill: ${planId}`);\n }\n return skill.buildPlan(inputs);\n },\n },\n () => new LocalWorkplanContext(),\n );\n}\n\nexport function withScheduleTiming(\n input: CreateWorkplanScheduleInput,\n): CreateWorkplanScheduleInput {\n if (input.enabled === false) {\n return { ...input, nextRunAt: null };\n }\n return {\n ...input,\n nextRunAt: ScheduleBuilder.nextRunAt(input.cronExpression, input.timezone),\n };\n}\n\nexport function withUpdatedScheduleTiming(\n current: { cronExpression: string; timezone: string; enabled: boolean },\n input: UpdateWorkplanScheduleInput,\n): UpdateWorkplanScheduleInput {\n const cronExpression = input.cronExpression ?? current.cronExpression;\n const timezone = input.timezone ?? current.timezone;\n const enabled = input.enabled ?? current.enabled;\n\n if (!enabled) {\n return { ...input, nextRunAt: null };\n }\n\n if (input.cronExpression !== undefined || input.timezone !== undefined || input.enabled === true) {\n return {\n ...input,\n nextRunAt: ScheduleBuilder.nextRunAt(cronExpression, timezone),\n };\n }\n\n return input;\n}\n\nexport function isSchedulerEnabled(): boolean {\n return process.env.WORKPLANE_SCHEDULER_ENABLED !== \"false\";\n}\n\nexport function schedulerIntervalMs(): number {\n const raw = process.env.WORKPLANE_SCHEDULER_INTERVAL_MS;\n const parsed = raw ? Number(raw) : 60_000;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 60_000;\n}\n\nexport function startSchedulerLoop(scheduler: WorkplanScheduler): () => void {\n const intervalMs = schedulerIntervalMs();\n const timer = setInterval(() => {\n void scheduler.tick().catch((error) => {\n process.stderr.write(`workplan scheduler tick failed: ${String(error)}\\n`);\n });\n }, intervalMs);\n timer.unref();\n\n void scheduler.tick().catch((error) => {\n process.stderr.write(`workplan scheduler initial tick failed: ${String(error)}\\n`);\n });\n\n process.stdout.write(`workplan scheduler enabled (interval ${intervalMs}ms)\\n`);\n return () => clearInterval(timer);\n}\n\nexport function listKnownPlanIds(): string[] {\n return skillRegistry.list().map((skill) => skill.name);\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { getRequestBearer, isAuthorizedBearer } from \"@workplane/core\";\n\nexport type RouteAuth = \"public\" | \"node\" | \"operator\" | \"read\";\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 === \"read\") {\n // Nodes read /runs/:id and /tasks/:id with their own token, so either token opens a protected read.\n const accepted = [config.operatorToken, config.nodeToken].some((token) => token && bearer === token);\n if (!accepted) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"unauthorized read 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 interface RouteAuthOptions {\n /** When true, read (GET) routes that are otherwise public require the operator or node token. */\n protectReads?: boolean;\n}\n\nexport function routeAuthFor(method: string, pathname: string, options: RouteAuthOptions = {}): RouteAuth {\n const auth = baseRouteAuthFor(method, pathname);\n if (options.protectReads && auth === \"public\" && method === \"GET\" && pathname !== \"/healthz\") {\n return \"read\";\n }\n return auth;\n}\n\nfunction baseRouteAuthFor(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 // Nodes poll it with their token; the operator console reads it too, so either token opens it.\n return \"read\";\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 if (method === \"POST\" && pathname === \"/schedules\") {\n return \"operator\";\n }\n if (method === \"PATCH\" && /^\\/schedules\\/[^/]+$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"DELETE\" && /^\\/schedules\\/[^/]+$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && /^\\/schedules\\/[^/]+\\/run$/.test(pathname)) {\n return \"operator\";\n }\n if (method === \"POST\" && pathname === \"/schedules/tick\") {\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 if (auth === \"read\") {\n return Boolean(config.operatorToken || config.nodeToken);\n }\n return false;\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\n\nexport interface CorsConfig {\n allowAll: boolean;\n origins: Set<string>;\n}\n\n/** Parses `WORKPLANE_CORS_ORIGINS` (comma-separated origins, or `*`). Unset or empty means CORS is off. */\nexport function parseCorsOrigins(value: string | undefined): CorsConfig | null {\n const entries = (value ?? \"\")\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n if (entries.length === 0) {\n return null;\n }\n return { allowAll: entries.includes(\"*\"), origins: new Set(entries) };\n}\n\n/**\n * Adds CORS headers for allowed origins and answers preflight requests.\n * Returns true when the request was fully handled (a preflight).\n */\nexport function applyCors(req: IncomingMessage, res: ServerResponse, config: CorsConfig | null): boolean {\n if (!config) {\n return false;\n }\n const origin = req.headers.origin;\n const allowed = typeof origin === \"string\" && (config.allowAll || config.origins.has(origin));\n if (allowed) {\n res.setHeader(\"access-control-allow-origin\", config.allowAll ? \"*\" : origin);\n res.setHeader(\"vary\", \"Origin\");\n }\n if (req.method === \"OPTIONS\" && typeof req.headers[\"access-control-request-method\"] === \"string\") {\n if (allowed) {\n res.setHeader(\"access-control-allow-methods\", \"GET,POST,PATCH,DELETE,OPTIONS\");\n res.setHeader(\"access-control-allow-headers\", \"authorization,content-type\");\n res.setHeader(\"access-control-max-age\", \"600\");\n }\n res.statusCode = allowed ? 204 : 403;\n res.end();\n return true;\n }\n return false;\n}\n"],"mappings":"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","names":["DBOS","homedir","join","sql","sql","and","asc","desc","eq","gt","lte","sql","artifacts","nodes","runInputEvents","runLogs","runs","tasks","workplanRuns","workplanSchedules","workplanStepResults","isNull","sql","index","integer","text","uniqueIndex","toTaskRecord","toRunRecord","toNodeRecord","toLogRecord","toArtifactRecord","toInputEventRecord","toScheduleRecord","toWorkplanRunRecord","toWorkplanStepResultRecord","mapRawRun","tasks","eq","desc","runs","and","nodes","asc","runLogs","gt","artifacts","runInputEvents","workplanSchedules","sql","lte","workplanRuns","workplanStepResults","join","homedir","z","z","runAnthropicStep","runOpenAIStep","runOllamaStep","runShellStep","runFileStep","stepResult","createDbosWorkflows","registerDbosSchedulerTick","tasks","runs","artifacts","nodes"]}
|