Skip to main content

opencode_sdk/types/
pty.rs

1//! PTY (pseudo-terminal) types for opencode_rs.
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// A PTY session.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct Pty {
10    /// PTY identifier.
11    pub id: String,
12    /// PTY title or command.
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub title: Option<String>,
15    /// Shell command.
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub command: Option<String>,
18    /// Working directory.
19    #[serde(default, skip_serializing_if = "Option::is_none")]
20    pub cwd: Option<String>,
21    /// Environment variables.
22    #[serde(default, skip_serializing_if = "Option::is_none")]
23    pub env: Option<HashMap<String, String>>,
24    /// PTY size.
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub size: Option<PtySize>,
27    /// Whether the PTY has exited.
28    #[serde(default)]
29    pub exited: bool,
30    /// Exit code if exited.
31    #[serde(default, skip_serializing_if = "Option::is_none")]
32    pub exit_code: Option<i32>,
33}
34
35/// PTY terminal size.
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct PtySize {
39    /// Number of columns.
40    pub cols: u16,
41    /// Number of rows.
42    pub rows: u16,
43}
44
45/// Request to create a PTY.
46#[derive(Debug, Clone, Default, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct CreatePtyRequest {
49    /// Shell command to run.
50    #[serde(default, skip_serializing_if = "Option::is_none")]
51    pub command: Option<String>,
52    /// Arguments.
53    #[serde(default)]
54    pub args: Vec<String>,
55    /// Working directory.
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub cwd: Option<String>,
58    /// Environment variables.
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub env: Option<HashMap<String, String>>,
61    /// Initial terminal size.
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub size: Option<PtySize>,
64}
65
66/// Request to update a PTY.
67#[derive(Debug, Clone, Default, Serialize, Deserialize)]
68#[serde(rename_all = "camelCase")]
69pub struct UpdatePtyRequest {
70    /// New terminal size.
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub size: Option<PtySize>,
73    /// New title.
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub title: Option<String>,
76}