@@ -70,6 +70,42 @@ class PermissionUpdate:
7070 directories : list [str ] | None = None
7171 destination : PermissionUpdateDestination | None = None
7272
73+ def to_dict (self ) -> dict [str , Any ]:
74+ """Convert PermissionUpdate to dictionary format matching TypeScript control protocol."""
75+ result : dict [str , Any ] = {
76+ "type" : self .type ,
77+ }
78+
79+ # Add destination for all variants
80+ if self .destination is not None :
81+ result ["destination" ] = self .destination
82+
83+ # Handle different type variants
84+ if self .type in ["addRules" , "replaceRules" , "removeRules" ]:
85+ # Rules-based variants require rules and behavior
86+ if self .rules is not None :
87+ result ["rules" ] = [
88+ {
89+ "toolName" : rule .tool_name ,
90+ "ruleContent" : rule .rule_content ,
91+ }
92+ for rule in self .rules
93+ ]
94+ if self .behavior is not None :
95+ result ["behavior" ] = self .behavior
96+
97+ elif self .type == "setMode" :
98+ # Mode variant requires mode
99+ if self .mode is not None :
100+ result ["mode" ] = self .mode
101+
102+ elif self .type in ["addDirectories" , "removeDirectories" ]:
103+ # Directory variants require directories
104+ if self .directories is not None :
105+ result ["directories" ] = self .directories
106+
107+ return result
108+
73109
74110# Tool callback types
75111@dataclass
0 commit comments