1149 lines · 38.4 KB · TypeScript
RawDownload
import {  ApprovalRequestId,  type AssistantDeliveryMode,  CommandId,  MessageId,  type OrchestrationEvent,  CheckpointRef,  ThreadId,  TurnId,  type OrchestrationThreadActivity,  type ProviderRuntimeEvent,} from "@t3tools/contracts";import { Cache, Cause, Duration, Effect, Layer, Option, Queue, Ref, Stream } from "effect"; import { ProviderService } from "../../provider/Services/ProviderService.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 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 isToolLifecycleItemType(itemType: string): boolean {  return (    itemType === "command_execution" ||    itemType === "file_change" ||    itemType === "mcp_tool_call" ||    itemType === "dynamic_tool_call" ||    itemType === "collab_agent_tool_call" ||    itemType === "web_search" ||    itemType === "image_view"  );} function runtimeEventToActivities(  event: ProviderRuntimeEvent,): ReadonlyArray<OrchestrationThreadActivity> {  const maybeSequence = (() => {    const eventWithSequence = event as ProviderRuntimeEvent & { sessionSequence?: number };    return eventWithSequence.sessionSequence !== undefined      ? { sequence: eventWithSequence.sessionSequence }      : {};  })();  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,          ...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,          ...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,          ...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,          ...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,          ...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,          ...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,          ...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,          ...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.description),            ...(event.payload.lastToolName ? { lastToolName: event.payload.lastToolName } : {}),            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),          },          turnId: toTurnId(event.turnId) ?? null,          ...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,          ...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,          ...maybeSequence,        },      ];    }     case "item.completed": {      if (!isToolLifecycleItemType(event.payload.itemType)) {        return [];      }      return [        {          id: event.eventId,          createdAt: event.createdAt,          tone: "tool",          kind: "tool.completed",          summary: `${event.payload.title ?? "Tool"} complete`,          payload: {            itemType: event.payload.itemType,            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),          },          turnId: toTurnId(event.turnId) ?? null,          ...maybeSequence,        },      ];    }     case "item.started": {      if (!isToolLifecycleItemType(event.payload.itemType)) {        return [];      }      return [        {          id: event.eventId,          createdAt: event.createdAt,          tone: "tool",          kind: "tool.started",          summary: `${event.payload.title ?? "Tool"} started`,          payload: {            itemType: event.payload.itemType,            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),          },          turnId: toTurnId(event.turnId) ?? null,          ...maybeSequence,        },      ];    }     default:      break;  }   return [];} const make = Effect.gen(function* () {  const orchestrationEngine = yield* OrchestrationEngineService;  const providerService = yield* ProviderService;   const assistantDeliveryModeRef = yield* Ref.make<AssistantDeliveryMode>(    DEFAULT_ASSISTANT_DELIVERY_MODE,  );   const turnMessageIdsByTurnKey = yield* Cache.make<string, Set<MessageId>>({    capacity: TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY,    timeToLive: TURN_MESSAGE_IDS_BY_TURN_TTL,    lookup: () => Effect.succeed(new Set<MessageId>()),  });   const bufferedAssistantTextByMessageId = yield* Cache.make<MessageId, string>({

Lines 1–500 of 1149.