import { ApprovalRequestId, type AssistantDeliveryMode, CommandId, MessageId, type OrchestrationEvent, type OrchestrationProposedPlanId, CheckpointRef, isToolLifecycleItemType, RuntimeTaskId, ThreadId, TurnId, WorkUnitId, type OrchestrationThread, type OrchestrationThreadActivity, type ProviderRuntimeEvent,} from "@t3tools/contracts";import { Cache, Cause, Duration, Effect, Layer, Option, Ref, Stream } from "effect";import { makeDrainableWorker } from "@t3tools/shared/DrainableWorker"; import { ProviderService } from "../../provider/Services/ProviderService.ts";import { ProjectionTurnRepository } from "../../persistence/Services/ProjectionTurns.ts";import { ProjectionTurnRepositoryLive } from "../../persistence/Layers/ProjectionTurns.ts";import { resolveThreadWorkspaceCwd } from "../../checkpointing/Utils.ts";import { isGitRepository } from "../../git/isRepo.ts";import { OrchestrationEngineService } from "../Services/OrchestrationEngine.ts";import { ProviderRuntimeIngestionService, type ProviderRuntimeIngestionShape,} from "../Services/ProviderRuntimeIngestion.ts"; const providerTurnKey = (threadId: ThreadId, turnId: TurnId) => `${threadId}:${turnId}`;const providerCommandId = (event: ProviderRuntimeEvent, tag: string): CommandId => CommandId.makeUnsafe(`provider:${event.eventId}:${tag}:${crypto.randomUUID()}`);const rootWorkUnitIdForTurn = (threadId: ThreadId, turnId: TurnId): WorkUnitId => WorkUnitId.makeUnsafe(`wu:${threadId}:turn:${turnId}:root`);const taskWorkUnitIdForTurn = (threadId: ThreadId, turnId: TurnId, taskId: string): WorkUnitId => WorkUnitId.makeUnsafe(`wu:${threadId}:turn:${turnId}:task:${taskId}`); const DEFAULT_ASSISTANT_DELIVERY_MODE: AssistantDeliveryMode = "buffered";const TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY = 10_000;const TURN_MESSAGE_IDS_BY_TURN_TTL = Duration.minutes(120);const BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_CACHE_CAPACITY = 20_000;const BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_TTL = Duration.minutes(120);const BUFFERED_PROPOSED_PLAN_BY_ID_CACHE_CAPACITY = 10_000;const BUFFERED_PROPOSED_PLAN_BY_ID_TTL = Duration.minutes(120);const MAX_BUFFERED_ASSISTANT_CHARS = 24_000;const STRICT_PROVIDER_LIFECYCLE_GUARD = process.env.T3CODE_STRICT_PROVIDER_LIFECYCLE_GUARD !== "0"; type TurnStartRequestedDomainEvent = Extract< OrchestrationEvent, { type: "thread.turn-start-requested" }>; type RuntimeIngestionInput = | { source: "runtime"; event: ProviderRuntimeEvent; } | { source: "domain"; event: TurnStartRequestedDomainEvent; }; function toTurnId(value: TurnId | string | undefined): TurnId | undefined { return value === undefined ? undefined : TurnId.makeUnsafe(String(value));} function toApprovalRequestId(value: string | undefined): ApprovalRequestId | undefined { return value === undefined ? undefined : ApprovalRequestId.makeUnsafe(value);} function sameId(left: string | null | undefined, right: string | null | undefined): boolean { if (left === null || left === undefined || right === null || right === undefined) { return false; } return left === right;} function truncateDetail(value: string, limit = 180): string { return value.length > limit ? `${value.slice(0, limit - 3)}...` : value;} function normalizeProposedPlanMarkdown(planMarkdown: string | undefined): string | undefined { const trimmed = planMarkdown?.trim(); if (!trimmed) { return undefined; } return trimmed;} function proposedPlanIdForTurn(threadId: ThreadId, turnId: TurnId): string { return `plan:${threadId}:turn:${turnId}`;} function proposedPlanIdFromEvent(event: ProviderRuntimeEvent, threadId: ThreadId): string { const turnId = toTurnId(event.turnId); if (turnId) { return proposedPlanIdForTurn(threadId, turnId); } if (event.itemId) { return `plan:${threadId}:item:${event.itemId}`; } return `plan:${threadId}:event:${event.eventId}`;} function asString(value: unknown): string | undefined { return typeof value === "string" ? value : undefined;} function runtimePayloadRecord(event: ProviderRuntimeEvent): Record<string, unknown> | undefined { const payload = (event as { payload?: unknown }).payload; if (!payload || typeof payload !== "object") { return undefined; } return payload as Record<string, unknown>;} function normalizeRuntimeTurnState( value: string | undefined,): "completed" | "failed" | "interrupted" | "cancelled" { switch (value) { case "failed": case "interrupted": case "cancelled": case "completed": return value; default: return "completed"; }} function runtimeTurnState( event: ProviderRuntimeEvent,): "completed" | "failed" | "interrupted" | "cancelled" { const payloadState = asString(runtimePayloadRecord(event)?.state); return normalizeRuntimeTurnState(payloadState);} function runtimeTurnErrorMessage(event: ProviderRuntimeEvent): string | undefined { const payloadErrorMessage = asString(runtimePayloadRecord(event)?.errorMessage); return payloadErrorMessage;} function runtimeErrorMessageFromEvent(event: ProviderRuntimeEvent): string | undefined { const payloadMessage = asString(runtimePayloadRecord(event)?.message); return payloadMessage;} function orchestrationSessionStatusFromRuntimeState( state: "starting" | "running" | "waiting" | "ready" | "interrupted" | "stopped" | "error",): "starting" | "running" | "ready" | "interrupted" | "stopped" | "error" { switch (state) { case "starting": return "starting"; case "running": case "waiting": return "running"; case "ready": return "ready"; case "interrupted": return "interrupted"; case "stopped": return "stopped"; case "error": return "error"; }} function requestKindFromCanonicalRequestType( requestType: string | undefined,): "command" | "file-read" | "file-change" | undefined { switch (requestType) { case "command_execution_approval": case "exec_command_approval": return "command"; case "file_read_approval": return "file-read"; case "file_change_approval": case "apply_patch_approval": return "file-change"; default: return undefined; }} function workUnitIdForRuntimeEvent(event: ProviderRuntimeEvent): WorkUnitId | null { const turnId = toTurnId(event.turnId); if (!turnId) { return null; } if ( event.type === "task.started" || event.type === "task.progress" || event.type === "task.completed" ) { return taskWorkUnitIdForTurn(event.threadId, turnId, String(event.payload.taskId)); } return rootWorkUnitIdForTurn(event.threadId, turnId);} function runtimeTurnStateToWorkUnitState( state: "completed" | "failed" | "interrupted" | "cancelled",): "completed" | "failed" | "stopped" | "cancelled" { switch (state) { case "failed": return "failed"; case "interrupted": return "stopped"; case "cancelled": return "cancelled"; case "completed": return "completed"; }} function runtimeTaskStateToWorkUnitState( state: "completed" | "failed" | "stopped",): "completed" | "failed" | "stopped" { switch (state) { case "failed": return "failed"; case "stopped": return "stopped"; case "completed": return "completed"; }} function providerTurnWorkUnitRefs( event: ProviderRuntimeEvent,): NonNullable<OrchestrationThread["workUnits"][number]["providerRefs"]> | undefined { return event.providerRefs?.providerTurnId !== undefined ? { providerTurnId: event.providerRefs.providerTurnId } : undefined;} function runtimeEventToActivities( event: ProviderRuntimeEvent,): ReadonlyArray<OrchestrationThreadActivity> { const maybeSequence = (() => { const eventWithSequence = event as ProviderRuntimeEvent & { sessionSequence?: number }; return eventWithSequence.sessionSequence !== undefined ? { sequence: eventWithSequence.sessionSequence } : {}; })(); const maybeWorkUnit = { workUnitId: workUnitIdForRuntimeEvent(event) }; switch (event.type) { case "request.opened": { if (event.payload.requestType === "tool_user_input") { return []; } const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType); return [ { id: event.eventId, createdAt: event.createdAt, tone: "approval", kind: "approval.requested", summary: requestKind === "command" ? "Command approval requested" : requestKind === "file-read" ? "File-read approval requested" : requestKind === "file-change" ? "File-change approval requested" : "Approval requested", payload: { requestId: toApprovalRequestId(event.requestId), ...(requestKind ? { requestKind } : {}), requestType: event.payload.requestType, ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "request.resolved": { if (event.payload.requestType === "tool_user_input") { return []; } const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType); return [ { id: event.eventId, createdAt: event.createdAt, tone: "approval", kind: "approval.resolved", summary: "Approval resolved", payload: { requestId: toApprovalRequestId(event.requestId), ...(requestKind ? { requestKind } : {}), requestType: event.payload.requestType, ...(event.payload.decision ? { decision: event.payload.decision } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "runtime.error": { const message = runtimeErrorMessageFromEvent(event); if (!message) { return []; } return [ { id: event.eventId, createdAt: event.createdAt, tone: "error", kind: "runtime.error", summary: "Runtime error", payload: { message: truncateDetail(message), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "runtime.warning": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "runtime.warning", summary: "Runtime warning", payload: { message: truncateDetail(event.payload.message), ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "turn.plan.updated": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "turn.plan.updated", summary: "Plan updated", payload: { plan: event.payload.plan, ...(event.payload.explanation !== undefined ? { explanation: event.payload.explanation } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "user-input.requested": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "user-input.requested", summary: "User input requested", payload: { ...(event.requestId ? { requestId: event.requestId } : {}), questions: event.payload.questions, }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "user-input.resolved": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "user-input.resolved", summary: "User input submitted", payload: { ...(event.requestId ? { requestId: event.requestId } : {}), answers: event.payload.answers, }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.started": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "task.started", summary: event.payload.taskType === "plan" ? "Plan task started" : event.payload.taskType ? `${event.payload.taskType} task started` : "Task started", payload: { taskId: event.payload.taskId, ...(event.payload.taskType ? { taskType: event.payload.taskType } : {}), ...(event.payload.description ? { detail: truncateDetail(event.payload.description) } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.progress": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "task.progress", summary: "Reasoning update", payload: { taskId: event.payload.taskId, detail: truncateDetail(event.payload.summary ?? event.payload.description), ...(event.payload.summary ? { summary: truncateDetail(event.payload.summary) } : {}), ...(event.payload.lastToolName ? { lastToolName: event.payload.lastToolName } : {}), ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.completed": { return [ { id: event.eventId, createdAt: event.createdAt, tone: event.payload.status === "failed" ? "error" : "info", kind: "task.completed", summary: event.payload.status === "failed" ? "Task failed" : event.payload.status === "stopped" ? "Task stopped" : "Task completed", payload: { taskId: event.payload.taskId, status: event.payload.status, ...(event.payload.summary ? { detail: truncateDetail(event.payload.summary) } : {}), ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "item.updated": { if (!isToolLifecycleItemType(event.payload.itemType)) { return []; } return [ { id: event.eventId, createdAt: event.createdAt, tone: "tool", kind: "tool.updated", summary: event.payload.title ?? "Tool updated", payload: { itemType: event.payload.itemType, ...(event.payload.status ? { status: event.payload.status } : {}), ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}), ...(event.payload.data !== undefined ? { data: event.payload.data } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence,Lines 1–500 of 1481. Load more
import { ApprovalRequestId, type AssistantDeliveryMode, CommandId, MessageId, type OrchestrationEvent, type OrchestrationProposedPlanId, CheckpointRef, isToolLifecycleItemType, RuntimeTaskId, ThreadId, TurnId, WorkUnitId, type OrchestrationThread, type OrchestrationThreadActivity, type ProviderRuntimeEvent, } from "@t3tools/contracts"; import { Cache, Cause, Duration, Effect, Layer, Option, Ref, Stream } from "effect"; import { makeDrainableWorker } from "@t3tools/shared/DrainableWorker"; import { ProviderService } from "../../provider/Services/ProviderService.ts"; import { ProjectionTurnRepository } from "../../persistence/Services/ProjectionTurns.ts"; import { ProjectionTurnRepositoryLive } from "../../persistence/Layers/ProjectionTurns.ts"; import { resolveThreadWorkspaceCwd } from "../../checkpointing/Utils.ts"; import { isGitRepository } from "../../git/isRepo.ts"; import { OrchestrationEngineService } from "../Services/OrchestrationEngine.ts"; import { ProviderRuntimeIngestionService, type ProviderRuntimeIngestionShape, } from "../Services/ProviderRuntimeIngestion.ts"; const providerTurnKey = (threadId: ThreadId, turnId: TurnId) => `${threadId}:${turnId}`; const providerCommandId = (event: ProviderRuntimeEvent, tag: string): CommandId => CommandId.makeUnsafe(`provider:${event.eventId}:${tag}:${crypto.randomUUID()}`); const rootWorkUnitIdForTurn = (threadId: ThreadId, turnId: TurnId): WorkUnitId => WorkUnitId.makeUnsafe(`wu:${threadId}:turn:${turnId}:root`); const taskWorkUnitIdForTurn = (threadId: ThreadId, turnId: TurnId, taskId: string): WorkUnitId => WorkUnitId.makeUnsafe(`wu:${threadId}:turn:${turnId}:task:${taskId}`); const DEFAULT_ASSISTANT_DELIVERY_MODE: AssistantDeliveryMode = "buffered"; const TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY = 10_000; const TURN_MESSAGE_IDS_BY_TURN_TTL = Duration.minutes(120); const BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_CACHE_CAPACITY = 20_000; const BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_TTL = Duration.minutes(120); const BUFFERED_PROPOSED_PLAN_BY_ID_CACHE_CAPACITY = 10_000; const BUFFERED_PROPOSED_PLAN_BY_ID_TTL = Duration.minutes(120); const MAX_BUFFERED_ASSISTANT_CHARS = 24_000; const STRICT_PROVIDER_LIFECYCLE_GUARD = process.env.T3CODE_STRICT_PROVIDER_LIFECYCLE_GUARD !== "0"; type TurnStartRequestedDomainEvent = Extract< OrchestrationEvent, { type: "thread.turn-start-requested" } >; type RuntimeIngestionInput = | { source: "runtime"; event: ProviderRuntimeEvent; } | { source: "domain"; event: TurnStartRequestedDomainEvent; }; function toTurnId(value: TurnId | string | undefined): TurnId | undefined { return value === undefined ? undefined : TurnId.makeUnsafe(String(value)); } function toApprovalRequestId(value: string | undefined): ApprovalRequestId | undefined { return value === undefined ? undefined : ApprovalRequestId.makeUnsafe(value); } function sameId(left: string | null | undefined, right: string | null | undefined): boolean { if (left === null || left === undefined || right === null || right === undefined) { return false; } return left === right; } function truncateDetail(value: string, limit = 180): string { return value.length > limit ? `${value.slice(0, limit - 3)}...` : value; } function normalizeProposedPlanMarkdown(planMarkdown: string | undefined): string | undefined { const trimmed = planMarkdown?.trim(); if (!trimmed) { return undefined; } return trimmed; } function proposedPlanIdForTurn(threadId: ThreadId, turnId: TurnId): string { return `plan:${threadId}:turn:${turnId}`; } function proposedPlanIdFromEvent(event: ProviderRuntimeEvent, threadId: ThreadId): string { const turnId = toTurnId(event.turnId); if (turnId) { return proposedPlanIdForTurn(threadId, turnId); } if (event.itemId) { return `plan:${threadId}:item:${event.itemId}`; } return `plan:${threadId}:event:${event.eventId}`; } function asString(value: unknown): string | undefined { return typeof value === "string" ? value : undefined; } function runtimePayloadRecord(event: ProviderRuntimeEvent): Record<string, unknown> | undefined { const payload = (event as { payload?: unknown }).payload; if (!payload || typeof payload !== "object") { return undefined; } return payload as Record<string, unknown>; } function normalizeRuntimeTurnState( value: string | undefined, ): "completed" | "failed" | "interrupted" | "cancelled" { switch (value) { case "failed": case "interrupted": case "cancelled": case "completed": return value; default: return "completed"; } } function runtimeTurnState( event: ProviderRuntimeEvent, ): "completed" | "failed" | "interrupted" | "cancelled" { const payloadState = asString(runtimePayloadRecord(event)?.state); return normalizeRuntimeTurnState(payloadState); } function runtimeTurnErrorMessage(event: ProviderRuntimeEvent): string | undefined { const payloadErrorMessage = asString(runtimePayloadRecord(event)?.errorMessage); return payloadErrorMessage; } function runtimeErrorMessageFromEvent(event: ProviderRuntimeEvent): string | undefined { const payloadMessage = asString(runtimePayloadRecord(event)?.message); return payloadMessage; } function orchestrationSessionStatusFromRuntimeState( state: "starting" | "running" | "waiting" | "ready" | "interrupted" | "stopped" | "error", ): "starting" | "running" | "ready" | "interrupted" | "stopped" | "error" { switch (state) { case "starting": return "starting"; case "running": case "waiting": return "running"; case "ready": return "ready"; case "interrupted": return "interrupted"; case "stopped": return "stopped"; case "error": return "error"; } } function requestKindFromCanonicalRequestType( requestType: string | undefined, ): "command" | "file-read" | "file-change" | undefined { switch (requestType) { case "command_execution_approval": case "exec_command_approval": return "command"; case "file_read_approval": return "file-read"; case "file_change_approval": case "apply_patch_approval": return "file-change"; default: return undefined; } } function workUnitIdForRuntimeEvent(event: ProviderRuntimeEvent): WorkUnitId | null { const turnId = toTurnId(event.turnId); if (!turnId) { return null; } if ( event.type === "task.started" || event.type === "task.progress" || event.type === "task.completed" ) { return taskWorkUnitIdForTurn(event.threadId, turnId, String(event.payload.taskId)); } return rootWorkUnitIdForTurn(event.threadId, turnId); } function runtimeTurnStateToWorkUnitState( state: "completed" | "failed" | "interrupted" | "cancelled", ): "completed" | "failed" | "stopped" | "cancelled" { switch (state) { case "failed": return "failed"; case "interrupted": return "stopped"; case "cancelled": return "cancelled"; case "completed": return "completed"; } } function runtimeTaskStateToWorkUnitState( state: "completed" | "failed" | "stopped", ): "completed" | "failed" | "stopped" { switch (state) { case "failed": return "failed"; case "stopped": return "stopped"; case "completed": return "completed"; } } function providerTurnWorkUnitRefs( event: ProviderRuntimeEvent, ): NonNullable<OrchestrationThread["workUnits"][number]["providerRefs"]> | undefined { return event.providerRefs?.providerTurnId !== undefined ? { providerTurnId: event.providerRefs.providerTurnId } : undefined; } function runtimeEventToActivities( event: ProviderRuntimeEvent, ): ReadonlyArray<OrchestrationThreadActivity> { const maybeSequence = (() => { const eventWithSequence = event as ProviderRuntimeEvent & { sessionSequence?: number }; return eventWithSequence.sessionSequence !== undefined ? { sequence: eventWithSequence.sessionSequence } : {}; })(); const maybeWorkUnit = { workUnitId: workUnitIdForRuntimeEvent(event) }; switch (event.type) { case "request.opened": { if (event.payload.requestType === "tool_user_input") { return []; } const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType); return [ { id: event.eventId, createdAt: event.createdAt, tone: "approval", kind: "approval.requested", summary: requestKind === "command" ? "Command approval requested" : requestKind === "file-read" ? "File-read approval requested" : requestKind === "file-change" ? "File-change approval requested" : "Approval requested", payload: { requestId: toApprovalRequestId(event.requestId), ...(requestKind ? { requestKind } : {}), requestType: event.payload.requestType, ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "request.resolved": { if (event.payload.requestType === "tool_user_input") { return []; } const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType); return [ { id: event.eventId, createdAt: event.createdAt, tone: "approval", kind: "approval.resolved", summary: "Approval resolved", payload: { requestId: toApprovalRequestId(event.requestId), ...(requestKind ? { requestKind } : {}), requestType: event.payload.requestType, ...(event.payload.decision ? { decision: event.payload.decision } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "runtime.error": { const message = runtimeErrorMessageFromEvent(event); if (!message) { return []; } return [ { id: event.eventId, createdAt: event.createdAt, tone: "error", kind: "runtime.error", summary: "Runtime error", payload: { message: truncateDetail(message), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "runtime.warning": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "runtime.warning", summary: "Runtime warning", payload: { message: truncateDetail(event.payload.message), ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "turn.plan.updated": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "turn.plan.updated", summary: "Plan updated", payload: { plan: event.payload.plan, ...(event.payload.explanation !== undefined ? { explanation: event.payload.explanation } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "user-input.requested": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "user-input.requested", summary: "User input requested", payload: { ...(event.requestId ? { requestId: event.requestId } : {}), questions: event.payload.questions, }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "user-input.resolved": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "user-input.resolved", summary: "User input submitted", payload: { ...(event.requestId ? { requestId: event.requestId } : {}), answers: event.payload.answers, }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.started": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "task.started", summary: event.payload.taskType === "plan" ? "Plan task started" : event.payload.taskType ? `${event.payload.taskType} task started` : "Task started", payload: { taskId: event.payload.taskId, ...(event.payload.taskType ? { taskType: event.payload.taskType } : {}), ...(event.payload.description ? { detail: truncateDetail(event.payload.description) } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.progress": { return [ { id: event.eventId, createdAt: event.createdAt, tone: "info", kind: "task.progress", summary: "Reasoning update", payload: { taskId: event.payload.taskId, detail: truncateDetail(event.payload.summary ?? event.payload.description), ...(event.payload.summary ? { summary: truncateDetail(event.payload.summary) } : {}), ...(event.payload.lastToolName ? { lastToolName: event.payload.lastToolName } : {}), ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "task.completed": { return [ { id: event.eventId, createdAt: event.createdAt, tone: event.payload.status === "failed" ? "error" : "info", kind: "task.completed", summary: event.payload.status === "failed" ? "Task failed" : event.payload.status === "stopped" ? "Task stopped" : "Task completed", payload: { taskId: event.payload.taskId, status: event.payload.status, ...(event.payload.summary ? { detail: truncateDetail(event.payload.summary) } : {}), ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence, }, ]; } case "item.updated": { if (!isToolLifecycleItemType(event.payload.itemType)) { return []; } return [ { id: event.eventId, createdAt: event.createdAt, tone: "tool", kind: "tool.updated", summary: event.payload.title ?? "Tool updated", payload: { itemType: event.payload.itemType, ...(event.payload.status ? { status: event.payload.status } : {}), ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}), ...(event.payload.data !== undefined ? { data: event.payload.data } : {}), }, turnId: toTurnId(event.turnId) ?? null, ...maybeWorkUnit, ...maybeSequence,