diff --git a/js/src/env/docker/workspace.ts b/js/src/env/docker/workspace.ts index a394d73de95..9837fa600d3 100644 --- a/js/src/env/docker/workspace.ts +++ b/js/src/env/docker/workspace.ts @@ -5,6 +5,7 @@ import type Docker from "dockerode"; import type CliProgress from "cli-progress"; import { IWorkspaceConfig, WorkspaceConfig } from "../config"; import logger from "../../utils/logger"; +import { getComposioDir } from "../../sdk/utils/fileUtils"; const ENV_COMPOSIO_DEV_MODE = "COMPOSIO_DEV_MODE"; const ENV_COMPOSIO_SWE_AGENT = "COMPOSIO_SWE_AGENT"; @@ -96,7 +97,7 @@ export class DockerWorkspace extends RemoteWorkspace { const os = require("node:os"); const COMPOSIO_PATH = path.resolve(__dirname, "../../../../python/"); - const COMPOSIO_CACHE = path.join(os.homedir(), ".composio"); + const COMPOSIO_CACHE = getComposioDir(false); volumeBindings.push( ...[ diff --git a/js/src/sdk/base.toolset.ts b/js/src/sdk/base.toolset.ts index 32256aeafba..703fe6fac46 100644 --- a/js/src/sdk/base.toolset.ts +++ b/js/src/sdk/base.toolset.ts @@ -62,7 +62,7 @@ const fileProcessor = ({ const fileData = toolResponse.data.response_data.file; const { name, content } = fileData as { name: string; content: string }; const file_name_prefix = `${action}_${Date.now()}`; - const filePath = saveFile(file_name_prefix, content); + const filePath = saveFile(file_name_prefix, content, true); // @ts-ignore delete toolResponse.data.response_data.file; diff --git a/js/src/sdk/utils/cli.ts b/js/src/sdk/utils/cli.ts index 57b5480c946..7439add3062 100644 --- a/js/src/sdk/utils/cli.ts +++ b/js/src/sdk/utils/cli.ts @@ -13,5 +13,5 @@ export function setCliConfig(apiKey: string, baseUrl: string) { userData.base_url = baseUrl; } - saveFile(userDataPath(), userData); + saveFile(userDataPath(), JSON.stringify(userData)); } diff --git a/js/src/sdk/utils/config.ts b/js/src/sdk/utils/config.ts index a7251928643..c2144c039e3 100644 --- a/js/src/sdk/utils/config.ts +++ b/js/src/sdk/utils/config.ts @@ -2,7 +2,7 @@ import * as fs from "fs"; import * as path from "path"; import * as os from "os"; import { - LOCAL_CACHE_DIRECTORY_NAME, + COMPOSIO_DIR, USER_DATA_FILE_NAME, DEFAULT_BASE_URL, } from "./constants"; @@ -23,7 +23,8 @@ declare module "axios" { // File path helpers export const userDataPath = () => - path.join(os.homedir(), LOCAL_CACHE_DIRECTORY_NAME, USER_DATA_FILE_NAME); + path.join(os.homedir(), COMPOSIO_DIR, USER_DATA_FILE_NAME); + export const getUserDataJson = () => { try { const data = fs.readFileSync(userDataPath(), "utf8"); diff --git a/js/src/sdk/utils/constants.ts b/js/src/sdk/utils/constants.ts index 653d2d28dd7..cbd17c02443 100644 --- a/js/src/sdk/utils/constants.ts +++ b/js/src/sdk/utils/constants.ts @@ -1,6 +1,7 @@ // Constants -export const LOCAL_CACHE_DIRECTORY_NAME = ".composio"; +export const COMPOSIO_DIR = ".composio"; export const USER_DATA_FILE_NAME = "user_data.json"; +export const TEMP_FILES_DIRECTORY_NAME = "files"; export const DEFAULT_BASE_URL = "https://backend.composio.dev"; export const TELEMETRY_URL = "https://app.composio.dev"; diff --git a/js/src/sdk/utils/fileUtils.ts b/js/src/sdk/utils/fileUtils.ts index a9ab452fccb..949c500dfce 100644 --- a/js/src/sdk/utils/fileUtils.ts +++ b/js/src/sdk/utils/fileUtils.ts @@ -2,26 +2,56 @@ import * as path from "path"; import * as os from "os"; import * as fs from "fs"; +import { COMPOSIO_DIR, TEMP_FILES_DIRECTORY_NAME } from "./constants"; -export const getComposioDir = () => { - const composioDir = path.join(os.homedir(), ".composio"); - if (!fs.existsSync(composioDir)) { +/** + * Gets the Composio directory. + * @param createDirIfNotExists - Whether to create the directory if it doesn't exist. + * @returns The path to the Composio directory. + */ +export const getComposioDir = (createDirIfNotExists: boolean = false) => { + const composioDir = path.join(os.homedir(), COMPOSIO_DIR); + if (createDirIfNotExists && !fs.existsSync(composioDir)) { fs.mkdirSync(composioDir, { recursive: true }); } return composioDir; }; -export const getComposioFilesDir = () => { - const composioFilesDir = path.join(os.homedir(), ".composio", "files"); - if (!fs.existsSync(composioFilesDir)) { +/** + * Gets the Composio temporary files directory. + * @param createDirIfNotExists - Whether to create the directory if it doesn't exist. + * @returns The path to the Composio temporary files directory. + */ +export const getComposioTempFilesDir = ( + createDirIfNotExists: boolean = false +) => { + const composioFilesDir = path.join( + os.homedir(), + COMPOSIO_DIR, + TEMP_FILES_DIRECTORY_NAME + ); + if (createDirIfNotExists && !fs.existsSync(composioFilesDir)) { fs.mkdirSync(composioFilesDir, { recursive: true }); } return composioFilesDir; }; -export const saveFile = (file: string, content: string) => { - const composioFilesDir = getComposioFilesDir(); - const filePath = `${composioFilesDir}/${file}`; +/** + * Saves a file to the Composio directory. + * @param file - The name of the file to save. + * @param content - The content of the file to save. Should be a string. + * @param isTempFile - Whether the file is a temporary file. + * @returns The path to the saved file. + */ +export const saveFile = ( + file: string, + content: string, + isTempFile: boolean = false +) => { + const composioFilesDir = isTempFile + ? getComposioTempFilesDir(true) + : getComposioDir(true); + const filePath = path.join(composioFilesDir, path.basename(file)); fs.writeFileSync(filePath, content); return filePath;