(request)
| 492 | }, |
| 493 | |
| 494 | async createTask(request) { |
| 495 | const isolationStrategy = request.isolationStrategy ?? { type: "head" } |
| 496 | const taskId = request.taskId ?? createId() |
| 497 | const slug = request.slug ?? createSlug() |
| 498 | const createdAt = request.createdAt ?? now() |
| 499 | const title = request.title ?? "New task" |
| 500 | const reposDoc = await loadDoc(storage, "code:repos") |
| 501 | const taskDoc = await loadDoc(storage, `code:task:${taskId}`) |
| 502 | |
| 503 | try { |
| 504 | const repoMap = findRepoMap(reposDoc, request.repoId) |
| 505 | if (!repoMap) throw new Error(`Repository ${request.repoId} not found`) |
| 506 | |
| 507 | const meta = taskDoc.getMap("task:meta") |
| 508 | const existingMetaId = meta.get("id") |
| 509 | if (typeof existingMetaId === "string" && existingMetaId && existingMetaId !== taskId) { |
| 510 | throw new Error(`Task document ${taskId} has mismatched metadata id ${existingMetaId}`) |
| 511 | } |
| 512 | |
| 513 | if (!existingMetaId) { |
| 514 | taskDoc.transact(() => { |
| 515 | setMapObject(meta, { |
| 516 | id: taskId, |
| 517 | repoId: request.repoId, |
| 518 | slug, |
| 519 | title, |
| 520 | description: request.input, |
| 521 | isolationStrategy, |
| 522 | sessionIds: {}, |
| 523 | createdBy: request.createdBy, |
| 524 | createdAt, |
| 525 | updatedAt: createdAt, |
| 526 | ...(request.enabledMcpServerIds && request.enabledMcpServerIds.length > 0 |
| 527 | ? { enabledMcpServerIds: request.enabledMcpServerIds } |
| 528 | : {}), |
| 529 | }) |
| 530 | |
| 531 | if (!hasOrderedItem(taskDoc, "task:deviceEnvironments", request.deviceId)) { |
| 532 | pushOrderedItem(taskDoc, "task:deviceEnvironments", (request.deviceEnvironment ?? { |
| 533 | id: request.deviceId, |
| 534 | deviceId: request.deviceId, |
| 535 | setupComplete: true, |
| 536 | createdAt, |
| 537 | lastUsedAt: createdAt, |
| 538 | }) as unknown as Record<string, unknown> & { id: string }) |
| 539 | } |
| 540 | if (request.setupEvent) { |
| 541 | pushOrderedItem(taskDoc, "task:events", { |
| 542 | id: request.setupEvent.eventId ?? createId(), |
| 543 | type: "setup_environment", |
| 544 | status: "completed", |
| 545 | createdAt: request.setupEvent.createdAt ?? createdAt, |
| 546 | completedAt: request.setupEvent.completedAt ?? request.setupEvent.createdAt ?? createdAt, |
| 547 | userInput: "Environment setup", |
| 548 | worktreeId: request.setupEvent.worktreeId, |
| 549 | deviceId: request.setupEvent.deviceId, |
| 550 | workingDir: request.setupEvent.workingDir, |
| 551 | setupOutput: request.setupEvent.setupOutput, |
nothing calls this directly
no test coverage detected