### Overview This PR adds the first piece of tracing for app-server JSON-RPC requests. There are two main changes: - JSON-RPC requests can now take an optional W3C trace context at the top level via a `trace` field (`traceparent` / `tracestate`). - app-server now creates a dedicated request span for every inbound JSON-RPC request in `MessageProcessor`, and uses the request-level trace context as the parent when present. For compatibility with existing flows, app-server still falls back to the TRACEPARENT env var when there is no request-level traceparent. This PR is intentionally scoped to the app-server boundary. In a followup, we'll actually propagate trace context through the async handoff into core execution spans like run_turn, which will make app-server traces much more useful. ### Spans A few details on the app-server span shape: - each inbound request gets its own server span - span/resource names are based on the JSON-RPC method (`initialize`, `thread/start`, `turn/start`, etc.) - spans record transport (stdio vs websocket), request id, connection id, and client name/version when available - `initialize` stores client metadata in session state so later requests on the same connection can reuse it
137 lines
No EOL
2.8 KiB
JSON
137 lines
No EOL
2.8 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/JSONRPCRequest"
|
|
},
|
|
{
|
|
"$ref": "#/definitions/JSONRPCNotification"
|
|
},
|
|
{
|
|
"$ref": "#/definitions/JSONRPCResponse"
|
|
},
|
|
{
|
|
"$ref": "#/definitions/JSONRPCError"
|
|
}
|
|
],
|
|
"definitions": {
|
|
"JSONRPCError": {
|
|
"description": "A response to a request that indicates an error occurred.",
|
|
"properties": {
|
|
"error": {
|
|
"$ref": "#/definitions/JSONRPCErrorError"
|
|
},
|
|
"id": {
|
|
"$ref": "#/definitions/RequestId"
|
|
}
|
|
},
|
|
"required": [
|
|
"error",
|
|
"id"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"JSONRPCErrorError": {
|
|
"properties": {
|
|
"code": {
|
|
"format": "int64",
|
|
"type": "integer"
|
|
},
|
|
"data": true,
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"code",
|
|
"message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"JSONRPCNotification": {
|
|
"description": "A notification which does not expect a response.",
|
|
"properties": {
|
|
"method": {
|
|
"type": "string"
|
|
},
|
|
"params": true
|
|
},
|
|
"required": [
|
|
"method"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"JSONRPCRequest": {
|
|
"description": "A request that expects a response.",
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/definitions/RequestId"
|
|
},
|
|
"method": {
|
|
"type": "string"
|
|
},
|
|
"params": true,
|
|
"trace": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/W3cTraceContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "Optional W3C Trace Context for distributed tracing."
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"method"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"JSONRPCResponse": {
|
|
"description": "A successful (non-error) response to a request.",
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/definitions/RequestId"
|
|
},
|
|
"result": true
|
|
},
|
|
"required": [
|
|
"id",
|
|
"result"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"RequestId": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"format": "int64",
|
|
"type": "integer"
|
|
}
|
|
]
|
|
},
|
|
"W3cTraceContext": {
|
|
"properties": {
|
|
"traceparent": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"tracestate": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"type": "object"
|
|
}
|
|
},
|
|
"description": "Refers to any valid JSON-RPC object that can be decoded off the wire, or encoded to be sent.",
|
|
"title": "JSONRPCMessage"
|
|
} |