···9292 (if Permissions.Decision.is_allow decision then "ALLOW" else "DENY"));
93939494 (* Convert permission decision to proto result *)
9595- let proto_result = Permissions.Decision.to_proto_result decision in
9595+ let proto_result = Permissions.Decision.to_proto_result ~original_input:input decision in
96969797 (* Encode to JSON *)
9898 let response_data =
+4-2
lib/permissions.ml
···75757676 let deny_interrupt = function Allow _ -> false | Deny { interrupt; _ } -> interrupt
77777878- let to_proto_result (t : t) : Proto.Permissions.Result.t =
7878+ let to_proto_result ~original_input (t : t) : Proto.Permissions.Result.t =
7979 match t with
8080 | Allow { updated_input } ->
8181 let updated_input_json =
8282- Option.map Tool_input.to_json updated_input
8282+ match updated_input with
8383+ | Some input -> Some (Tool_input.to_json input)
8484+ | None -> Some (Tool_input.to_json original_input) (* Return original when not modified *)
8385 in
8486 Proto.Permissions.Result.allow ?updated_input:updated_input_json ()
8587 | Deny { message; interrupt } ->
+3-2
lib/permissions.mli
···9292 val deny_interrupt : t -> bool
9393 (** [deny_interrupt t] returns whether to interrupt if the decision is deny. *)
94949595- val to_proto_result : t -> Proto.Permissions.Result.t
9696- (** [to_proto_result t] converts to the protocol result representation. *)
9595+ val to_proto_result : original_input:Tool_input.t -> t -> Proto.Permissions.Result.t
9696+ (** [to_proto_result ~original_input t] converts to the protocol result representation.
9797+ When the decision allows without modification, the original_input is returned. *)
9798end
989999100(** {1 Permission Context} *)