File size: 2,280 Bytes
3d700dd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import { VSCodeClient } from "@openhands/typescript-client/clients";
import { RemoteEventsList } from "@openhands/typescript-client/events/remote-events-list";
import { uploadFilesToConversation } from "#/api/conversation-file-upload.api";
import {
GetVSCodeUrlResponse,
GetTrajectoryResponse,
FileUploadSuccessResponse,
} from "../open-hands.types";
import { getAgentServerWorkingDir } from "../agent-server-config";
import {
getAgentServerClientOptions,
getAgentServerHttpClientOptions,
} from "../agent-server-client-options";
import { AppConversation } from "./agent-server-conversation-service.types";
class ConversationService {
private static currentConversation: AppConversation | null = null;
static setCurrentConversation(
currentConversation: AppConversation | null,
): void {
this.currentConversation = currentConversation;
}
static getCurrentConversation(): AppConversation | null {
return this.currentConversation;
}
private static getClientOverrides() {
return {
sessionApiKey: this.currentConversation?.session_api_key,
};
}
static async getVSCodeUrl(
conversationId: string,
): Promise<GetVSCodeUrlResponse> {
const workspaceDir =
this.currentConversation?.id === conversationId
? (this.currentConversation?.workspace?.working_dir ??
getAgentServerWorkingDir())
: getAgentServerWorkingDir();
const vscodeUrl = await new VSCodeClient(
getAgentServerClientOptions(this.getClientOverrides()),
).getUrl({
baseUrl:
typeof window !== "undefined" ? window.location.origin : undefined,
workspaceDir,
});
return { vscode_url: vscodeUrl };
}
static async getTrajectory(
conversationId: string,
): Promise<GetTrajectoryResponse> {
const page = await new RemoteEventsList(
getAgentServerHttpClientOptions(this.getClientOverrides()),
conversationId,
).search({ limit: 10000 });
return { trajectory: page.items ?? [] };
}
static async uploadFiles(
conversationId: string,
files: File[],
): Promise<FileUploadSuccessResponse> {
return uploadFilesToConversation(
conversationId,
files,
this.currentConversation,
);
}
}
export default ConversationService;
|