@ornncompute/cli 1.0.122 → 1.0.124
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 +8 -0
- package/package.json +1 -1
- package/src/admin-node-diagnostics.mjs +2 -4
- package/src/admin-node-lifecycle.mjs +4 -8
- package/src/admin-ssh.mjs +2 -1
- package/src/api-client.mjs +5 -2
- package/src/evidence-commands.mjs +10 -6
- package/src/interaction-runtime.mjs +2 -0
- package/src/machine-reference.mjs +7 -17
- package/src/vm-commands.mjs +796 -427
- package/vendor/api-client/orchestrator.js +231 -1
- package/vendor/capabilities/cli.js +266 -209
|
@@ -1,3 +1,208 @@
|
|
|
1
|
+
// ../../packages/api-client/dist/orchestrator/catalog.js
|
|
2
|
+
var hardwareCatalogPath = "/v1/orchestrator/catalog/hardware";
|
|
3
|
+
function getHardwareCatalog(request, signal) {
|
|
4
|
+
return request(hardwareCatalogPath, {
|
|
5
|
+
method: "GET",
|
|
6
|
+
...signal ? { signal } : {}
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// ../../packages/api-client/dist/orchestrator/locality.js
|
|
11
|
+
var localityGeolocatePath = "/v1/orchestrator/locality/geolocate";
|
|
12
|
+
function geolocate(request, query3, signal) {
|
|
13
|
+
const target = query3.ip !== void 0 ? `ip=${encodeURIComponent(query3.ip)}` : `address=${encodeURIComponent(query3.address)}`;
|
|
14
|
+
return request(`${localityGeolocatePath}?${target}`, {
|
|
15
|
+
method: "GET",
|
|
16
|
+
...signal ? { signal } : {}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ../../packages/api-client/dist/orchestrator/registry.js
|
|
21
|
+
function getContainerRegistry(request) {
|
|
22
|
+
return request("/v1/orchestrator/registry", { method: "GET" });
|
|
23
|
+
}
|
|
24
|
+
function listRegistryRepositories(request) {
|
|
25
|
+
return request("/v1/orchestrator/registry/repositories", { method: "GET" });
|
|
26
|
+
}
|
|
27
|
+
function listRegistryTags(request, repository) {
|
|
28
|
+
return request(`/v1/orchestrator/registry/tags?${new URLSearchParams({ repository })}`, {
|
|
29
|
+
method: "GET"
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function getRegistryUsage(request) {
|
|
33
|
+
return request("/v1/orchestrator/registry/usage", { method: "GET" });
|
|
34
|
+
}
|
|
35
|
+
function listRegistryCaches(request, query3 = {}) {
|
|
36
|
+
const params = new URLSearchParams();
|
|
37
|
+
if (query3.controller_id !== void 0)
|
|
38
|
+
params.set("controller_id", query3.controller_id);
|
|
39
|
+
return request(`/v1/orchestrator/registry/caches${params.size ? `?${params}` : ""}`, {
|
|
40
|
+
method: "GET"
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function deleteRegistryTag(request, repository, tag) {
|
|
44
|
+
return request(`/v1/orchestrator/registry/tags?${new URLSearchParams({ repository, tag })}`, {
|
|
45
|
+
method: "DELETE"
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ../../packages/api-client/dist/orchestrator/drives.js
|
|
50
|
+
function queryPath(path, query3) {
|
|
51
|
+
const params = new URLSearchParams();
|
|
52
|
+
for (const [key, value] of Object.entries(query3)) {
|
|
53
|
+
if (value !== void 0 && value !== null)
|
|
54
|
+
params.set(key, String(value));
|
|
55
|
+
}
|
|
56
|
+
return `${path}${params.size ? `?${params}` : ""}`;
|
|
57
|
+
}
|
|
58
|
+
function listDrives(request, query3 = {}, signal) {
|
|
59
|
+
return request(queryPath("/v1/orchestrator/drives", query3), {
|
|
60
|
+
method: "GET",
|
|
61
|
+
...signal ? { signal } : {}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function getDrive(request, id, query3 = {}, options = {}) {
|
|
65
|
+
return request(queryPath(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, query3), {
|
|
66
|
+
method: "GET",
|
|
67
|
+
...options
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function createDrive(request, body2, options = {}) {
|
|
71
|
+
return request("/v1/orchestrator/drives", {
|
|
72
|
+
method: "POST",
|
|
73
|
+
body: body2,
|
|
74
|
+
...options
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function updateDrive(request, id, body2, options = {}) {
|
|
78
|
+
return request(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, {
|
|
79
|
+
method: "PATCH",
|
|
80
|
+
body: body2,
|
|
81
|
+
...options
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function deleteDrive(request, id, query3 = {}, options = {}) {
|
|
85
|
+
return request(queryPath(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, query3), {
|
|
86
|
+
method: "DELETE",
|
|
87
|
+
...options
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function listStorageTargets(request, signal) {
|
|
91
|
+
return request("/v1/orchestrator/storage-targets", {
|
|
92
|
+
method: "GET",
|
|
93
|
+
...signal ? { signal } : {}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ../../packages/api-client/dist/orchestrator/drive-files.js
|
|
98
|
+
function drivePath(id) {
|
|
99
|
+
return `/v1/orchestrator/drives/${encodeURIComponent(id)}`;
|
|
100
|
+
}
|
|
101
|
+
function listDriveContents(request, id, query3 = {}, signal) {
|
|
102
|
+
const params = new URLSearchParams();
|
|
103
|
+
for (const [key, value] of Object.entries(query3)) {
|
|
104
|
+
if (value !== void 0)
|
|
105
|
+
params.set(key, String(value));
|
|
106
|
+
}
|
|
107
|
+
return request(`${drivePath(id)}/contents${params.size ? `?${params}` : ""}`, {
|
|
108
|
+
method: "GET",
|
|
109
|
+
...signal ? { signal } : {}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function clearDriveContents(request, id) {
|
|
113
|
+
return request(`${drivePath(id)}/contents`, { method: "DELETE" });
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ../../packages/api-client/dist/orchestrator/nodes.js
|
|
117
|
+
function nodeQuery(query3) {
|
|
118
|
+
const params = new URLSearchParams();
|
|
119
|
+
for (const [key, value] of Object.entries(query3)) {
|
|
120
|
+
if (value !== void 0)
|
|
121
|
+
params.set(key, String(value));
|
|
122
|
+
}
|
|
123
|
+
return params.size ? `?${params}` : "";
|
|
124
|
+
}
|
|
125
|
+
function listNodes(request, query3 = {}, signal) {
|
|
126
|
+
return request(`/v1/orchestrator/nodes${nodeQuery(query3)}`, {
|
|
127
|
+
method: "GET",
|
|
128
|
+
...signal ? { signal } : {}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function listStaffNodes(request, query3 = {}, signal) {
|
|
132
|
+
return request(`/v1/staff/nodes${nodeQuery(query3)}`, {
|
|
133
|
+
method: "GET",
|
|
134
|
+
...signal ? { signal } : {}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function nodeResourcePath(id) {
|
|
138
|
+
return `/v1/orchestrator/nodes/${encodeURIComponent(id)}`;
|
|
139
|
+
}
|
|
140
|
+
function getNode(request, id, signal) {
|
|
141
|
+
return request(nodeResourcePath(id), {
|
|
142
|
+
method: "GET",
|
|
143
|
+
...signal ? { signal } : {}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function terminateNode(request, id, body2, headers) {
|
|
147
|
+
return request(`${nodeResourcePath(id)}/terminate`, {
|
|
148
|
+
method: "POST",
|
|
149
|
+
body: body2,
|
|
150
|
+
...headers ? { headers } : {}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function assignNode(request, id, body2, headers) {
|
|
154
|
+
return request(`${nodeResourcePath(id)}/assign`, {
|
|
155
|
+
method: "POST",
|
|
156
|
+
body: body2,
|
|
157
|
+
...headers ? { headers } : {}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function issueNodeSshCertificate(request, id, body2) {
|
|
161
|
+
return request(`${nodeResourcePath(id)}/ssh-certificates`, { method: "POST", body: body2 });
|
|
162
|
+
}
|
|
163
|
+
function rebootNode(request, id, body2, headers) {
|
|
164
|
+
return request(`${nodeResourcePath(id)}/reboot`, {
|
|
165
|
+
method: "POST",
|
|
166
|
+
body: body2,
|
|
167
|
+
...headers ? { headers } : {}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function pushNodeKeys(request, id, body2 = {}) {
|
|
171
|
+
return request(`${nodeResourcePath(id)}/push-keys`, { method: "POST", body: body2 });
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ../../packages/api-client/dist/orchestrator/node-access.js
|
|
175
|
+
function launchReservation(request, reservationId, body2) {
|
|
176
|
+
return request(`/v1/orchestrator/nodes/reservations/${encodeURIComponent(reservationId)}/launch`, { method: "POST", body: body2 });
|
|
177
|
+
}
|
|
178
|
+
function switchReservationAccess(request, reservationId, body2) {
|
|
179
|
+
return request(`/v1/orchestrator/nodes/reservations/${encodeURIComponent(reservationId)}/switch-access`, { method: "POST", body: body2 });
|
|
180
|
+
}
|
|
181
|
+
function listReservationSshKeys(request, reservationId, query3 = {}, signal) {
|
|
182
|
+
const params = new URLSearchParams();
|
|
183
|
+
if (query3.virtual_machine_id !== void 0)
|
|
184
|
+
params.set("virtual_machine_id", query3.virtual_machine_id);
|
|
185
|
+
return request(`/v1/orchestrator/nodes/reservations/${encodeURIComponent(reservationId)}/ssh-keys${params.size ? `?${params}` : ""}`, { method: "GET", ...signal ? { signal } : {} });
|
|
186
|
+
}
|
|
187
|
+
function addReservationSshKey(request, reservationId, body2, options = {}) {
|
|
188
|
+
return request(`/v1/orchestrator/nodes/reservations/${encodeURIComponent(reservationId)}/ssh-keys`, { method: "POST", body: body2, ...options });
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// ../../packages/api-client/dist/orchestrator/node-sanitize.js
|
|
192
|
+
function sanitizePath(nodeId3, jobId) {
|
|
193
|
+
const base3 = `/v1/orchestrator/nodes/${encodeURIComponent(nodeId3)}/sanitize-drives`;
|
|
194
|
+
return jobId === void 0 ? base3 : `${base3}/${encodeURIComponent(jobId)}`;
|
|
195
|
+
}
|
|
196
|
+
function startNodeSanitize(request, nodeId3, body2) {
|
|
197
|
+
return request(sanitizePath(nodeId3), { method: "POST", body: body2 });
|
|
198
|
+
}
|
|
199
|
+
function getNodeSanitize(request, nodeId3, jobId) {
|
|
200
|
+
return request(sanitizePath(nodeId3, jobId), { method: "GET" });
|
|
201
|
+
}
|
|
202
|
+
function updateNodeSanitize(request, nodeId3, jobId, body2) {
|
|
203
|
+
return request(sanitizePath(nodeId3, jobId), { method: "PATCH", body: body2 });
|
|
204
|
+
}
|
|
205
|
+
|
|
1
206
|
// ../../packages/capabilities/dist/capabilities/admin-ssh.js
|
|
2
207
|
import { z } from "zod";
|
|
3
208
|
|
|
@@ -62,7 +267,7 @@ var adminSshCapability = defineCapability({
|
|
|
62
267
|
roles: ["admin"],
|
|
63
268
|
description: "Open staff SSH using a temporary local key and a short-lived node certificate.",
|
|
64
269
|
mutation: "local",
|
|
65
|
-
http: { method: "POST", path: "/nodes/{node_id}/ssh-certificates" },
|
|
270
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{node_id}/ssh-certificates" },
|
|
66
271
|
mcp: false,
|
|
67
272
|
slack: false,
|
|
68
273
|
cli: {
|
|
@@ -78,9 +283,8 @@ var adminSshCapability = defineCapability({
|
|
|
78
283
|
}
|
|
79
284
|
},
|
|
80
285
|
input: z.object({ node_id: z.string().uuid(), public_key: z.string().min(1) }),
|
|
81
|
-
execute: (ctx, input) => ctx.fetch
|
|
82
|
-
|
|
83
|
-
body: { public_key: input.public_key }
|
|
286
|
+
execute: (ctx, input) => issueNodeSshCertificate(ctx.fetch, input.node_id, {
|
|
287
|
+
public_key: input.public_key
|
|
84
288
|
})
|
|
85
289
|
});
|
|
86
290
|
|
|
@@ -287,14 +491,6 @@ var listSupplierOrganizations2 = listSupplierOrganizations;
|
|
|
287
491
|
|
|
288
492
|
// ../../packages/capabilities/dist/capabilities/fleet.js
|
|
289
493
|
import { z as z2 } from "zod";
|
|
290
|
-
function queryPath(path, params) {
|
|
291
|
-
const parts = [];
|
|
292
|
-
for (const [key, value] of Object.entries(params)) {
|
|
293
|
-
if (value?.trim())
|
|
294
|
-
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value.trim())}`);
|
|
295
|
-
}
|
|
296
|
-
return parts.length ? `${path}?${parts.join("&")}` : path;
|
|
297
|
-
}
|
|
298
494
|
var suppliersInput = z2.object({
|
|
299
495
|
q: z2.string().optional(),
|
|
300
496
|
offset: z2.number().int().min(0).optional(),
|
|
@@ -473,15 +669,15 @@ var listNodesCapability = defineCapability({
|
|
|
473
669
|
limit: parsed.max != null || parsed.limit != null ? String(parsed.max ?? parsed.limit) : void 0
|
|
474
670
|
};
|
|
475
671
|
if (ctx.role === "user") {
|
|
476
|
-
return ctx.fetch
|
|
672
|
+
return listNodes(ctx.fetch, pagination);
|
|
477
673
|
}
|
|
478
|
-
return ctx.fetch
|
|
674
|
+
return listStaffNodes(ctx.fetch, {
|
|
479
675
|
organization_id: parsed.organization_id,
|
|
480
676
|
facility_id: parsed.facility_id,
|
|
481
677
|
status: parsed.status,
|
|
482
678
|
reservation_id: parsed.reservation_id,
|
|
483
679
|
...pagination
|
|
484
|
-
})
|
|
680
|
+
});
|
|
485
681
|
}
|
|
486
682
|
});
|
|
487
683
|
var nodeExecCapability = defineCapability({
|
|
@@ -520,7 +716,7 @@ var nodeTerminateCapability = defineCapability({
|
|
|
520
716
|
roles: ["admin"],
|
|
521
717
|
description: "Admin-only. Mark a node terminated and clear its assignment once no undeleted VM remains on it. Does no host cleanup. There is no deenroll verb. Slack waits for a human confirm. ",
|
|
522
718
|
mutation: "preview-confirm",
|
|
523
|
-
http: { method: "POST", path: "/nodes/{id}/terminate" },
|
|
719
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{id}/terminate" },
|
|
524
720
|
cli: {
|
|
525
721
|
command: ["admin", "nodes", "terminate"],
|
|
526
722
|
vnext: {
|
|
@@ -555,11 +751,7 @@ var nodeTerminateCapability = defineCapability({
|
|
|
555
751
|
if (!ctx.confirmed) {
|
|
556
752
|
return preview("node.terminate", { node_id: id, ...body2 });
|
|
557
753
|
}
|
|
558
|
-
return ctx.fetch
|
|
559
|
-
method: "POST",
|
|
560
|
-
body: body2,
|
|
561
|
-
...parsed.idempotency_key ? { headers: { "Idempotency-Key": parsed.idempotency_key } } : {}
|
|
562
|
-
});
|
|
754
|
+
return terminateNode(ctx.fetch, id, body2, parsed.idempotency_key ? { "Idempotency-Key": parsed.idempotency_key } : void 0);
|
|
563
755
|
}
|
|
564
756
|
});
|
|
565
757
|
var fleetCapabilities = [
|
|
@@ -1196,7 +1388,7 @@ var adminNodeHealthCapability = defineCapability({
|
|
|
1196
1388
|
roles: ["admin"],
|
|
1197
1389
|
description: "Read lifecycle and readiness facts for one enrolled node.",
|
|
1198
1390
|
mutation: "read",
|
|
1199
|
-
http: { method: "GET", path: "/nodes/{id}" },
|
|
1391
|
+
http: { method: "GET", path: "/v1/orchestrator/nodes/{id}" },
|
|
1200
1392
|
cli: {
|
|
1201
1393
|
command: ["admin", "nodes", "health"],
|
|
1202
1394
|
vnext: adminHelp(["admin", "nodes", "health"], "Inspect lifecycle and readiness facts for one node.", "ornn admin nodes health <node-id>", "ornn admin nodes health <node-id> --format json", ["canonical node ID"])
|
|
@@ -1206,7 +1398,7 @@ var adminNodeHealthCapability = defineCapability({
|
|
|
1206
1398
|
input: nodeInput,
|
|
1207
1399
|
execute: async (ctx, input) => {
|
|
1208
1400
|
const parsed = nodeInput.parse(input);
|
|
1209
|
-
return ctx.fetch
|
|
1401
|
+
return getNode(ctx.fetch, parsed.node_id);
|
|
1210
1402
|
}
|
|
1211
1403
|
});
|
|
1212
1404
|
var adminNodeMetricsCapability = withAdminBinding(telemetryLatestCapability, adminHelp(["admin", "nodes", "metrics"], "Read a bounded telemetry window for one node.", "ornn admin nodes metrics <node-id> [--span 15m] [--start TIME --end TIME] [--max-points 240]", "ornn admin nodes metrics <node-id> --span 15m [--start TIME --end TIME] --max-points 240 --format json", ["canonical node ID"]));
|
|
@@ -1320,121 +1512,6 @@ function listOffers(request, filter = {}) {
|
|
|
1320
1512
|
// ../../packages/capabilities/dist/capabilities/admin-capacity-reservations.js
|
|
1321
1513
|
import { z as z9 } from "zod";
|
|
1322
1514
|
|
|
1323
|
-
// ../../packages/api-client/dist/orchestrator/catalog.js
|
|
1324
|
-
var hardwareCatalogPath = "/v1/orchestrator/catalog/hardware";
|
|
1325
|
-
function getHardwareCatalog(request, signal) {
|
|
1326
|
-
return request(hardwareCatalogPath, {
|
|
1327
|
-
method: "GET",
|
|
1328
|
-
...signal ? { signal } : {}
|
|
1329
|
-
});
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
// ../../packages/api-client/dist/orchestrator/locality.js
|
|
1333
|
-
var localityGeolocatePath = "/v1/orchestrator/locality/geolocate";
|
|
1334
|
-
function geolocate(request, query3, signal) {
|
|
1335
|
-
const target = query3.ip !== void 0 ? `ip=${encodeURIComponent(query3.ip)}` : `address=${encodeURIComponent(query3.address)}`;
|
|
1336
|
-
return request(`${localityGeolocatePath}?${target}`, {
|
|
1337
|
-
method: "GET",
|
|
1338
|
-
...signal ? { signal } : {}
|
|
1339
|
-
});
|
|
1340
|
-
}
|
|
1341
|
-
|
|
1342
|
-
// ../../packages/api-client/dist/orchestrator/registry.js
|
|
1343
|
-
function getContainerRegistry(request) {
|
|
1344
|
-
return request("/v1/orchestrator/registry", { method: "GET" });
|
|
1345
|
-
}
|
|
1346
|
-
function listRegistryRepositories(request) {
|
|
1347
|
-
return request("/v1/orchestrator/registry/repositories", { method: "GET" });
|
|
1348
|
-
}
|
|
1349
|
-
function listRegistryTags(request, repository) {
|
|
1350
|
-
return request(`/v1/orchestrator/registry/tags?${new URLSearchParams({ repository })}`, {
|
|
1351
|
-
method: "GET"
|
|
1352
|
-
});
|
|
1353
|
-
}
|
|
1354
|
-
function getRegistryUsage(request) {
|
|
1355
|
-
return request("/v1/orchestrator/registry/usage", { method: "GET" });
|
|
1356
|
-
}
|
|
1357
|
-
function listRegistryCaches(request, query3 = {}) {
|
|
1358
|
-
const params = new URLSearchParams();
|
|
1359
|
-
if (query3.controller_id !== void 0)
|
|
1360
|
-
params.set("controller_id", query3.controller_id);
|
|
1361
|
-
return request(`/v1/orchestrator/registry/caches${params.size ? `?${params}` : ""}`, {
|
|
1362
|
-
method: "GET"
|
|
1363
|
-
});
|
|
1364
|
-
}
|
|
1365
|
-
function deleteRegistryTag(request, repository, tag) {
|
|
1366
|
-
return request(`/v1/orchestrator/registry/tags?${new URLSearchParams({ repository, tag })}`, {
|
|
1367
|
-
method: "DELETE"
|
|
1368
|
-
});
|
|
1369
|
-
}
|
|
1370
|
-
|
|
1371
|
-
// ../../packages/api-client/dist/orchestrator/drives.js
|
|
1372
|
-
function queryPath3(path, query3) {
|
|
1373
|
-
const params = new URLSearchParams();
|
|
1374
|
-
for (const [key, value] of Object.entries(query3)) {
|
|
1375
|
-
if (value !== void 0 && value !== null)
|
|
1376
|
-
params.set(key, String(value));
|
|
1377
|
-
}
|
|
1378
|
-
return `${path}${params.size ? `?${params}` : ""}`;
|
|
1379
|
-
}
|
|
1380
|
-
function listDrives(request, query3 = {}, signal) {
|
|
1381
|
-
return request(queryPath3("/v1/orchestrator/drives", query3), {
|
|
1382
|
-
method: "GET",
|
|
1383
|
-
...signal ? { signal } : {}
|
|
1384
|
-
});
|
|
1385
|
-
}
|
|
1386
|
-
function getDrive(request, id, query3 = {}, options = {}) {
|
|
1387
|
-
return request(queryPath3(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, query3), {
|
|
1388
|
-
method: "GET",
|
|
1389
|
-
...options
|
|
1390
|
-
});
|
|
1391
|
-
}
|
|
1392
|
-
function createDrive(request, body2, options = {}) {
|
|
1393
|
-
return request("/v1/orchestrator/drives", {
|
|
1394
|
-
method: "POST",
|
|
1395
|
-
body: body2,
|
|
1396
|
-
...options
|
|
1397
|
-
});
|
|
1398
|
-
}
|
|
1399
|
-
function updateDrive(request, id, body2, options = {}) {
|
|
1400
|
-
return request(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, {
|
|
1401
|
-
method: "PATCH",
|
|
1402
|
-
body: body2,
|
|
1403
|
-
...options
|
|
1404
|
-
});
|
|
1405
|
-
}
|
|
1406
|
-
function deleteDrive(request, id, query3 = {}, options = {}) {
|
|
1407
|
-
return request(queryPath3(`/v1/orchestrator/drives/${encodeURIComponent(id)}`, query3), {
|
|
1408
|
-
method: "DELETE",
|
|
1409
|
-
...options
|
|
1410
|
-
});
|
|
1411
|
-
}
|
|
1412
|
-
function listStorageTargets(request, signal) {
|
|
1413
|
-
return request("/v1/orchestrator/storage-targets", {
|
|
1414
|
-
method: "GET",
|
|
1415
|
-
...signal ? { signal } : {}
|
|
1416
|
-
});
|
|
1417
|
-
}
|
|
1418
|
-
|
|
1419
|
-
// ../../packages/api-client/dist/orchestrator/drive-files.js
|
|
1420
|
-
function drivePath(id) {
|
|
1421
|
-
return `/v1/orchestrator/drives/${encodeURIComponent(id)}`;
|
|
1422
|
-
}
|
|
1423
|
-
function listDriveContents(request, id, query3 = {}, signal) {
|
|
1424
|
-
const params = new URLSearchParams();
|
|
1425
|
-
for (const [key, value] of Object.entries(query3)) {
|
|
1426
|
-
if (value !== void 0)
|
|
1427
|
-
params.set(key, String(value));
|
|
1428
|
-
}
|
|
1429
|
-
return request(`${drivePath(id)}/contents${params.size ? `?${params}` : ""}`, {
|
|
1430
|
-
method: "GET",
|
|
1431
|
-
...signal ? { signal } : {}
|
|
1432
|
-
});
|
|
1433
|
-
}
|
|
1434
|
-
function clearDriveContents(request, id) {
|
|
1435
|
-
return request(`${drivePath(id)}/contents`, { method: "DELETE" });
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
1515
|
// ../../packages/capabilities/dist/capabilities/staff-shared.js
|
|
1439
1516
|
function statusOf(error) {
|
|
1440
1517
|
if (error && typeof error === "object" && "status" in error) {
|
|
@@ -3036,17 +3113,13 @@ function requireAdmin(ctx) {
|
|
|
3036
3113
|
if (ctx.role !== "admin")
|
|
3037
3114
|
throw new Error("Admin role required.");
|
|
3038
3115
|
}
|
|
3039
|
-
function sanitizePath(nodeId3, jobId) {
|
|
3040
|
-
const base3 = `/nodes/${encodeURIComponent(nodeId3)}/sanitize-drives`;
|
|
3041
|
-
return jobId ? `${base3}/${encodeURIComponent(jobId)}` : base3;
|
|
3042
|
-
}
|
|
3043
3116
|
var nodeSanitizeStartCapability = defineCapability({
|
|
3044
3117
|
id: "node.sanitize.start",
|
|
3045
3118
|
domain: "fleet",
|
|
3046
3119
|
roles: ["admin"],
|
|
3047
3120
|
description: "Destructive staff maintenance write: start node drive sanitization with a stable job UUID. data_wipe erases local data drives and keeps the OS; ram_roundtrip does not erase drives; node_turnover wipes and restores the whole node; host_restore restores the host. Supply the exact operation-specific confirmation phrase yourself; it is never filled automatically. The job then waits for staff approval. Slack waits for a human confirm.",
|
|
3048
3121
|
mutation: "preview-confirm",
|
|
3049
|
-
http: { method: "POST", path: "/nodes/{node_id}/sanitize-drives" },
|
|
3122
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{node_id}/sanitize-drives" },
|
|
3050
3123
|
cli: {
|
|
3051
3124
|
command: ["admin", "nodes", "sanitize"],
|
|
3052
3125
|
vnext: sanitizeHelp(["admin", "nodes", "sanitize"], "Start one held sanitize job on one exact node.", "ornn admin nodes sanitize <node-id> --operation data_wipe|ram_roundtrip|node_turnover|host_restore --confirmation PHRASE [--recovery-uuid UUID] [--job-id UUID] [--batch UUID]", "Exact node, operation, job UUID, and confirmation phrase.")
|
|
@@ -3058,7 +3131,7 @@ var nodeSanitizeStartCapability = defineCapability({
|
|
|
3058
3131
|
const { node_id, ...body2 } = nodeSanitizeStartInput.parse(input);
|
|
3059
3132
|
if (!ctx.confirmed)
|
|
3060
3133
|
return preview("node.sanitize.start", { node_id, ...body2 });
|
|
3061
|
-
return ctx.fetch
|
|
3134
|
+
return startNodeSanitize(ctx.fetch, node_id, body2);
|
|
3062
3135
|
}
|
|
3063
3136
|
});
|
|
3064
3137
|
var nodeSanitizeShowCapability = defineCapability({
|
|
@@ -3067,7 +3140,7 @@ var nodeSanitizeShowCapability = defineCapability({
|
|
|
3067
3140
|
roles: ["admin"],
|
|
3068
3141
|
description: "Staff maintenance read: show the bounded JSON status for one node sanitize job, including its operation, approval, manual cleanup attestation, and per-drive results. This does not request an NDJSON download.",
|
|
3069
3142
|
mutation: "read",
|
|
3070
|
-
http: { method: "GET", path: "/nodes/{node_id}/sanitize-drives/{job_id}" },
|
|
3143
|
+
http: { method: "GET", path: "/v1/orchestrator/nodes/{node_id}/sanitize-drives/{job_id}" },
|
|
3071
3144
|
cli: {
|
|
3072
3145
|
command: ["admin", "nodes", "sanitize-status"],
|
|
3073
3146
|
vnext: sanitizeHelp(["admin", "nodes", "sanitize-status"], "Read one sanitize job on one exact node.", "ornn admin nodes sanitize-status <node-id> --job UUID")
|
|
@@ -3077,7 +3150,7 @@ var nodeSanitizeShowCapability = defineCapability({
|
|
|
3077
3150
|
execute: async (ctx, input) => {
|
|
3078
3151
|
requireAdmin(ctx);
|
|
3079
3152
|
const parsed = nodeSanitizeShowInput.parse(input);
|
|
3080
|
-
return ctx.fetch
|
|
3153
|
+
return getNodeSanitize(ctx.fetch, parsed.node_id, parsed.job_id);
|
|
3081
3154
|
}
|
|
3082
3155
|
});
|
|
3083
3156
|
var nodeSanitizeUpdateCapability = defineCapability({
|
|
@@ -3086,7 +3159,7 @@ var nodeSanitizeUpdateCapability = defineCapability({
|
|
|
3086
3159
|
roles: ["admin"],
|
|
3087
3160
|
description: "Staff maintenance write on a held sanitize job. APPROVE SANITIZATION starts destructive maintenance. SKIP SANITIZATION skips an eligible first-use wipe and certifies nothing. ACCEPT MANUAL CLEANUP lets a held Bare Metal release finish when its node_turnover job is awaiting_approval with no recovery image, after staff manually revoked tenant access and sanitized the data drives with the OS retained; it requires manual_cleanup with the reservation, the current orchestrator release operation, a reason, the evidence file SHA-256, and all three attestations. The owner enforces eligibility. Slack waits for a human confirm.",
|
|
3088
3161
|
mutation: "preview-confirm",
|
|
3089
|
-
http: { method: "PATCH", path: "/nodes/{node_id}/sanitize-drives/{job_id}" },
|
|
3162
|
+
http: { method: "PATCH", path: "/v1/orchestrator/nodes/{node_id}/sanitize-drives/{job_id}" },
|
|
3090
3163
|
cli: {
|
|
3091
3164
|
command: ["admin", "nodes", "sanitize-decide"],
|
|
3092
3165
|
vnext: sanitizeHelp(["admin", "nodes", "sanitize-decide"], "Approve, skip, or accept manual cleanup for one held sanitize job.", 'ornn admin nodes sanitize-decide <node-id> --job UUID --confirmation "APPROVE SANITIZATION"|"SKIP SANITIZATION"|"ACCEPT MANUAL CLEANUP" [--reservation UUID --release-operation UUID --reason TEXT --evidence-file PATH --tenant-access-revoked --data-drives-sanitized --acknowledge-retained-os]', "Exact node, job, decision, and for manual cleanup the reservation, release operation, reason, evidence SHA-256, and retained-OS attestations.")
|
|
@@ -3098,7 +3171,7 @@ var nodeSanitizeUpdateCapability = defineCapability({
|
|
|
3098
3171
|
const { node_id, job_id, ...body2 } = nodeSanitizeUpdateInput.parse(input);
|
|
3099
3172
|
if (!ctx.confirmed)
|
|
3100
3173
|
return preview("node.sanitize.update", { node_id, job_id, ...body2 });
|
|
3101
|
-
return ctx.fetch
|
|
3174
|
+
return updateNodeSanitize(ctx.fetch, node_id, job_id, body2);
|
|
3102
3175
|
}
|
|
3103
3176
|
});
|
|
3104
3177
|
var adminNodeSanitizeCapabilities = [
|
|
@@ -3168,14 +3241,10 @@ async function reboot(ctx, input, mode) {
|
|
|
3168
3241
|
return preview2(`nodes.${mode}`, payload);
|
|
3169
3242
|
if (!parsed.machine_id)
|
|
3170
3243
|
throw new Error("The live machine target must be resolved before reboot.");
|
|
3171
|
-
return ctx.fetch
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
...parsed.idempotency_key ? { request_id: parsed.idempotency_key } : {}
|
|
3176
|
-
},
|
|
3177
|
-
headers: requestHeaders(parsed.idempotency_key)
|
|
3178
|
-
});
|
|
3244
|
+
return rebootNode(ctx.fetch, parsed.machine_id, {
|
|
3245
|
+
mode,
|
|
3246
|
+
...parsed.idempotency_key ? { request_id: parsed.idempotency_key } : {}
|
|
3247
|
+
}, requestHeaders(parsed.idempotency_key));
|
|
3179
3248
|
}
|
|
3180
3249
|
var adminNodeRebootCapability = defineCapability({
|
|
3181
3250
|
id: "nodes.reboot",
|
|
@@ -3183,7 +3252,7 @@ var adminNodeRebootCapability = defineCapability({
|
|
|
3183
3252
|
roles: ["admin"],
|
|
3184
3253
|
description: "Reboot the exact live machine backing one managed node after a normalized review.",
|
|
3185
3254
|
mutation: "preview-confirm",
|
|
3186
|
-
http: { method: "POST", path: "/nodes/{id}/reboot" },
|
|
3255
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{id}/reboot" },
|
|
3187
3256
|
cli: {
|
|
3188
3257
|
command: ["admin", "nodes", "reboot"],
|
|
3189
3258
|
vnext: adminLifecycleHelp(["admin", "nodes", "reboot"], "Reboot one exact live machine while preserving local data and access configuration.", "ornn admin nodes reboot <node-ref> [] [--no-wait] [--timeout SECONDS]", "Unsupported: reboot requires an eligible human terminal.", "Node and live-machine identities, supplier, facility, capacity assignment, and preserved access.")
|
|
@@ -3199,7 +3268,7 @@ var adminNodeHardResetCapability = defineCapability({
|
|
|
3199
3268
|
roles: ["admin"],
|
|
3200
3269
|
description: "Hard reset the exact live machine backing one node with explicit local-data erasure scope.",
|
|
3201
3270
|
mutation: "preview-confirm",
|
|
3202
|
-
http: { method: "POST", path: "/nodes/{id}/reboot" },
|
|
3271
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{id}/reboot" },
|
|
3203
3272
|
cli: {
|
|
3204
3273
|
command: ["admin", "nodes", "hard-reset"],
|
|
3205
3274
|
vnext: adminLifecycleHelp(["admin", "nodes", "hard-reset"], "Erase local tenant data and hard reset one exact live machine.", "ornn admin nodes hard-reset <node-ref> --erase-local-data [] [--no-wait] [--timeout SECONDS]", "Unsupported: hard reset requires an eligible human terminal.", "Node and live-machine identities, supplier, facility, capacity assignment, erased local data, and restored keys.")
|
|
@@ -3215,7 +3284,7 @@ var adminNodeAssignCapability = defineCapability({
|
|
|
3215
3284
|
roles: ["admin"],
|
|
3216
3285
|
description: "Assign one exact node to one exact capacity reservation after consequence review.",
|
|
3217
3286
|
mutation: "preview-confirm",
|
|
3218
|
-
http: { method: "POST", path: "/nodes/{id}/assign" },
|
|
3287
|
+
http: { method: "POST", path: "/v1/orchestrator/nodes/{id}/assign" },
|
|
3219
3288
|
cli: {
|
|
3220
3289
|
command: ["admin", "nodes", "assign"],
|
|
3221
3290
|
vnext: adminLifecycleHelp(["admin", "nodes", "assign"], "Assign one exact node to one exact capacity reservation.", "ornn admin nodes assign <node-ref> --reservation <reservation-id> [] [--no-wait]", "ornn admin nodes assign <node-id> --reservation <reservation-id> --idempotency-key KEY --format json", "Node, supplier, facility, previous and requested capacity assignments, and tenant access change.")
|
|
@@ -3232,11 +3301,7 @@ var adminNodeAssignCapability = defineCapability({
|
|
|
3232
3301
|
};
|
|
3233
3302
|
if (!ctx.confirmed)
|
|
3234
3303
|
return preview2("nodes.assign", { node_id: id, ...body2 });
|
|
3235
|
-
return ctx.fetch(
|
|
3236
|
-
method: "POST",
|
|
3237
|
-
body: body2,
|
|
3238
|
-
headers: requestHeaders(parsed.idempotency_key)
|
|
3239
|
-
});
|
|
3304
|
+
return assignNode(ctx.fetch, id, body2, requestHeaders(parsed.idempotency_key));
|
|
3240
3305
|
}
|
|
3241
3306
|
});
|
|
3242
3307
|
var adminNodeLifecycleCapabilities = [
|
|
@@ -3632,7 +3697,7 @@ var machineSwitchCapability = cliOnly({
|
|
|
3632
3697
|
audience: "customer",
|
|
3633
3698
|
category: "resource",
|
|
3634
3699
|
order: 463,
|
|
3635
|
-
outcome: "Change
|
|
3700
|
+
outcome: "Change VM, Bare Metal, or network access while retaining SSH keys. When changing access mode, specify --network if the current network mode is unreported.",
|
|
3636
3701
|
human: "ornn machines switch <canonical-reservation-id> [--mode vm|bare-metal] [--network public|private] [--erase-local-data]",
|
|
3637
3702
|
automation: "ornn machines switch <canonical-reservation-id> [--mode vm|bare-metal] [--network public|private] [--erase-local-data] --idempotency-key <key> --format json",
|
|
3638
3703
|
acceptedReferences: ["canonical capacity-reservation ID"],
|
|
@@ -3676,7 +3741,7 @@ var machineResetCapability = cliOnly({
|
|
|
3676
3741
|
id: "access.machines.reset",
|
|
3677
3742
|
domain: "access",
|
|
3678
3743
|
roles: ["user"],
|
|
3679
|
-
description: "Erase local
|
|
3744
|
+
description: "Erase local data and hard reset one exact Bare Metal host.",
|
|
3680
3745
|
mutation: "preview-confirm",
|
|
3681
3746
|
input: machineMaintenanceInput,
|
|
3682
3747
|
cli: {
|
|
@@ -3686,7 +3751,7 @@ var machineResetCapability = cliOnly({
|
|
|
3686
3751
|
audience: "customer",
|
|
3687
3752
|
category: "resource",
|
|
3688
3753
|
order: 465,
|
|
3689
|
-
outcome: "Hard reset one exact
|
|
3754
|
+
outcome: "Hard reset one exact Bare Metal host with explicit local-data erasure scope and final consent.",
|
|
3690
3755
|
human: "ornn machines reset <canonical-machine-id|exact-hostname> --erase-local-data [--no-wait]",
|
|
3691
3756
|
automation: "ornn machines reset <canonical-machine-id> --erase-local-data --idempotency-key <key> --format json",
|
|
3692
3757
|
acceptedReferences: [
|
|
@@ -3893,12 +3958,9 @@ var computeCapabilities = [
|
|
|
3893
3958
|
sshKeyAssignmentSyncCapability,
|
|
3894
3959
|
sshKeyAssignmentStatusCapability
|
|
3895
3960
|
];
|
|
3896
|
-
var NODES_ROUTE = "/v1/
|
|
3897
|
-
var ORG_SSH_KEYS_ROUTE =
|
|
3898
|
-
var CLUSTER_USERS_ROUTE =
|
|
3899
|
-
function reservationNodesRoute(reservationId, suffix) {
|
|
3900
|
-
return `${NODES_ROUTE}/reservations/${encodeURIComponent(reservationId)}/${suffix}`;
|
|
3901
|
-
}
|
|
3961
|
+
var NODES_ROUTE = "/v1/orchestrator/nodes";
|
|
3962
|
+
var ORG_SSH_KEYS_ROUTE = "/v1/workflows/compute/nodes/organizations/me/ssh-keys";
|
|
3963
|
+
var CLUSTER_USERS_ROUTE = "/v1/workflows/compute/nodes/organizations/me/cluster-users";
|
|
3902
3964
|
var pageInput = z17.object({
|
|
3903
3965
|
limit: z17.number().int().min(1).max(500).optional(),
|
|
3904
3966
|
cursor: z17.string().optional()
|
|
@@ -3912,10 +3974,7 @@ var keyIdInput = z17.object({ keyId: z17.string(), confirm: z17.boolean().option
|
|
|
3912
3974
|
var nodeIdInput = z17.object({ nodeId: z17.string(), confirm: z17.boolean().optional() });
|
|
3913
3975
|
var ADDED_KEY_OUTCOME = "The response's outcome field says whether the key was created, was already_registered (returned unchanged, so the submitted label is not applied), or was reactivated from a revoked key.";
|
|
3914
3976
|
function rebootMachine(mode) {
|
|
3915
|
-
return (ctx, input) => ctx.fetch
|
|
3916
|
-
method: "POST",
|
|
3917
|
-
body: { mode }
|
|
3918
|
-
});
|
|
3977
|
+
return (ctx, input) => rebootNode(ctx.fetch, input.nodeId, { mode });
|
|
3919
3978
|
}
|
|
3920
3979
|
var accessVerbCapabilities = [
|
|
3921
3980
|
defineCapability({
|
|
@@ -3927,9 +3986,7 @@ var accessVerbCapabilities = [
|
|
|
3927
3986
|
http: { method: "GET", path: NODES_ROUTE },
|
|
3928
3987
|
input: z17.object({ reservationId: z17.string() }),
|
|
3929
3988
|
slack: false,
|
|
3930
|
-
execute: (ctx, input) => ctx.fetch
|
|
3931
|
-
method: "GET"
|
|
3932
|
-
})
|
|
3989
|
+
execute: (ctx, input) => listNodes(ctx.fetch, { reservation_id: input.reservationId })
|
|
3933
3990
|
}),
|
|
3934
3991
|
defineCapability({
|
|
3935
3992
|
id: "access.activate",
|
|
@@ -3954,18 +4011,15 @@ var accessVerbCapabilities = [
|
|
|
3954
4011
|
slack: false,
|
|
3955
4012
|
// Without disk_id the orchestrator boots "virtual-machine" from the
|
|
3956
4013
|
// reservation's saved disk and refuses when there is none.
|
|
3957
|
-
execute: (ctx, input) => ctx.fetch
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
...input.storageLoadDriveId ? { storage_load_drive_id: input.storageLoadDriveId } : {},
|
|
3967
|
-
...input.storageSaveDriveId ? { storage_save_drive_id: input.storageSaveDriveId } : {}
|
|
3968
|
-
}
|
|
4014
|
+
execute: (ctx, input) => launchReservation(ctx.fetch, input.reservationId, {
|
|
4015
|
+
access_mode: input.accessMode === "vm" ? "virtual-machine" : "bare-metal",
|
|
4016
|
+
machine_count: input.machineCount ?? 1,
|
|
4017
|
+
request_id: input.requestId ?? null,
|
|
4018
|
+
ssh_key_ids: input.sshKeyIds,
|
|
4019
|
+
...input.networkMode ? { network_mode: input.networkMode } : {},
|
|
4020
|
+
...input.diskId ? { disk_id: input.diskId } : {},
|
|
4021
|
+
...input.storageLoadDriveId ? { storage_load_drive_id: input.storageLoadDriveId } : {},
|
|
4022
|
+
...input.storageSaveDriveId ? { storage_save_drive_id: input.storageSaveDriveId } : {}
|
|
3969
4023
|
})
|
|
3970
4024
|
}),
|
|
3971
4025
|
defineCapability({
|
|
@@ -3985,14 +4039,11 @@ var accessVerbCapabilities = [
|
|
|
3985
4039
|
confirm: z17.boolean().optional()
|
|
3986
4040
|
}),
|
|
3987
4041
|
slack: false,
|
|
3988
|
-
execute: (ctx, input) => ctx.fetch
|
|
3989
|
-
|
|
3990
|
-
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
request_id: input.requestId,
|
|
3994
|
-
ssh_key_ids: input.sshKeyIds
|
|
3995
|
-
}
|
|
4042
|
+
execute: (ctx, input) => switchReservationAccess(ctx.fetch, input.reservationId, {
|
|
4043
|
+
access_mode: input.accessMode ?? "bare-metal",
|
|
4044
|
+
network_mode: input.networkMode,
|
|
4045
|
+
request_id: input.requestId,
|
|
4046
|
+
ssh_key_ids: input.sshKeyIds
|
|
3996
4047
|
})
|
|
3997
4048
|
}),
|
|
3998
4049
|
defineCapability({
|
|
@@ -4004,7 +4055,7 @@ var accessVerbCapabilities = [
|
|
|
4004
4055
|
http: { method: "GET", path: `${NODES_ROUTE}/reservations/{reservationId}/ssh-keys` },
|
|
4005
4056
|
input: z17.object({ reservationId: z17.string() }),
|
|
4006
4057
|
slack: false,
|
|
4007
|
-
execute: (ctx, input) => ctx.fetch
|
|
4058
|
+
execute: (ctx, input) => listReservationSshKeys(ctx.fetch, input.reservationId)
|
|
4008
4059
|
}),
|
|
4009
4060
|
defineCapability({
|
|
4010
4061
|
id: "access.keys.add",
|
|
@@ -4015,9 +4066,9 @@ var accessVerbCapabilities = [
|
|
|
4015
4066
|
http: { method: "POST", path: `${NODES_ROUTE}/reservations/{reservationId}/ssh-keys` },
|
|
4016
4067
|
input: publicKeyInput.extend({ reservationId: z17.string() }),
|
|
4017
4068
|
slack: false,
|
|
4018
|
-
execute: (ctx, input) => ctx.fetch
|
|
4019
|
-
|
|
4020
|
-
|
|
4069
|
+
execute: (ctx, input) => addReservationSshKey(ctx.fetch, input.reservationId, {
|
|
4070
|
+
label: input.label ?? null,
|
|
4071
|
+
public_key: input.publicKey
|
|
4021
4072
|
})
|
|
4022
4073
|
}),
|
|
4023
4074
|
defineCapability({
|
|
@@ -4140,9 +4191,9 @@ var machinePushKeysCapability = defineCapability({
|
|
|
4140
4191
|
}),
|
|
4141
4192
|
mcp: false,
|
|
4142
4193
|
slack: false,
|
|
4143
|
-
execute: (ctx, input) => ctx.fetch
|
|
4144
|
-
|
|
4145
|
-
|
|
4194
|
+
execute: (ctx, input) => pushNodeKeys(ctx.fetch, input.nodeId, {
|
|
4195
|
+
request_id: input.requestId,
|
|
4196
|
+
ssh_key_ids: input.sshKeyIds
|
|
4146
4197
|
})
|
|
4147
4198
|
});
|
|
4148
4199
|
var machineMetricsCapabilities = [
|
|
@@ -4152,7 +4203,10 @@ var machineMetricsCapabilities = [
|
|
|
4152
4203
|
roles: ["user"],
|
|
4153
4204
|
description: "Fetch a live metrics snapshot for one reservation machine.",
|
|
4154
4205
|
mutation: "read",
|
|
4155
|
-
http: {
|
|
4206
|
+
http: {
|
|
4207
|
+
method: "GET",
|
|
4208
|
+
path: "/v1/workflows/compute/nodes/reservations/{reservationId}/live-metrics"
|
|
4209
|
+
},
|
|
4156
4210
|
input: z17.object({ reservationId: z17.string(), machineId: z17.string() }),
|
|
4157
4211
|
mcp: false,
|
|
4158
4212
|
slack: false,
|
|
@@ -4166,7 +4220,10 @@ var machineMetricsCapabilities = [
|
|
|
4166
4220
|
roles: ["user"],
|
|
4167
4221
|
description: "Fetch historical telemetry for one reservation machine over a time range.",
|
|
4168
4222
|
mutation: "read",
|
|
4169
|
-
http: {
|
|
4223
|
+
http: {
|
|
4224
|
+
method: "GET",
|
|
4225
|
+
path: "/v1/workflows/compute/nodes/reservations/{reservationId}/telemetry-history"
|
|
4226
|
+
},
|
|
4170
4227
|
input: z17.object({
|
|
4171
4228
|
reservationId: z17.string(),
|
|
4172
4229
|
machineId: z17.string(),
|