agent_workspace_contract/environment/
commands.rs1use serde::{Deserialize, Serialize};
2
3use crate::CommandSpec;
4
5pub const COMPUTER_COMMANDS_PATH: &str = "/internal/v1/workspace/computers/{computerId}/commands";
6pub const COMPUTER_COMMAND_PATH: &str =
7 "/internal/v1/workspace/computers/{computerId}/commands/{commandId}";
8pub const COMPUTER_COMMAND_OUTPUT_PATH: &str =
9 "/internal/v1/workspace/computers/{computerId}/commands/{commandId}/output";
10pub const COMPUTER_COMMAND_CANCEL_PATH: &str =
11 "/internal/v1/workspace/computers/{computerId}/commands/{commandId}/cancel";
12pub const COMPUTER_OWNERS_PATH: &str = "/internal/v1/workspace/computers/{computerId}/owners";
13pub const SPACE_OWNERS_PATH: &str = "/internal/v1/workspace/spaces/{spaceId}/owners";
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
16#[serde(rename_all = "snake_case")]
17pub enum ComputerCommandState {
18 Queued,
19 Running,
20 Succeeded,
21 Failed,
22 Canceling,
23 Canceled,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27#[serde(deny_unknown_fields, rename_all = "camelCase")]
28pub struct CreateComputerCommandRequest {
29 pub space_id: String,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub id: Option<String>,
32 pub command: CommandSpec,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
36#[serde(deny_unknown_fields, rename_all = "camelCase")]
37pub struct ComputerCommandResource {
38 pub id: String,
39 pub computer_id: String,
40 pub space_id: String,
41 pub spec: CommandSpec,
42 pub state: ComputerCommandState,
43 pub output_end_cursor: u64,
44 pub output_truncated: bool,
45 pub version: u64,
46 pub created_at_ms: u64,
47 pub updated_at_ms: u64,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub exit_code: Option<i32>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub error_code: Option<String>,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct ComputerCommandOutputPage {
57 pub chunks: Vec<ComputerCommandOutputChunk>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub next_cursor: Option<u64>,
60 pub truncated: bool,
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct ComputerCommandOutputChunk {
66 pub stream: ComputerCommandOutputStream,
67 pub content: String,
68 pub cursor: u64,
69}
70
71#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
72#[serde(rename_all = "snake_case")]
73pub enum ComputerCommandOutputStream {
74 Stdout,
75 Stderr,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq)]
80pub struct ProviderCommandOutput {
81 pub exit_code: Option<i32>,
82 pub stdout: String,
83 pub stderr: String,
84 pub truncated: bool,
85}