Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 33 additions & 4 deletions apps/app/src/components/thread/terminal/terminal-websocket-url.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ interface BuildTerminalWebSocketUrlArgs {
threadId: string;
}

interface BuildThreadlessTerminalWebSocketUrlArgs {
terminalId: string;
}

interface BuildTerminalSessionWebSocketUrlArgs {
terminalId: string;
}

function buildTerminalWebSocketPath({
terminalId,
threadId,
Expand All @@ -14,10 +22,13 @@ function buildTerminalWebSocketPath({
)}`;
}

export function buildTerminalWebSocketUrl(
args: BuildTerminalWebSocketUrlArgs,
): string {
const path = buildTerminalWebSocketPath(args);
function buildThreadlessTerminalWebSocketPath({
terminalId,
}: BuildThreadlessTerminalWebSocketUrlArgs): string {
return `/ws/terminals/${encodeURIComponent(terminalId)}`;
}

function buildWebSocketUrl(path: string): string {
const devWebSocketUrl = buildDevWebSocketUrl({ path });
if (devWebSocketUrl !== undefined) {
return devWebSocketUrl;
Expand All @@ -26,3 +37,21 @@ export function buildTerminalWebSocketUrl(
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
return `${protocol}//${window.location.host}${path}`;
}

export function buildTerminalWebSocketUrl(
args: BuildTerminalWebSocketUrlArgs,
): string {
return buildWebSocketUrl(buildTerminalWebSocketPath(args));
}

export function buildThreadlessTerminalWebSocketUrl(
args: BuildThreadlessTerminalWebSocketUrlArgs,
): string {
return buildWebSocketUrl(buildThreadlessTerminalWebSocketPath(args));
}

export function buildTerminalSessionWebSocketUrl(
args: BuildTerminalSessionWebSocketUrlArgs,
): string {
return buildWebSocketUrl(buildThreadlessTerminalWebSocketPath(args));
}
6 changes: 6 additions & 0 deletions apps/app/src/hooks/cache-owners/terminal-cache-owner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ export function applyThreadTerminalSessionUpsert({
queryClient,
session,
}: TerminalSessionCacheArgs): void {
if (session.threadId === null) {
return;
}
queryClient.setQueryData<ThreadTerminalListResponse>(
threadTerminalsQueryKey(session.threadId),
(current) => upsertTerminalSession(current, session),
Expand All @@ -72,6 +75,9 @@ export function applyThreadTerminalSessionClose({
session,
terminalId,
}: CloseTerminalSessionCacheArgs): void {
if (session.threadId === null) {
return;
}
queryClient.setQueryData<ThreadTerminalListResponse>(
threadTerminalsQueryKey(session.threadId),
(current) =>
Expand Down
100 changes: 100 additions & 0 deletions apps/app/src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ import type {
EnvironmentDiffFileResponse,
EnvironmentStatusResponse,
EnvironmentPullRequestResponse,
EnvironmentTerminalListResponse,
CreateThreadRequest,
CreateEnvironmentTerminalRequest,
CreateThreadTerminalRequest,
ProjectBranchesResponse,
ProjectResponse,
Expand Down Expand Up @@ -67,13 +69,19 @@ import type {
ThreadTimelineResponse,
TimelineTurnSummaryDetailsRequest,
TimelineTurnSummaryDetailsResponse,
CloseTerminalRequest,
CloseThreadTerminalRequest,
CloseEnvironmentTerminalRequest,
CreateTerminalRequest,
ResolvePendingInteractionRequest,
UpdateEnvironmentRequest,
UpdateEnvironmentTerminalRequest,
UpdateTerminalRequest,
UpdateProjectRequest,
UpdateThreadRequest,
UpdateThreadTerminalRequest,
UpdateProjectSourceRequest,
TerminalListResponse,
UploadedPromptAttachment,
ThreadStorageFileListResponse,
ThreadStoragePathListResponse,
Expand Down Expand Up @@ -1067,6 +1075,48 @@ export async function updateThread(
);
}

export async function listTerminals(
signal?: AbortSignal,
): Promise<TerminalListResponse> {
return request<TerminalListResponse>(
apiClient.terminals.$get(undefined, requestOptions(signal)),
);
}

export async function createTerminal(
req: CreateTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.terminals.$post({
json: req,
}),
);
}

export async function renameTerminal(
terminalId: string,
req: UpdateTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.terminals[":terminalId"].$patch({
param: { terminalId },
json: req,
}),
);
}

export async function closeTerminal(
terminalId: string,
req: CloseTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.terminals[":terminalId"].close.$post({
param: { terminalId },
json: req,
}),
);
}

export async function listThreadTerminals(
id: string,
signal?: AbortSignal,
Expand Down Expand Up @@ -1314,6 +1364,56 @@ export async function updateEnvironment(
);
}

export async function listEnvironmentTerminals(
id: string,
signal?: AbortSignal,
): Promise<EnvironmentTerminalListResponse> {
return request<EnvironmentTerminalListResponse>(
apiClient.environments[":id"].terminals.$get(
{ param: { id } },
requestOptions(signal),
),
);
}

export async function createEnvironmentTerminal(
id: string,
req: CreateEnvironmentTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.environments[":id"].terminals.$post({
param: { id },
json: req,
}),
);
}

export async function renameEnvironmentTerminal(
id: string,
terminalId: string,
req: UpdateEnvironmentTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.environments[":id"].terminals[":terminalId"].$patch({
param: { id, terminalId },
json: req,
}),
);
}

export async function closeEnvironmentTerminal(
id: string,
terminalId: string,
req: CloseEnvironmentTerminalRequest,
): Promise<TerminalSession> {
return request<TerminalSession>(
apiClient.environments[":id"].terminals[":terminalId"].close.$post({
param: { id, terminalId },
json: req,
}),
);
}

export async function getEnvironmentWorkStatus(
environmentId: string,
mergeBaseBranch?: string,
Expand Down
Loading
Loading