@leaflow/sdk 0.187.2 → 0.189.0
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.
- package/README.md +9 -18
- package/dist/fleet/v1/generated/functions.d.ts +32 -18
- package/dist/fleet/v1/generated/functions.js +31 -12
- package/dist/fleet/v1/generated/models.d.ts +60 -15
- package/dist/fleet/v1/generated/models.js +6 -2
- package/dist/fleet/v1/generated/schemas.zod.d.ts +37 -17
- package/dist/fleet/v1/generated/schemas.zod.js +32 -16
- package/dist/fleet/v1/generated/validators/accountList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/accountList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/accountResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/accountResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/approveEnrollmentRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/approveEnrollmentRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/callMcpToolRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/callMcpToolRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/callMcpToolResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/callMcpToolResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createGroupMemberRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createGroupMemberRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createGroupRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createGroupRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createMachineRegistrationRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createMachineRegistrationRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createMachineRegistrationResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createMachineRegistrationResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createParticipantRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createParticipantRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createParticipantResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createParticipantResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createPeerConnectionCandidatesRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createPeerConnectionCandidatesRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createPeerConnectionRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createPeerConnectionRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/createSessionRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/createSessionRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/cursorPagination.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/cursorPagination.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/deleteMcpServerParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/deleteMcpServerParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/denyPrivilegeRequestRequest.zod.d.ts +244 -0
- package/dist/fleet/v1/generated/validators/denyPrivilegeRequestRequest.zod.js +246 -0
- package/dist/fleet/v1/generated/validators/desktopOptions.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/desktopOptions.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/desktopState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/desktopState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/directoryName.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/directoryName.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/enrollmentResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/enrollmentResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/enrollmentState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/enrollmentState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/error.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/error.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/errorStatus.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/errorStatus.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/featureState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/featureState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/fieldViolation.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/fieldViolation.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/findEnrollmentByPairingCodeParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/findEnrollmentByPairingCodeParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/findEnrollmentResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/findEnrollmentResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/groupList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/groupList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/groupResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/groupResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/iceCandidate.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/iceCandidate.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/iceServer.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/iceServer.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listAccountsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listAccountsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listGroupMembersParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listGroupMembersParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listGroupsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listGroupsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listMachineEventsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listMachineEventsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listMachineRegistrationsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listMachineRegistrationsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listMachinesParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listMachinesParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listMcpToolsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listMcpToolsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listPrivilegeAutoApprovalsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listPrivilegeAutoApprovalsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listPrivilegeRequestsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listPrivilegeRequestsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/listSessionsParams.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/listSessionsParams.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineEventList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineEventList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineEventResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineEventResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineEventType.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineEventType.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineFeature.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineFeature.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineRegistrationState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/machineResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/machineResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpConfigurationFile.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpConfigurationFile.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpConfigurationResource.zod.d.ts +17 -6
- package/dist/fleet/v1/generated/validators/mcpConfigurationResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpImplementation.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpImplementation.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpServerFailure.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpServerFailure.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpServerResource.zod.d.ts +17 -6
- package/dist/fleet/v1/generated/validators/mcpServerResource.zod.js +18 -6
- package/dist/fleet/v1/generated/validators/mcpToolList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpToolList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpToolResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpToolResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/mcpTransport.zod.d.ts +17 -6
- package/dist/fleet/v1/generated/validators/mcpTransport.zod.js +19 -7
- package/dist/fleet/v1/generated/validators/mcpUnavailableServer.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/mcpUnavailableServer.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/migrationStep.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/migrationStep.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/namedIdentity.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/namedIdentity.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/offsetPagination.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/offsetPagination.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/operatingSystem.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/operatingSystem.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/participantList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/participantList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/participantResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/participantResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/peerConnection.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/peerConnection.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalList.zod.d.ts +21 -5
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalMode.zod.d.ts +244 -0
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalMode.zod.js +241 -0
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalResource.zod.d.ts +21 -5
- package/dist/fleet/v1/generated/validators/privilegeAutoApprovalResource.zod.js +19 -5
- package/dist/fleet/v1/generated/validators/privilegeDecider.zod.d.ts +19 -6
- package/dist/fleet/v1/generated/validators/privilegeDecider.zod.js +19 -7
- package/dist/fleet/v1/generated/validators/privilegeRequestList.zod.d.ts +20 -6
- package/dist/fleet/v1/generated/validators/privilegeRequestList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/privilegeRequestResource.zod.d.ts +21 -6
- package/dist/fleet/v1/generated/validators/privilegeRequestResource.zod.js +23 -5
- package/dist/fleet/v1/generated/validators/privilegeRequestState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/privilegeRequestState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/publicKey.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/publicKey.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/renewParticipantRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/renewParticipantRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/renewParticipantResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/renewParticipantResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/replaceMcpConfigurationRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/replaceMcpConfigurationRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/rtcConfiguration.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/rtcConfiguration.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/runCommandRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/runCommandRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/runCommandResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/runCommandResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sendMcpRequestRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sendMcpRequestRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sendMcpRequestResponse.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sendMcpRequestResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sessionCloseReason.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sessionCloseReason.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sessionList.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sessionList.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sessionMode.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sessionMode.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sessionResource.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sessionResource.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/sessionState.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/sessionState.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/signedMessage.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/signedMessage.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/signingKey.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/signingKey.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/updateAccountRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/updateAccountRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/updateGroupRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/updateGroupRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/updateMachineRequest.zod.d.ts +17 -5
- package/dist/fleet/v1/generated/validators/updateMachineRequest.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/updateMcpServerRequest.zod.d.ts +17 -6
- package/dist/fleet/v1/generated/validators/updateMcpServerRequest.zod.js +19 -7
- package/dist/fleet/v1/generated/validators/updateMcpServerResponse.zod.d.ts +17 -6
- package/dist/fleet/v1/generated/validators/updateMcpServerResponse.zod.js +17 -5
- package/dist/fleet/v1/generated/validators/updatePrivilegeAutoApprovalRequest.zod.d.ts +21 -5
- package/dist/fleet/v1/generated/validators/updatePrivilegeAutoApprovalRequest.zod.js +19 -5
- package/dist/proto/leaflow/fleet/mcp/v1/mcp_pb.d.ts +5 -12
- package/dist/proto/leaflow/fleet/mcp/v1/mcp_pb.js +1 -7
- package/dist/proto/leaflow/fleet/privilege/v1/privilege_pb.d.ts +20 -5
- package/dist/proto/leaflow/fleet/privilege/v1/privilege_pb.js +1 -1
- 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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
|
@@ -225,5 +237,5 @@
|
|
|
225
237
|
*/
|
|
226
238
|
import * as zod from "zod";
|
|
227
239
|
export const PrivilegeDecider = zod
|
|
228
|
-
.enum(["user", "
|
|
229
|
-
.describe("Who decided a request on the platform: `user` the user,
|
|
240
|
+
.enum(["user", "always_approve", "automatic_review"])
|
|
241
|
+
.describe("Who decided a request on the platform: `user` the user, `always_approve` the user's\nautomatic approval that approves every request, or `automatic_review` the large language\nmodel that reviewed it.");
|
|
@@ -139,16 +139,28 @@
|
|
|
139
139
|
* applies:
|
|
140
140
|
*
|
|
141
141
|
* - inside a command run through this API, by the request itself;
|
|
142
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
|
@@ -244,8 +256,10 @@ export declare const PrivilegeRequestList: zod.ZodObject<{
|
|
|
244
256
|
}>;
|
|
245
257
|
decided_by: zod.ZodUnion<readonly [zod.ZodEnum<{
|
|
246
258
|
user: "user";
|
|
247
|
-
|
|
259
|
+
automatic_review: "automatic_review";
|
|
260
|
+
always_approve: "always_approve";
|
|
248
261
|
}>, zod.ZodNull]>;
|
|
262
|
+
reason: zod.ZodNullable<zod.ZodString>;
|
|
249
263
|
created_at: zod.z.ZodISODateTime;
|
|
250
264
|
expires_at: zod.z.ZodISODateTime;
|
|
251
265
|
decided_at: zod.ZodNullable<zod.z.ZodISODateTime>;
|
|
@@ -139,16 +139,28 @@
|
|
|
139
139
|
* applies:
|
|
140
140
|
*
|
|
141
141
|
* - inside a command run through this API, by the request itself;
|
|
142
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
|
@@ -225,6 +237,7 @@
|
|
|
225
237
|
*/
|
|
226
238
|
import * as zod from "zod";
|
|
227
239
|
export declare const privilegeRequestResourceSessionIdMax = 40;
|
|
240
|
+
export declare const privilegeRequestResourceReasonMax = 200;
|
|
228
241
|
export declare const PrivilegeRequestResource: zod.ZodObject<{
|
|
229
242
|
id: zod.ZodUUID;
|
|
230
243
|
machine_id: zod.ZodUUID;
|
|
@@ -243,8 +256,10 @@ export declare const PrivilegeRequestResource: zod.ZodObject<{
|
|
|
243
256
|
}>;
|
|
244
257
|
decided_by: zod.ZodUnion<readonly [zod.ZodEnum<{
|
|
245
258
|
user: "user";
|
|
246
|
-
|
|
259
|
+
automatic_review: "automatic_review";
|
|
260
|
+
always_approve: "always_approve";
|
|
247
261
|
}>, zod.ZodNull]>;
|
|
262
|
+
reason: zod.ZodNullable<zod.ZodString>;
|
|
248
263
|
created_at: zod.z.ZodISODateTime;
|
|
249
264
|
expires_at: zod.z.ZodISODateTime;
|
|
250
265
|
decided_at: zod.ZodNullable<zod.z.ZodISODateTime>;
|
|
@@ -139,16 +139,28 @@
|
|
|
139
139
|
* applies:
|
|
140
140
|
*
|
|
141
141
|
* - inside a command run through this API, by the request itself;
|
|
142
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
|
@@ -227,6 +239,7 @@ import * as zod from "zod";
|
|
|
227
239
|
import { PrivilegeDecider } from "./privilegeDecider.zod.js";
|
|
228
240
|
import { PrivilegeRequestState } from "./privilegeRequestState.zod.js";
|
|
229
241
|
export const privilegeRequestResourceSessionIdMax = 40;
|
|
242
|
+
export const privilegeRequestResourceReasonMax = 200;
|
|
230
243
|
export const PrivilegeRequestResource = zod.strictObject({
|
|
231
244
|
id: zod.uuid(),
|
|
232
245
|
machine_id: zod.uuid(),
|
|
@@ -246,6 +259,11 @@ export const PrivilegeRequestResource = zod.strictObject({
|
|
|
246
259
|
decided_by: zod
|
|
247
260
|
.union([PrivilegeDecider, zod.null()])
|
|
248
261
|
.describe("Who decided an `approved` or `denied` request; null in any other state"),
|
|
262
|
+
reason: zod
|
|
263
|
+
.string()
|
|
264
|
+
.max(privilegeRequestResourceReasonMax)
|
|
265
|
+
.nullable()
|
|
266
|
+
.describe("Why the request was decided so: as the user gave it when denying, or as the automatic\nreview gave it, including why a review could not be made; null when none was given"),
|
|
249
267
|
created_at: zod.iso.datetime({ offset: true }),
|
|
250
268
|
expires_at: zod.iso.datetime({ offset: true }),
|
|
251
269
|
decided_at: zod.iso
|
|
@@ -139,16 +139,28 @@
|
|
|
139
139
|
* applies:
|
|
140
140
|
*
|
|
141
141
|
* - inside a command run through this API, by the request itself;
|
|
142
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|
-
* -
|
|
143
|
-
*
|
|
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
|
|
150
|
-
* when it ends, each addressed to the user in the current
|
|
151
|
-
*
|
|
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
|