import type { OrchestrationLatestTurn, OrchestrationProposedPlanId, OrchestrationSessionStatus, OrchestrationThreadActivity, ProjectScript as ContractProjectScript, ThreadId, ProjectId, TurnId, MessageId, CheckpointRef, ProviderKind, ProviderInteractionMode, RuntimeMode,} from "@t3tools/contracts"; export type SessionPhase = "disconnected" | "connecting" | "ready" | "running";export const DEFAULT_RUNTIME_MODE: RuntimeMode = "full-access"; export const DEFAULT_INTERACTION_MODE: ProviderInteractionMode = "default";export const DEFAULT_THREAD_TERMINAL_HEIGHT = 280;export const DEFAULT_THREAD_TERMINAL_ID = "default";export const MAX_TERMINALS_PER_GROUP = 4;export type ProjectScript = ContractProjectScript; export interface ThreadTerminalGroup { id: string; terminalIds: string[];} export interface ChatImageAttachment { type: "image"; id: string; name: string; mimeType: string; sizeBytes: number; previewUrl?: string;} export type ChatAttachment = ChatImageAttachment; export interface ChatMessage { id: MessageId; role: "user" | "assistant" | "system"; text: string; attachments?: ChatAttachment[]; createdAt: string; completedAt?: string | undefined; streaming: boolean;} export interface ProposedPlan { id: OrchestrationProposedPlanId; turnId: TurnId | null; planMarkdown: string; implementedAt: string | null; implementationThreadId: ThreadId | null; createdAt: string; updatedAt: string;} export interface TurnDiffFileChange { path: string; kind?: string | undefined; additions?: number | undefined; deletions?: number | undefined;} export interface TurnDiffSummary { turnId: TurnId; completedAt: string; status?: string | undefined; files: TurnDiffFileChange[]; checkpointRef?: CheckpointRef | undefined; assistantMessageId?: MessageId | undefined; checkpointTurnCount?: number | undefined;} export interface Project { id: ProjectId; name: string; cwd: string; model: string; expanded: boolean; scripts: ProjectScript[];} export interface Thread { id: ThreadId; codexThreadId: string | null; projectId: ProjectId; title: string; model: string; runtimeMode: RuntimeMode; interactionMode: ProviderInteractionMode; session: ThreadSession | null; messages: ChatMessage[]; proposedPlans: ProposedPlan[]; error: string | null; createdAt: string; latestTurn: OrchestrationLatestTurn | null; lastVisitedAt?: string | undefined; branch: string | null; worktreePath: string | null; turnDiffSummaries: TurnDiffSummary[]; activities: OrchestrationThreadActivity[];} export interface ThreadSession { provider: ProviderKind; status: SessionPhase | "error" | "closed"; activeTurnId?: TurnId | undefined; createdAt: string; updatedAt: string; lastError?: string; orchestrationStatus: OrchestrationSessionStatus;}
import type {
OrchestrationLatestTurn,
OrchestrationProposedPlanId,
OrchestrationSessionStatus,
OrchestrationThreadActivity,
ProjectScript as ContractProjectScript,
ThreadId,
ProjectId,
TurnId,
MessageId,
CheckpointRef,
ProviderKind,
ProviderInteractionMode,
RuntimeMode,
} from "@t3tools/contracts";
export type SessionPhase = "disconnected" | "connecting" | "ready" | "running";
export const DEFAULT_RUNTIME_MODE: RuntimeMode = "full-access";
export const DEFAULT_INTERACTION_MODE: ProviderInteractionMode = "default";
export const DEFAULT_THREAD_TERMINAL_HEIGHT = 280;
export const DEFAULT_THREAD_TERMINAL_ID = "default";
export const MAX_TERMINALS_PER_GROUP = 4;
export type ProjectScript = ContractProjectScript;
export interface ThreadTerminalGroup {
id: string;
terminalIds: string[];
}
export interface ChatImageAttachment {
type: "image";
id: string;
name: string;
mimeType: string;
sizeBytes: number;
previewUrl?: string;
}
export type ChatAttachment = ChatImageAttachment;
export interface ChatMessage {
id: MessageId;
role: "user" | "assistant" | "system";
text: string;
attachments?: ChatAttachment[];
createdAt: string;
completedAt?: string | undefined;
streaming: boolean;
}
export interface ProposedPlan {
id: OrchestrationProposedPlanId;
turnId: TurnId | null;
planMarkdown: string;
implementedAt: string | null;
implementationThreadId: ThreadId | null;
createdAt: string;
updatedAt: string;
}
export interface TurnDiffFileChange {
path: string;
kind?: string | undefined;
additions?: number | undefined;
deletions?: number | undefined;
}
export interface TurnDiffSummary {
turnId: TurnId;
completedAt: string;
status?: string | undefined;
files: TurnDiffFileChange[];
checkpointRef?: CheckpointRef | undefined;
assistantMessageId?: MessageId | undefined;
checkpointTurnCount?: number | undefined;
}
export interface Project {
id: ProjectId;
name: string;
cwd: string;
model: string;
expanded: boolean;
scripts: ProjectScript[];
}
export interface Thread {
id: ThreadId;
codexThreadId: string | null;
projectId: ProjectId;
title: string;
model: string;
runtimeMode: RuntimeMode;
interactionMode: ProviderInteractionMode;
session: ThreadSession | null;
messages: ChatMessage[];
proposedPlans: ProposedPlan[];
error: string | null;
createdAt: string;
latestTurn: OrchestrationLatestTurn | null;
lastVisitedAt?: string | undefined;
branch: string | null;
worktreePath: string | null;
turnDiffSummaries: TurnDiffSummary[];
activities: OrchestrationThreadActivity[];
}
export interface ThreadSession {
provider: ProviderKind;
status: SessionPhase | "error" | "closed";
activeTurnId?: TurnId | undefined;
createdAt: string;
updatedAt: string;
lastError?: string;
orchestrationStatus: OrchestrationSessionStatus;
}