fix(agent): clarify protocol capability contract

This commit is contained in:
t8y2 2026-06-19 14:18:19 +08:00
parent 954dba1e13
commit 4186c94dd4
2 changed files with 65 additions and 5 deletions

View File

@ -1,8 +1,39 @@
{
"protocolVersion": 1,
"handshakeMethod": "handshake",
"handshakeResponseFields": ["protocolVersion", "agentProtocolVersion", "capabilities"],
"capabilities": ["connect", "test_connection", "metadata", "query", "paged_query", "transaction", "ddl", "kv"],
"handshakeResponseFields": [
"protocolVersion",
"agentProtocolVersion",
"capabilities"
],
"allCapabilities": [
"connect",
"test_connection",
"metadata",
"query",
"paged_query",
"transaction",
"ddl",
"kv"
],
"capabilities": [
"connect",
"test_connection",
"metadata",
"query",
"paged_query",
"transaction",
"ddl"
],
"defaultSqlCapabilities": [
"connect",
"test_connection",
"metadata",
"query",
"paged_query",
"transaction",
"ddl"
],
"commonMethods": [
"handshake",
"connect",
@ -26,6 +57,18 @@
"disconnect",
"shutdown"
],
"mongoLegacyMethods": ["list_databases", "list_collections", "find_documents", "insert_document", "update_document", "delete_document"],
"kvMethods": ["kv_list_prefix", "kv_get", "kv_put", "kv_delete"]
"mongoLegacyMethods": [
"list_databases",
"list_collections",
"find_documents",
"insert_document",
"update_document",
"delete_document"
],
"kvMethods": [
"kv_list_prefix",
"kv_get",
"kv_put",
"kv_delete"
]
}

View File

@ -1243,9 +1243,11 @@ mod tests {
vec!["protocolVersion", "agentProtocolVersion", "capabilities"]
);
assert_eq!(
string_array(&contract["capabilities"]),
string_array(&contract["allCapabilities"]),
AgentCapability::ALL.iter().map(|method| method.as_str()).collect::<Vec<_>>()
);
assert_eq!(string_array(&contract["capabilities"]), default_sql_capabilities());
assert_eq!(string_array(&contract["defaultSqlCapabilities"]), default_sql_capabilities());
assert_eq!(
string_array(&contract["commonMethods"]),
AgentMethod::ALL.iter().map(|method| method.as_str()).collect::<Vec<_>>()
@ -1298,4 +1300,19 @@ mod tests {
fn string_array(value: &serde_json::Value) -> Vec<&str> {
value.as_array().unwrap().iter().map(|item| item.as_str().unwrap()).collect()
}
fn default_sql_capabilities() -> Vec<&'static str> {
[
AgentCapability::Connect,
AgentCapability::TestConnection,
AgentCapability::Metadata,
AgentCapability::Query,
AgentCapability::PagedQuery,
AgentCapability::Transaction,
AgentCapability::Ddl,
]
.iter()
.map(|capability| capability.as_str())
.collect()
}
}