aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/mod.rs1
-rw-r--r--src/api/schema.rs87
-rw-r--r--src/api/server.rs3
3 files changed, 91 insertions, 0 deletions
diff --git a/src/api/mod.rs b/src/api/mod.rs
index c168313b..a9a8e25b 100644
--- a/src/api/mod.rs
+++ b/src/api/mod.rs
@@ -22,6 +22,7 @@ pub(crate) fn request_changes_ui(request: &Request) -> bool {
matches!(
&request.method,
Method::ServerReloadConfig(_)
+ | Method::ServerReloadAgentManifests(_)
| Method::NotificationShow(_)
| Method::WorkspaceCreate(_)
| Method::WorkspaceFocus(_)
diff --git a/src/api/schema.rs b/src/api/schema.rs
index 33040248..0eb2d8e2 100644
--- a/src/api/schema.rs
+++ b/src/api/schema.rs
@@ -6,6 +6,10 @@ pub mod panes;
pub use panes::*;
+fn is_false(value: &bool) -> bool {
+ !*value
+}
+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Request {
pub id: String,
@@ -24,6 +28,10 @@ pub enum Method {
ServerLiveHandoff(ServerLiveHandoffParams),
#[serde(rename = "server.reload_config")]
ServerReloadConfig(EmptyParams),
+ #[serde(rename = "server.agent_manifests")]
+ ServerAgentManifests(EmptyParams),
+ #[serde(rename = "server.reload_agent_manifests")]
+ ServerReloadAgentManifests(EmptyParams),
#[serde(rename = "notification.show")]
NotificationShow(NotificationShowParams),
#[serde(rename = "workspace.create")]
@@ -64,6 +72,8 @@ pub enum Method {
AgentGet(AgentTarget),
#[serde(rename = "agent.read")]
AgentRead(AgentReadParams),
+ #[serde(rename = "agent.explain")]
+ AgentExplain(AgentTarget),
#[serde(rename = "agent.send")]
AgentSend(AgentSendParams),
#[serde(rename = "agent.rename")]
@@ -342,6 +352,7 @@ pub enum ReadSource {
Visible,
Recent,
RecentUnwrapped,
+ Detection,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
@@ -665,6 +676,9 @@ pub enum ResponseResult {
PaneRead {
read: PaneReadResult,
},
+ AgentExplain {
+ explain: serde_json::Value,
+ },
SubscriptionStarted {},
WaitMatched {
event: EventEnvelope,
@@ -687,6 +701,16 @@ pub enum ResponseResult {
target: IntegrationTarget,
details: IntegrationUninstallResult,
},
+ AgentManifestReload {
+ manifests: Vec<AgentManifestInfo>,
+ },
+ AgentManifestStatus {
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ last_check_unix: Option<u64>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ last_result: Option<String>,
+ manifests: Vec<AgentManifestInfo>,
+ },
ConfigReload {
status: crate::config::ConfigReloadStatus,
diagnostics: Vec<String>,
@@ -695,6 +719,26 @@ pub enum ResponseResult {
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct AgentManifestInfo {
+ pub agent: String,
+ pub source: String,
+ pub source_kind: String,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub active_version: Option<String>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub cached_remote_version: Option<String>,
+ pub local_override_shadowing_remote: bool,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub remote_update_result: Option<String>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub remote_update_error: Option<String>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub remote_last_checked_unix: Option<u64>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub warning: Option<String>,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkspaceInfo {
pub workspace_id: String,
pub number: usize,
@@ -764,6 +808,8 @@ pub struct AgentInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_agent: Option<String>,
pub agent_status: AgentStatus,
+ #[serde(default, skip_serializing_if = "is_false")]
+ pub screen_detection_skipped: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_status: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
@@ -1116,6 +1162,47 @@ mod tests {
}
#[test]
+ fn request_round_trips_for_server_reload_agent_manifests() {
+ let request = Request {
+ id: "req_reload_agent_manifests".into(),
+ method: Method::ServerReloadAgentManifests(EmptyParams::default()),
+ };
+
+ let json = serde_json::to_value(&request).unwrap();
+ assert_eq!(json["method"], "server.reload_agent_manifests");
+ let restored: Request = serde_json::from_value(json).unwrap();
+ assert_eq!(restored, request);
+ }
+
+ #[test]
+ fn request_round_trips_for_server_agent_manifests() {
+ let request = Request {
+ id: "req_agent_manifests".into(),
+ method: Method::ServerAgentManifests(EmptyParams::default()),
+ };
+
+ let json = serde_json::to_value(&request).unwrap();
+ assert_eq!(json["method"], "server.agent_manifests");
+ let restored: Request = serde_json::from_value(json).unwrap();
+ assert_eq!(restored, request);
+ }
+
+ #[test]
+ fn request_round_trips_for_agent_explain() {
+ let request = Request {
+ id: "req_agent_explain".into(),
+ method: Method::AgentExplain(AgentTarget {
+ target: "agent-1".into(),
+ }),
+ };
+
+ let json = serde_json::to_value(&request).unwrap();
+ assert_eq!(json["method"], "agent.explain");
+ let restored: Request = serde_json::from_value(json).unwrap();
+ assert_eq!(restored, request);
+ }
+
+ #[test]
fn notification_show_request_parses() {
let json = r#"{"id":"req_1","method":"notification.show","params":{"title":"build failed","body":"api workspace","position":"top-left","sound":"request"}}"#;
let request: Request = serde_json::from_str(json).unwrap();
diff --git a/src/api/server.rs b/src/api/server.rs
index 94e8c725..0d49d21d 100644
--- a/src/api/server.rs
+++ b/src/api/server.rs
@@ -276,6 +276,8 @@ fn api_method_name(method: &Method) -> &'static str {
Method::ServerStop(_) => "server.stop",
Method::ServerLiveHandoff(_) => "server.live_handoff",
Method::ServerReloadConfig(_) => "server.reload_config",
+ Method::ServerAgentManifests(_) => "server.agent_manifests",
+ Method::ServerReloadAgentManifests(_) => "server.reload_agent_manifests",
Method::NotificationShow(_) => "notification.show",
Method::WorkspaceCreate(_) => "workspace.create",
Method::WorkspaceList(_) => "workspace.list",
@@ -296,6 +298,7 @@ fn api_method_name(method: &Method) -> &'static str {
Method::AgentList(_) => "agent.list",
Method::AgentGet(_) => "agent.get",
Method::AgentRead(_) => "agent.read",
+ Method::AgentExplain(_) => "agent.explain",
Method::AgentSend(_) => "agent.send",
Method::AgentRename(_) => "agent.rename",
Method::AgentFocus(_) => "agent.focus",