use crate::JsonSchema; use crate::TS; use codex_utils_absolute_path::AbsolutePathBuf; use serde::Deserialize; use serde::Serialize; /// Read a file from the host filesystem. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsReadFileParams { /// Absolute path to read. pub path: AbsolutePathBuf, } /// Base64-encoded file contents returned by `fs/readFile`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsReadFileResponse { /// File contents encoded as base64. pub data_base64: String, } /// Write a file on the host filesystem. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsWriteFileParams { /// Absolute path to write. pub path: AbsolutePathBuf, /// File contents encoded as base64. pub data_base64: String, } /// Successful response for `fs/writeFile`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsWriteFileResponse {} /// Create a directory on the host filesystem. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsCreateDirectoryParams { /// Absolute directory path to create. pub path: AbsolutePathBuf, /// Whether parent directories should also be created. Defaults to `true`. #[ts(optional = nullable)] pub recursive: Option, } /// Successful response for `fs/createDirectory`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsCreateDirectoryResponse {} /// Request metadata for an absolute path. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsGetMetadataParams { /// Absolute path to inspect. pub path: AbsolutePathBuf, } /// Metadata returned by `fs/getMetadata`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsGetMetadataResponse { /// Whether the path resolves to a directory. pub is_directory: bool, /// Whether the path resolves to a regular file. pub is_file: bool, /// Whether the path itself is a symbolic link. pub is_symlink: bool, /// File creation time in Unix milliseconds when available, otherwise `0`. #[ts(type = "number")] pub created_at_ms: i64, /// File modification time in Unix milliseconds when available, otherwise `0`. #[ts(type = "number")] pub modified_at_ms: i64, } /// List direct child names for a directory. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsReadDirectoryParams { /// Absolute directory path to read. pub path: AbsolutePathBuf, } /// A directory entry returned by `fs/readDirectory`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsReadDirectoryEntry { /// Direct child entry name only, not an absolute or relative path. pub file_name: String, /// Whether this entry resolves to a directory. pub is_directory: bool, /// Whether this entry resolves to a regular file. pub is_file: bool, } /// Directory entries returned by `fs/readDirectory`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsReadDirectoryResponse { /// Direct child entries in the requested directory. pub entries: Vec, } /// Remove a file or directory tree from the host filesystem. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsRemoveParams { /// Absolute path to remove. pub path: AbsolutePathBuf, /// Whether directory removal should recurse. Defaults to `true`. #[ts(optional = nullable)] pub recursive: Option, /// Whether missing paths should be ignored. Defaults to `true`. #[ts(optional = nullable)] pub force: Option, } /// Successful response for `fs/remove`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsRemoveResponse {} /// Copy a file or directory tree on the host filesystem. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsCopyParams { /// Absolute source path. pub source_path: AbsolutePathBuf, /// Absolute destination path. pub destination_path: AbsolutePathBuf, /// Required for directory copies; ignored for file copies. #[serde(default, skip_serializing_if = "std::ops::Not::not")] pub recursive: bool, } /// Successful response for `fs/copy`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsCopyResponse {} /// Start filesystem watch notifications for an absolute path. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsWatchParams { /// Connection-scoped watch identifier used for `fs/unwatch` and `fs/changed`. pub watch_id: String, /// Absolute file or directory path to watch. pub path: AbsolutePathBuf, } /// Successful response for `fs/watch`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsWatchResponse { /// Canonicalized path associated with the watch. pub path: AbsolutePathBuf, } /// Stop filesystem watch notifications for a prior `fs/watch`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsUnwatchParams { /// Watch identifier previously provided to `fs/watch`. pub watch_id: String, } /// Successful response for `fs/unwatch`. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsUnwatchResponse {} /// Filesystem watch notification emitted for `fs/watch` subscribers. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct FsChangedNotification { /// Watch identifier previously provided to `fs/watch`. pub watch_id: String, /// File or directory paths associated with this event. pub changed_paths: Vec, }