Expose app-server diagnostics through the experimental API (#37470)

## What changed

- Add the experimental `server/diagnostics` request, returning the app-server process ID, resident memory, platform-dependent physical footprint, and registered diagnostic gauges.
- Export the new protocol types in the generated JSON and TypeScript schemas and document the request.

## Testing

- Verify the response includes process measurements and the registered live-thread gauge.
- Verify the request is rejected unless `capabilities.experimentalApi` is enabled.

GitOrigin-RevId: 099d60a9c421a74ff1a72fe524e0dfeb89cf1057
This commit is contained in:
jif
2026-08-07 16:57:47 +00:00
committed by copyberry
parent b3278e96cb
commit 5729546839
18 changed files with 298 additions and 0 deletions
@@ -478,6 +478,14 @@ client_request_definitions! {
response: v1::InitializeResponse,
},
#[experimental("server/diagnostics")]
/// Read content-free, process-local diagnostics.
ServerDiagnostics => "server/diagnostics" {
params: v2::ServerDiagnosticsParams,
serialization: None,
response: v2::ServerDiagnosticsResponse,
},
/// NEW APIs
// Thread lifecycle
// Uses `inspect_params` because only some fields are experimental.
@@ -0,0 +1,37 @@
use crate::JsonSchema;
use crate::TS;
use serde::Deserialize;
use serde::Serialize;
#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ServerDiagnosticsParams {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ServerDiagnosticsResponse {
pub process: ServerDiagnosticsProcess,
pub gauges: Vec<ServerDiagnosticsGauge>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ServerDiagnosticsProcess {
pub id: u32,
#[ts(type = "number | null")]
pub resident_memory_bytes: Option<u64>,
#[ts(type = "number | null")]
pub physical_footprint_bytes: Option<u64>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ServerDiagnosticsGauge {
pub name: String,
#[ts(type = "number")]
pub value: u64,
}
@@ -7,6 +7,7 @@ mod collaboration_mode;
mod command_exec;
mod config;
mod current_time;
mod diagnostics;
mod environment;
mod experimental_feature;
mod feedback;
@@ -35,6 +36,7 @@ pub use collaboration_mode::*;
pub use command_exec::*;
pub use config::*;
pub use current_time::*;
pub use diagnostics::*;
pub use environment::*;
pub use experimental_feature::*;
pub use feedback::*;