@leaflow/sdk 0.0.0-dev.460.gd867712 → 0.0.0-dev.462.g9520bb3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/fleet/v1/generated/functions.d.ts +28 -14
  2. package/dist/fleet/v1/generated/functions.js +27 -8
  3. package/dist/fleet/v1/generated/models.d.ts +55 -8
  4. package/dist/fleet/v1/generated/models.js +6 -1
  5. package/dist/fleet/v1/generated/schemas.zod.d.ts +33 -12
  6. package/dist/fleet/v1/generated/schemas.zod.js +28 -12
  7. package/dist/fleet/v1/generated/validators/accountList.zod.d.ts +17 -5
  8. package/dist/fleet/v1/generated/validators/accountList.zod.js +17 -5
  9. package/dist/fleet/v1/generated/validators/accountResource.zod.d.ts +17 -5
  10. package/dist/fleet/v1/generated/validators/accountResource.zod.js +17 -5
  11. package/dist/fleet/v1/generated/validators/approveEnrollmentRequest.zod.d.ts +17 -5
  12. package/dist/fleet/v1/generated/validators/approveEnrollmentRequest.zod.js +17 -5
  13. package/dist/fleet/v1/generated/validators/callMcpToolRequest.zod.d.ts +17 -5
  14. package/dist/fleet/v1/generated/validators/callMcpToolRequest.zod.js +17 -5
  15. package/dist/fleet/v1/generated/validators/callMcpToolResponse.zod.d.ts +17 -5
  16. package/dist/fleet/v1/generated/validators/callMcpToolResponse.zod.js +17 -5
  17. package/dist/fleet/v1/generated/validators/createGroupMemberRequest.zod.d.ts +17 -5
  18. package/dist/fleet/v1/generated/validators/createGroupMemberRequest.zod.js +17 -5
  19. package/dist/fleet/v1/generated/validators/createGroupRequest.zod.d.ts +17 -5
  20. package/dist/fleet/v1/generated/validators/createGroupRequest.zod.js +17 -5
  21. package/dist/fleet/v1/generated/validators/createMachineRegistrationRequest.zod.d.ts +17 -5
  22. package/dist/fleet/v1/generated/validators/createMachineRegistrationRequest.zod.js +17 -5
  23. package/dist/fleet/v1/generated/validators/createMachineRegistrationResponse.zod.d.ts +17 -5
  24. package/dist/fleet/v1/generated/validators/createMachineRegistrationResponse.zod.js +17 -5
  25. package/dist/fleet/v1/generated/validators/createParticipantRequest.zod.d.ts +17 -5
  26. package/dist/fleet/v1/generated/validators/createParticipantRequest.zod.js +17 -5
  27. package/dist/fleet/v1/generated/validators/createParticipantResponse.zod.d.ts +17 -5
  28. package/dist/fleet/v1/generated/validators/createParticipantResponse.zod.js +17 -5
  29. package/dist/fleet/v1/generated/validators/createPeerConnectionCandidatesRequest.zod.d.ts +17 -5
  30. package/dist/fleet/v1/generated/validators/createPeerConnectionCandidatesRequest.zod.js +17 -5
  31. package/dist/fleet/v1/generated/validators/createPeerConnectionRequest.zod.d.ts +17 -5
  32. package/dist/fleet/v1/generated/validators/createPeerConnectionRequest.zod.js +17 -5
  33. package/dist/fleet/v1/generated/validators/createSessionRequest.zod.d.ts +17 -5
  34. package/dist/fleet/v1/generated/validators/createSessionRequest.zod.js +17 -5
  35. package/dist/fleet/v1/generated/validators/cursorPagination.zod.d.ts +17 -5
  36. package/dist/fleet/v1/generated/validators/cursorPagination.zod.js +17 -5
  37. package/dist/fleet/v1/generated/validators/deleteMcpServerParams.zod.d.ts +17 -5
  38. package/dist/fleet/v1/generated/validators/deleteMcpServerParams.zod.js +17 -5
  39. package/dist/fleet/v1/generated/validators/denyPrivilegeRequestRequest.zod.d.ts +244 -0
  40. package/dist/fleet/v1/generated/validators/denyPrivilegeRequestRequest.zod.js +246 -0
  41. package/dist/fleet/v1/generated/validators/desktopOptions.zod.d.ts +17 -5
  42. package/dist/fleet/v1/generated/validators/desktopOptions.zod.js +17 -5
  43. package/dist/fleet/v1/generated/validators/desktopState.zod.d.ts +17 -5
  44. package/dist/fleet/v1/generated/validators/desktopState.zod.js +17 -5
  45. package/dist/fleet/v1/generated/validators/directoryName.zod.d.ts +17 -5
  46. package/dist/fleet/v1/generated/validators/directoryName.zod.js +17 -5
  47. package/dist/fleet/v1/generated/validators/enrollmentResource.zod.d.ts +17 -5
  48. package/dist/fleet/v1/generated/validators/enrollmentResource.zod.js +17 -5
  49. package/dist/fleet/v1/generated/validators/enrollmentState.zod.d.ts +17 -5
  50. package/dist/fleet/v1/generated/validators/enrollmentState.zod.js +17 -5
  51. package/dist/fleet/v1/generated/validators/error.zod.d.ts +17 -5
  52. package/dist/fleet/v1/generated/validators/error.zod.js +17 -5
  53. package/dist/fleet/v1/generated/validators/errorStatus.zod.d.ts +17 -5
  54. package/dist/fleet/v1/generated/validators/errorStatus.zod.js +17 -5
  55. package/dist/fleet/v1/generated/validators/featureState.zod.d.ts +17 -5
  56. package/dist/fleet/v1/generated/validators/featureState.zod.js +17 -5
  57. package/dist/fleet/v1/generated/validators/fieldViolation.zod.d.ts +17 -5
  58. package/dist/fleet/v1/generated/validators/fieldViolation.zod.js +17 -5
  59. package/dist/fleet/v1/generated/validators/findEnrollmentByPairingCodeParams.zod.d.ts +17 -5
  60. package/dist/fleet/v1/generated/validators/findEnrollmentByPairingCodeParams.zod.js +17 -5
  61. package/dist/fleet/v1/generated/validators/findEnrollmentResponse.zod.d.ts +17 -5
  62. package/dist/fleet/v1/generated/validators/findEnrollmentResponse.zod.js +17 -5
  63. package/dist/fleet/v1/generated/validators/groupList.zod.d.ts +17 -5
  64. package/dist/fleet/v1/generated/validators/groupList.zod.js +17 -5
  65. package/dist/fleet/v1/generated/validators/groupResource.zod.d.ts +17 -5
  66. package/dist/fleet/v1/generated/validators/groupResource.zod.js +17 -5
  67. package/dist/fleet/v1/generated/validators/iceCandidate.zod.d.ts +17 -5
  68. package/dist/fleet/v1/generated/validators/iceCandidate.zod.js +17 -5
  69. package/dist/fleet/v1/generated/validators/iceServer.zod.d.ts +17 -5
  70. package/dist/fleet/v1/generated/validators/iceServer.zod.js +17 -5
  71. package/dist/fleet/v1/generated/validators/listAccountsParams.zod.d.ts +17 -5
  72. package/dist/fleet/v1/generated/validators/listAccountsParams.zod.js +17 -5
  73. package/dist/fleet/v1/generated/validators/listGroupMembersParams.zod.d.ts +17 -5
  74. package/dist/fleet/v1/generated/validators/listGroupMembersParams.zod.js +17 -5
  75. package/dist/fleet/v1/generated/validators/listGroupsParams.zod.d.ts +17 -5
  76. package/dist/fleet/v1/generated/validators/listGroupsParams.zod.js +17 -5
  77. package/dist/fleet/v1/generated/validators/listMachineEventsParams.zod.d.ts +17 -5
  78. package/dist/fleet/v1/generated/validators/listMachineEventsParams.zod.js +17 -5
  79. package/dist/fleet/v1/generated/validators/listMachineRegistrationsParams.zod.d.ts +17 -5
  80. package/dist/fleet/v1/generated/validators/listMachineRegistrationsParams.zod.js +17 -5
  81. package/dist/fleet/v1/generated/validators/listMachinesParams.zod.d.ts +17 -5
  82. package/dist/fleet/v1/generated/validators/listMachinesParams.zod.js +17 -5
  83. package/dist/fleet/v1/generated/validators/listMcpToolsParams.zod.d.ts +17 -5
  84. package/dist/fleet/v1/generated/validators/listMcpToolsParams.zod.js +17 -5
  85. package/dist/fleet/v1/generated/validators/listPrivilegeAutoApprovalsParams.zod.d.ts +17 -5
  86. package/dist/fleet/v1/generated/validators/listPrivilegeAutoApprovalsParams.zod.js +17 -5
  87. package/dist/fleet/v1/generated/validators/listPrivilegeRequestsParams.zod.d.ts +17 -5
  88. package/dist/fleet/v1/generated/validators/listPrivilegeRequestsParams.zod.js +17 -5
  89. package/dist/fleet/v1/generated/validators/listSessionsParams.zod.d.ts +17 -5
  90. package/dist/fleet/v1/generated/validators/listSessionsParams.zod.js +17 -5
  91. package/dist/fleet/v1/generated/validators/machineEventList.zod.d.ts +17 -5
  92. package/dist/fleet/v1/generated/validators/machineEventList.zod.js +17 -5
  93. package/dist/fleet/v1/generated/validators/machineEventResource.zod.d.ts +17 -5
  94. package/dist/fleet/v1/generated/validators/machineEventResource.zod.js +17 -5
  95. package/dist/fleet/v1/generated/validators/machineEventType.zod.d.ts +17 -5
  96. package/dist/fleet/v1/generated/validators/machineEventType.zod.js +17 -5
  97. package/dist/fleet/v1/generated/validators/machineFeature.zod.d.ts +17 -5
  98. package/dist/fleet/v1/generated/validators/machineFeature.zod.js +17 -5
  99. package/dist/fleet/v1/generated/validators/machineList.zod.d.ts +17 -5
  100. package/dist/fleet/v1/generated/validators/machineList.zod.js +17 -5
  101. package/dist/fleet/v1/generated/validators/machineRegistrationList.zod.d.ts +17 -5
  102. package/dist/fleet/v1/generated/validators/machineRegistrationList.zod.js +17 -5
  103. package/dist/fleet/v1/generated/validators/machineRegistrationResource.zod.d.ts +17 -5
  104. package/dist/fleet/v1/generated/validators/machineRegistrationResource.zod.js +17 -5
  105. package/dist/fleet/v1/generated/validators/machineRegistrationState.zod.d.ts +17 -5
  106. package/dist/fleet/v1/generated/validators/machineRegistrationState.zod.js +17 -5
  107. package/dist/fleet/v1/generated/validators/machineResource.zod.d.ts +17 -5
  108. package/dist/fleet/v1/generated/validators/machineResource.zod.js +17 -5
  109. package/dist/fleet/v1/generated/validators/mcpConfigurationFile.zod.d.ts +17 -5
  110. package/dist/fleet/v1/generated/validators/mcpConfigurationFile.zod.js +17 -5
  111. package/dist/fleet/v1/generated/validators/mcpConfigurationResource.zod.d.ts +17 -5
  112. package/dist/fleet/v1/generated/validators/mcpConfigurationResource.zod.js +17 -5
  113. package/dist/fleet/v1/generated/validators/mcpImplementation.zod.d.ts +17 -5
  114. package/dist/fleet/v1/generated/validators/mcpImplementation.zod.js +17 -5
  115. package/dist/fleet/v1/generated/validators/mcpServerFailure.zod.d.ts +17 -5
  116. package/dist/fleet/v1/generated/validators/mcpServerFailure.zod.js +17 -5
  117. package/dist/fleet/v1/generated/validators/mcpServerResource.zod.d.ts +17 -5
  118. package/dist/fleet/v1/generated/validators/mcpServerResource.zod.js +17 -5
  119. package/dist/fleet/v1/generated/validators/mcpToolList.zod.d.ts +17 -5
  120. package/dist/fleet/v1/generated/validators/mcpToolList.zod.js +17 -5
  121. package/dist/fleet/v1/generated/validators/mcpToolResource.zod.d.ts +17 -5
  122. package/dist/fleet/v1/generated/validators/mcpToolResource.zod.js +17 -5
  123. package/dist/fleet/v1/generated/validators/mcpTransport.zod.d.ts +17 -5
  124. package/dist/fleet/v1/generated/validators/mcpTransport.zod.js +17 -5
  125. package/dist/fleet/v1/generated/validators/mcpUnavailableServer.zod.d.ts +17 -5
  126. package/dist/fleet/v1/generated/validators/mcpUnavailableServer.zod.js +17 -5
  127. package/dist/fleet/v1/generated/validators/migrationStep.zod.d.ts +17 -5
  128. package/dist/fleet/v1/generated/validators/migrationStep.zod.js +17 -5
  129. package/dist/fleet/v1/generated/validators/namedIdentity.zod.d.ts +17 -5
  130. package/dist/fleet/v1/generated/validators/namedIdentity.zod.js +17 -5
  131. package/dist/fleet/v1/generated/validators/offsetPagination.zod.d.ts +17 -5
  132. package/dist/fleet/v1/generated/validators/offsetPagination.zod.js +17 -5
  133. package/dist/fleet/v1/generated/validators/operatingSystem.zod.d.ts +17 -5
  134. package/dist/fleet/v1/generated/validators/operatingSystem.zod.js +17 -5
  135. package/dist/fleet/v1/generated/validators/participantList.zod.d.ts +17 -5
  136. package/dist/fleet/v1/generated/validators/participantList.zod.js +17 -5
  137. package/dist/fleet/v1/generated/validators/participantResource.zod.d.ts +17 -5
  138. package/dist/fleet/v1/generated/validators/participantResource.zod.js +17 -5
  139. package/dist/fleet/v1/generated/validators/peerConnection.zod.d.ts +17 -5
  140. package/dist/fleet/v1/generated/validators/peerConnection.zod.js +17 -5
  141. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalList.zod.d.ts +21 -5
  142. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalList.zod.js +17 -5
  143. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalMode.zod.d.ts +244 -0
  144. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalMode.zod.js +241 -0
  145. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalResource.zod.d.ts +21 -5
  146. package/dist/fleet/v1/generated/validators/privilegeAutoApprovalResource.zod.js +19 -5
  147. package/dist/fleet/v1/generated/validators/privilegeDecider.zod.d.ts +19 -6
  148. package/dist/fleet/v1/generated/validators/privilegeDecider.zod.js +19 -7
  149. package/dist/fleet/v1/generated/validators/privilegeRequestList.zod.d.ts +20 -6
  150. package/dist/fleet/v1/generated/validators/privilegeRequestList.zod.js +17 -5
  151. package/dist/fleet/v1/generated/validators/privilegeRequestResource.zod.d.ts +21 -6
  152. package/dist/fleet/v1/generated/validators/privilegeRequestResource.zod.js +23 -5
  153. package/dist/fleet/v1/generated/validators/privilegeRequestState.zod.d.ts +17 -5
  154. package/dist/fleet/v1/generated/validators/privilegeRequestState.zod.js +17 -5
  155. package/dist/fleet/v1/generated/validators/publicKey.zod.d.ts +17 -5
  156. package/dist/fleet/v1/generated/validators/publicKey.zod.js +17 -5
  157. package/dist/fleet/v1/generated/validators/renewParticipantRequest.zod.d.ts +17 -5
  158. package/dist/fleet/v1/generated/validators/renewParticipantRequest.zod.js +17 -5
  159. package/dist/fleet/v1/generated/validators/renewParticipantResponse.zod.d.ts +17 -5
  160. package/dist/fleet/v1/generated/validators/renewParticipantResponse.zod.js +17 -5
  161. package/dist/fleet/v1/generated/validators/replaceMcpConfigurationRequest.zod.d.ts +17 -5
  162. package/dist/fleet/v1/generated/validators/replaceMcpConfigurationRequest.zod.js +17 -5
  163. package/dist/fleet/v1/generated/validators/rtcConfiguration.zod.d.ts +17 -5
  164. package/dist/fleet/v1/generated/validators/rtcConfiguration.zod.js +17 -5
  165. package/dist/fleet/v1/generated/validators/runCommandRequest.zod.d.ts +17 -5
  166. package/dist/fleet/v1/generated/validators/runCommandRequest.zod.js +17 -5
  167. package/dist/fleet/v1/generated/validators/runCommandResponse.zod.d.ts +17 -5
  168. package/dist/fleet/v1/generated/validators/runCommandResponse.zod.js +17 -5
  169. package/dist/fleet/v1/generated/validators/sendMcpRequestRequest.zod.d.ts +17 -5
  170. package/dist/fleet/v1/generated/validators/sendMcpRequestRequest.zod.js +17 -5
  171. package/dist/fleet/v1/generated/validators/sendMcpRequestResponse.zod.d.ts +17 -5
  172. package/dist/fleet/v1/generated/validators/sendMcpRequestResponse.zod.js +17 -5
  173. package/dist/fleet/v1/generated/validators/sessionCloseReason.zod.d.ts +17 -5
  174. package/dist/fleet/v1/generated/validators/sessionCloseReason.zod.js +17 -5
  175. package/dist/fleet/v1/generated/validators/sessionList.zod.d.ts +17 -5
  176. package/dist/fleet/v1/generated/validators/sessionList.zod.js +17 -5
  177. package/dist/fleet/v1/generated/validators/sessionMode.zod.d.ts +17 -5
  178. package/dist/fleet/v1/generated/validators/sessionMode.zod.js +17 -5
  179. package/dist/fleet/v1/generated/validators/sessionResource.zod.d.ts +17 -5
  180. package/dist/fleet/v1/generated/validators/sessionResource.zod.js +17 -5
  181. package/dist/fleet/v1/generated/validators/sessionState.zod.d.ts +17 -5
  182. package/dist/fleet/v1/generated/validators/sessionState.zod.js +17 -5
  183. package/dist/fleet/v1/generated/validators/signedMessage.zod.d.ts +17 -5
  184. package/dist/fleet/v1/generated/validators/signedMessage.zod.js +17 -5
  185. package/dist/fleet/v1/generated/validators/signingKey.zod.d.ts +17 -5
  186. package/dist/fleet/v1/generated/validators/signingKey.zod.js +17 -5
  187. package/dist/fleet/v1/generated/validators/updateAccountRequest.zod.d.ts +17 -5
  188. package/dist/fleet/v1/generated/validators/updateAccountRequest.zod.js +17 -5
  189. package/dist/fleet/v1/generated/validators/updateGroupRequest.zod.d.ts +17 -5
  190. package/dist/fleet/v1/generated/validators/updateGroupRequest.zod.js +17 -5
  191. package/dist/fleet/v1/generated/validators/updateMachineRequest.zod.d.ts +17 -5
  192. package/dist/fleet/v1/generated/validators/updateMachineRequest.zod.js +17 -5
  193. package/dist/fleet/v1/generated/validators/updateMcpServerRequest.zod.d.ts +17 -5
  194. package/dist/fleet/v1/generated/validators/updateMcpServerRequest.zod.js +17 -5
  195. package/dist/fleet/v1/generated/validators/updateMcpServerResponse.zod.d.ts +17 -5
  196. package/dist/fleet/v1/generated/validators/updateMcpServerResponse.zod.js +17 -5
  197. package/dist/fleet/v1/generated/validators/updatePrivilegeAutoApprovalRequest.zod.d.ts +21 -5
  198. package/dist/fleet/v1/generated/validators/updatePrivilegeAutoApprovalRequest.zod.js +19 -5
  199. package/dist/proto/leaflow/fleet/privilege/v1/privilege_pb.d.ts +20 -5
  200. package/dist/proto/leaflow/fleet/privilege/v1/privilege_pb.js +1 -1
  201. package/package.json +1 -1
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -223,7 +235,7 @@
223
235
  * revoked. A participant whose creation failed is not announced.
224
236
  * OpenAPI spec version: 1.0.0
225
237
  */
226
- import type { AccountList, AccountResource, ApproveEnrollmentRequest, CallMcpToolRequest, CallMcpToolResponse, CreateGroupMemberRequest, CreateGroupRequest, CreateMachineRegistrationRequest, CreateMachineRegistrationResponse, CreateParticipantRequest, CreateParticipantResponse, CreatePeerConnectionCandidatesRequest, CreatePeerConnectionRequest, CreateSessionRequest, DeleteMcpServerParams, EnrollmentResource, Error, FindEnrollmentByPairingCodeParams, FindEnrollmentResponse, GroupList, GroupResource, ListAccountsParams, ListGroupMembersParams, ListGroupsParams, ListMachineEventsParams, ListMachineRegistrationsParams, ListMachinesParams, ListMcpToolsParams, ListPrivilegeAutoApprovalsParams, ListPrivilegeRequestsParams, ListSessionsParams, MachineEventList, MachineList, MachineRegistrationList, MachineRegistrationResource, MachineResource, McpConfigurationFile, McpConfigurationResource, McpToolList, MigrationStep, ParticipantList, ParticipantResource, PeerConnection, PrivilegeAutoApprovalList, PrivilegeAutoApprovalResource, PrivilegeRequestList, PrivilegeRequestResource, RenewParticipantRequest, RenewParticipantResponse, ReplaceMcpConfigurationRequest, RtcConfiguration, RunCommandRequest, RunCommandResponse, SendMcpRequestRequest, SendMcpRequestResponse, SessionList, SessionResource, UpdateAccountRequest, UpdateGroupRequest, UpdateMachineRequest, UpdateMcpServerRequest, UpdateMcpServerResponse, UpdatePrivilegeAutoApprovalRequest } from "./models.js";
238
+ import type { AccountList, AccountResource, ApproveEnrollmentRequest, CallMcpToolRequest, CallMcpToolResponse, CreateGroupMemberRequest, CreateGroupRequest, CreateMachineRegistrationRequest, CreateMachineRegistrationResponse, CreateParticipantRequest, CreateParticipantResponse, CreatePeerConnectionCandidatesRequest, CreatePeerConnectionRequest, CreateSessionRequest, DeleteMcpServerParams, DenyPrivilegeRequestRequest, EnrollmentResource, Error, FindEnrollmentByPairingCodeParams, FindEnrollmentResponse, GroupList, GroupResource, ListAccountsParams, ListGroupMembersParams, ListGroupsParams, ListMachineEventsParams, ListMachineRegistrationsParams, ListMachinesParams, ListMcpToolsParams, ListPrivilegeAutoApprovalsParams, ListPrivilegeRequestsParams, ListSessionsParams, MachineEventList, MachineList, MachineRegistrationList, MachineRegistrationResource, MachineResource, McpConfigurationFile, McpConfigurationResource, McpToolList, MigrationStep, ParticipantList, ParticipantResource, PeerConnection, PrivilegeAutoApprovalList, PrivilegeAutoApprovalResource, PrivilegeRequestList, PrivilegeRequestResource, RenewParticipantRequest, RenewParticipantResponse, ReplaceMcpConfigurationRequest, RtcConfiguration, RunCommandRequest, RunCommandResponse, SendMcpRequestRequest, SendMcpRequestResponse, SessionList, SessionResource, UpdateAccountRequest, UpdateGroupRequest, UpdateMachineRequest, UpdateMcpServerRequest, UpdateMcpServerResponse, UpdatePrivilegeAutoApprovalRequest } from "./models.js";
227
239
  export type HTTPStatusCode1xx = 100 | 101 | 102 | 103;
228
240
  export type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;
229
241
  export type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;
@@ -660,12 +672,14 @@ export type updatePrivilegeAutoApprovalResponseError = updatePrivilegeAutoApprov
660
672
  export type updatePrivilegeAutoApprovalResponse = updatePrivilegeAutoApprovalResponseSuccess | updatePrivilegeAutoApprovalResponseError;
661
673
  export declare const getUpdatePrivilegeAutoApprovalUrl: (machineId: string) => string;
662
674
  /**
663
- * Approves the caller's privilege requests on the machine at once, until `expires_at`, or
664
- * until removed when `expires_at` is null, replacing any earlier automatic approval. It
665
- * applies to the caller's own account only, which is created if the caller has none yet,
666
- * and only while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
675
+ * Has the caller's privilege requests on the machine decided without asking them, in
676
+ * `mode`, until `expires_at`, or until removed when `expires_at` is null, replacing any
677
+ * earlier automatic approval. `automatic_review` is recommended; with `always_approve` any
678
+ * program that runs as the account becomes root without anyone being asked. It applies to
679
+ * the caller's own account only, which is created if the caller has none yet, and only
680
+ * while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
667
681
  * `expires_at` has passed.
668
- * @summary Approve the caller's privilege requests on a machine without asking
682
+ * @summary Decide the caller's privilege requests on a machine without asking
669
683
  */
670
684
  export declare const updatePrivilegeAutoApproval: (machineId: string, updatePrivilegeAutoApprovalRequest: UpdatePrivilegeAutoApprovalRequest, options?: RequestInit, fetchFn?: typeof globalThis.fetch) => Promise<updatePrivilegeAutoApprovalResponse>;
671
685
  export type deletePrivilegeAutoApprovalResponse204 = {
@@ -795,11 +809,11 @@ export type denyPrivilegeRequestResponseError = denyPrivilegeRequestResponseDefa
795
809
  export type denyPrivilegeRequestResponse = denyPrivilegeRequestResponseSuccess | denyPrivilegeRequestResponseError;
796
810
  export declare const getDenyPrivilegeRequestUrl: (requestId: string) => string;
797
811
  /**
798
- * Denies one of the caller's pending requests; the waiting sudo fails. Fails with
799
- * `PRIVILEGE_REQUEST_CLOSED` as for approving.
812
+ * Denies one of the caller's pending requests; the waiting sudo fails and shows `reason`,
813
+ * when given, to whoever ran it. Fails with `PRIVILEGE_REQUEST_CLOSED` as for approving.
800
814
  * @summary Deny a privilege request
801
815
  */
802
- export declare const denyPrivilegeRequest: (requestId: string, options?: RequestInit, fetchFn?: typeof globalThis.fetch) => Promise<denyPrivilegeRequestResponse>;
816
+ export declare const denyPrivilegeRequest: (requestId: string, denyPrivilegeRequestRequest?: DenyPrivilegeRequestRequest, options?: RequestInit, fetchFn?: typeof globalThis.fetch) => Promise<denyPrivilegeRequestResponse>;
803
817
  export type findEnrollmentByPairingCodeResponse200 = {
804
818
  data: FindEnrollmentResponse;
805
819
  status: 200;
@@ -483,12 +483,14 @@ export const getUpdatePrivilegeAutoApprovalUrl = (machineId) => {
483
483
  return `https://fleet.leaflow.cloud/api/v1/machines/${encodeURIComponent(String(machineId))}/privilege-auto-approval`;
484
484
  };
485
485
  /**
486
- * Approves the caller's privilege requests on the machine at once, until `expires_at`, or
487
- * until removed when `expires_at` is null, replacing any earlier automatic approval. It
488
- * applies to the caller's own account only, which is created if the caller has none yet,
489
- * and only while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
486
+ * Has the caller's privilege requests on the machine decided without asking them, in
487
+ * `mode`, until `expires_at`, or until removed when `expires_at` is null, replacing any
488
+ * earlier automatic approval. `automatic_review` is recommended; with `always_approve` any
489
+ * program that runs as the account becomes root without anyone being asked. It applies to
490
+ * the caller's own account only, which is created if the caller has none yet, and only
491
+ * while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
490
492
  * `expires_at` has passed.
491
- * @summary Approve the caller's privilege requests on a machine without asking
493
+ * @summary Decide the caller's privilege requests on a machine without asking
492
494
  */
493
495
  export const updatePrivilegeAutoApproval = async (machineId, updatePrivilegeAutoApprovalRequest, options, fetchFn) => {
494
496
  const getHeaders = (h) => {
@@ -623,14 +625,31 @@ export const getDenyPrivilegeRequestUrl = (requestId) => {
623
625
  return `https://fleet.leaflow.cloud/api/v1/privilege-requests/${encodeURIComponent(String(requestId))}:deny`;
624
626
  };
625
627
  /**
626
- * Denies one of the caller's pending requests; the waiting sudo fails. Fails with
627
- * `PRIVILEGE_REQUEST_CLOSED` as for approving.
628
+ * Denies one of the caller's pending requests; the waiting sudo fails and shows `reason`,
629
+ * when given, to whoever ran it. Fails with `PRIVILEGE_REQUEST_CLOSED` as for approving.
628
630
  * @summary Deny a privilege request
629
631
  */
630
- export const denyPrivilegeRequest = async (requestId, options, fetchFn) => {
632
+ export const denyPrivilegeRequest = async (requestId, denyPrivilegeRequestRequest, options, fetchFn) => {
633
+ const getHeaders = (h) => {
634
+ if (!h)
635
+ return {};
636
+ if (h instanceof Headers)
637
+ return Object.fromEntries(h.entries());
638
+ if (Symbol.iterator in h) {
639
+ return Object.fromEntries(Array.from(h, (entry) => Array.from(entry)));
640
+ }
641
+ const headers = {};
642
+ for (const [name, value] of Object.entries(h)) {
643
+ if (value !== undefined)
644
+ headers[name] = value;
645
+ }
646
+ return headers;
647
+ };
631
648
  const res = await (fetchFn ?? fetch)(getDenyPrivilegeRequestUrl(requestId), {
632
649
  ...options,
633
650
  method: "POST",
651
+ headers: { "Content-Type": "application/json", ...getHeaders(options?.headers) },
652
+ body: JSON.stringify(denyPrivilegeRequestRequest),
634
653
  });
635
654
  const body = [204, 205, 304].includes(res.status) ? null : await res.text();
636
655
  const data = body ? JSON.parse(body) : {};
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -1039,7 +1051,25 @@ export interface McpToolList {
1039
1051
  /** Servers whose tools are missing because they could not be started or reached */
1040
1052
  unavailable_servers: McpUnavailableServer[];
1041
1053
  }
1054
+ /**
1055
+ * How the caller's privilege requests on the machine are decided without asking them:
1056
+ * - `automatic_review`, recommended: a large language model reviews each request from what
1057
+ * the machine reports about it, chiefly the command line, and approves or denies it with
1058
+ * a reason. It stops most dangerous requests, but not all of them. Each review is a
1059
+ * request to Canopy through the project's Canopy service and may incur Canopy charges. A
1060
+ * request that cannot be reviewed, such as when the project has not enabled Canopy, is
1061
+ * denied.
1062
+ * - `always_approve`: every request is approved at once. Dangerous: any program that runs
1063
+ * as the account, such as a script or an AI agent, becomes root without anyone being
1064
+ * asked.
1065
+ */
1066
+ export type PrivilegeAutoApprovalMode = (typeof PrivilegeAutoApprovalMode)[keyof typeof PrivilegeAutoApprovalMode];
1067
+ export declare const PrivilegeAutoApprovalMode: {
1068
+ readonly automatic_review: "automatic_review";
1069
+ readonly always_approve: "always_approve";
1070
+ };
1042
1071
  export interface UpdatePrivilegeAutoApprovalRequest {
1072
+ mode: PrivilegeAutoApprovalMode;
1043
1073
  /**
1044
1074
  * When the automatic approval ends; null for one that lasts until removed
1045
1075
  * @nullable
@@ -1049,6 +1079,7 @@ export interface UpdatePrivilegeAutoApprovalRequest {
1049
1079
  export interface PrivilegeAutoApprovalResource {
1050
1080
  id: string;
1051
1081
  machine_id: string;
1082
+ mode: PrivilegeAutoApprovalMode;
1052
1083
  /**
1053
1084
  * When the automatic approval ends; null for one that lasts until removed
1054
1085
  * @nullable
@@ -1067,14 +1098,23 @@ export interface PrivilegeAutoApprovalList {
1067
1098
  page_size: number;
1068
1099
  }
1069
1100
  /**
1070
- * Who decided a request on the platform: `user` the user, or `auto_approval` the user's
1071
- * automatic approval for the machine, at once.
1101
+ * Who decided a request on the platform: `user` the user, `always_approve` the user's
1102
+ * automatic approval that approves every request, or `automatic_review` the large language
1103
+ * model that reviewed it.
1072
1104
  */
1073
1105
  export type PrivilegeDecider = (typeof PrivilegeDecider)[keyof typeof PrivilegeDecider];
1074
1106
  export declare const PrivilegeDecider: {
1075
1107
  readonly user: "user";
1076
- readonly auto_approval: "auto_approval";
1108
+ readonly always_approve: "always_approve";
1109
+ readonly automatic_review: "automatic_review";
1077
1110
  };
1111
+ export interface DenyPrivilegeRequestRequest {
1112
+ /**
1113
+ * Why, shown to whoever ran sudo: plain text without control characters
1114
+ * @maxLength 200
1115
+ */
1116
+ reason?: string;
1117
+ }
1078
1118
  /**
1079
1119
  * `pending` waits for a decision; `approved` and `denied` were decided on the platform, as
1080
1120
  * `decided_by` tells; `expired` was not decided in time; `cancelled` means the machine
@@ -1115,6 +1155,13 @@ export interface PrivilegeRequestResource {
1115
1155
  state: PrivilegeRequestState;
1116
1156
  /** Who decided an `approved` or `denied` request; null in any other state */
1117
1157
  decided_by: PrivilegeDecider | null;
1158
+ /**
1159
+ * Why the request was decided so: as the user gave it when denying, or as the automatic
1160
+ * review gave it, including why a review could not be made; null when none was given
1161
+ * @maxLength 200
1162
+ * @nullable
1163
+ */
1164
+ reason: string | null;
1118
1165
  created_at: string;
1119
1166
  expires_at: string;
1120
1167
  /**
@@ -68,9 +68,14 @@ export const McpServerFailure = {
68
68
  protocol_error: "protocol_error",
69
69
  timeout: "timeout",
70
70
  };
71
+ export const PrivilegeAutoApprovalMode = {
72
+ automatic_review: "automatic_review",
73
+ always_approve: "always_approve",
74
+ };
71
75
  export const PrivilegeDecider = {
72
76
  user: "user",
73
- auto_approval: "auto_approval",
77
+ always_approve: "always_approve",
78
+ automatic_review: "automatic_review",
74
79
  };
75
80
  export const PrivilegeRequestState = {
76
81
  pending: "pending",
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -520,17 +532,23 @@ export declare const GetPrivilegeAutoApprovalParams: zod.ZodObject<{
520
532
  machineId: zod.ZodUUID;
521
533
  }, zod.z.core.$strict>;
522
534
  /**
523
- * Approves the caller's privilege requests on the machine at once, until `expires_at`, or
524
- * until removed when `expires_at` is null, replacing any earlier automatic approval. It
525
- * applies to the caller's own account only, which is created if the caller has none yet,
526
- * and only while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
535
+ * Has the caller's privilege requests on the machine decided without asking them, in
536
+ * `mode`, until `expires_at`, or until removed when `expires_at` is null, replacing any
537
+ * earlier automatic approval. `automatic_review` is recommended; with `always_approve` any
538
+ * program that runs as the account becomes root without anyone being asked. It applies to
539
+ * the caller's own account only, which is created if the caller has none yet, and only
540
+ * while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
527
541
  * `expires_at` has passed.
528
- * @summary Approve the caller's privilege requests on a machine without asking
542
+ * @summary Decide the caller's privilege requests on a machine without asking
529
543
  */
530
544
  export declare const UpdatePrivilegeAutoApprovalParams: zod.ZodObject<{
531
545
  machineId: zod.ZodUUID;
532
546
  }, zod.z.core.$strict>;
533
547
  export declare const UpdatePrivilegeAutoApprovalBody: zod.ZodObject<{
548
+ mode: zod.ZodEnum<{
549
+ automatic_review: "automatic_review";
550
+ always_approve: "always_approve";
551
+ }>;
534
552
  expires_at: zod.ZodNullable<zod.z.ZodISODateTime>;
535
553
  }, zod.z.core.$strict>;
536
554
  /**
@@ -592,13 +610,16 @@ export declare const ApprovePrivilegeRequestParams: zod.ZodObject<{
592
610
  requestId: zod.ZodUUID;
593
611
  }, zod.z.core.$strict>;
594
612
  /**
595
- * Denies one of the caller's pending requests; the waiting sudo fails. Fails with
596
- * `PRIVILEGE_REQUEST_CLOSED` as for approving.
613
+ * Denies one of the caller's pending requests; the waiting sudo fails and shows `reason`,
614
+ * when given, to whoever ran it. Fails with `PRIVILEGE_REQUEST_CLOSED` as for approving.
597
615
  * @summary Deny a privilege request
598
616
  */
599
617
  export declare const DenyPrivilegeRequestParams: zod.ZodObject<{
600
618
  requestId: zod.ZodUUID;
601
619
  }, zod.z.core.$strict>;
620
+ export declare const DenyPrivilegeRequestBody: zod.ZodObject<{
621
+ reason: zod.ZodOptional<zod.ZodString>;
622
+ }, zod.z.core.$strict>;
602
623
  /**
603
624
  * Returns the pending enrollment request whose pairing code matches, or no enrollment when
604
625
  * none does. Mistyped codes are expected and are not an error. Letters are matched
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -233,6 +245,7 @@ import { CreateParticipantRequest } from "./validators/createParticipantRequest.
233
245
  import { CreatePeerConnectionCandidatesRequest } from "./validators/createPeerConnectionCandidatesRequest.zod.js";
234
246
  import { CreatePeerConnectionRequest } from "./validators/createPeerConnectionRequest.zod.js";
235
247
  import { CreateSessionRequest } from "./validators/createSessionRequest.zod.js";
248
+ import { DenyPrivilegeRequestRequest } from "./validators/denyPrivilegeRequestRequest.zod.js";
236
249
  import { MigrationStep } from "./validators/migrationStep.zod.js";
237
250
  import { RenewParticipantRequest } from "./validators/renewParticipantRequest.zod.js";
238
251
  import { ReplaceMcpConfigurationRequest } from "./validators/replaceMcpConfigurationRequest.zod.js";
@@ -567,12 +580,14 @@ export const GetPrivilegeAutoApprovalParams = zod.strictObject({
567
580
  machineId: zod.uuid(),
568
581
  });
569
582
  /**
570
- * Approves the caller's privilege requests on the machine at once, until `expires_at`, or
571
- * until removed when `expires_at` is null, replacing any earlier automatic approval. It
572
- * applies to the caller's own account only, which is created if the caller has none yet,
573
- * and only while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
583
+ * Has the caller's privilege requests on the machine decided without asking them, in
584
+ * `mode`, until `expires_at`, or until removed when `expires_at` is null, replacing any
585
+ * earlier automatic approval. `automatic_review` is recommended; with `always_approve` any
586
+ * program that runs as the account becomes root without anyone being asked. It applies to
587
+ * the caller's own account only, which is created if the caller has none yet, and only
588
+ * while they may become root on the machine. Fails with `INVALID_ARGUMENT` when
574
589
  * `expires_at` has passed.
575
- * @summary Approve the caller's privilege requests on a machine without asking
590
+ * @summary Decide the caller's privilege requests on a machine without asking
576
591
  */
577
592
  export const UpdatePrivilegeAutoApprovalParams = zod.strictObject({
578
593
  machineId: zod.uuid(),
@@ -654,13 +669,14 @@ export const ApprovePrivilegeRequestParams = zod.strictObject({
654
669
  requestId: zod.uuid(),
655
670
  });
656
671
  /**
657
- * Denies one of the caller's pending requests; the waiting sudo fails. Fails with
658
- * `PRIVILEGE_REQUEST_CLOSED` as for approving.
672
+ * Denies one of the caller's pending requests; the waiting sudo fails and shows `reason`,
673
+ * when given, to whoever ran it. Fails with `PRIVILEGE_REQUEST_CLOSED` as for approving.
659
674
  * @summary Deny a privilege request
660
675
  */
661
676
  export const DenyPrivilegeRequestParams = zod.strictObject({
662
677
  requestId: zod.uuid(),
663
678
  });
679
+ export const DenyPrivilegeRequestBody = DenyPrivilegeRequestRequest;
664
680
  /**
665
681
  * Returns the pending enrollment request whose pairing code matches, or no enrollment when
666
682
  * none does. Mistyped codes are expected and are not an error. Letters are matched
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop
@@ -139,16 +139,28 @@
139
139
  * applies:
140
140
  *
141
141
  * - inside a command run through this API, by the request itself;
142
- * - at once, while the user has approved their requests on the machine without asking, for a
143
- * while or until removed (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`);
142
+ * - by the user's automatic approval for the machine, for a while or until removed
143
+ * (`PUT /api/v1/machines/{machineId}/privilege-auto-approval`), in one of two modes:
144
+ * - `automatic_review`, the recommended one: a large language model reviews each request and
145
+ * approves or denies it with a reason. It stops most dangerous requests, but not all of
146
+ * them. Each review is a request to Canopy, the model platform, through the project's
147
+ * Canopy service, and may incur Canopy charges; the project needs Canopy enabled. A
148
+ * request that cannot be reviewed, such as when the project has not enabled Canopy or the
149
+ * review does not complete in time, is denied with a reason saying so;
150
+ * - `always_approve`: every request is approved at once. This is dangerous: any program that
151
+ * runs as the account, such as a script or an AI agent, becomes root without anyone being
152
+ * asked;
144
153
  * - by the user, on any of their devices, for a request listed by `GET /api/v1/privilege-requests`
145
154
  * (`POST …:approve` or `…:deny`), or on a participant of the session the asking process belongs
146
155
  * to. A request nobody decides expires, and sudo fails.
147
156
  *
157
+ * A denied sudo shows whoever ran it the reason, when the denial gave one.
158
+ *
148
159
  * Requests reach the user's devices as they happen through EventBus: the event
149
- * `leaflow.fleet.privilege.requested` when one is waiting and `leaflow.fleet.privilege.decided`
150
- * when it ends, each addressed to the user in the current project and carrying the request's
151
- * `id`. A client that subscribes to them needs no polling; one that does not can list the
160
+ * `leaflow.fleet.privilege.requested` when one waits for the user and
161
+ * `leaflow.fleet.privilege.decided` when it ends, each addressed to the user in the current
162
+ * project and carrying the request's `id`. Requests decided without asking the user raise
163
+ * neither. A client that subscribes to them needs no polling; one that does not can list the
152
164
  * pending requests.
153
165
  *
154
166
  * ## Connections that drop