@ornncompute/cli 1.0.122 → 1.0.123

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.
@@ -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(`/nodes/${encodeURIComponent(input.node_id)}/ssh-certificates`, {
82
- method: "POST",
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(queryPath("/nodes", pagination), { method: "GET" });
672
+ return listNodes(ctx.fetch, pagination);
477
673
  }
478
- return ctx.fetch(queryPath("/nodes", {
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
- }), { method: "GET" });
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(`/nodes/${encodeURIComponent(id)}/terminate`, {
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(`/nodes/${encodeURIComponent(parsed.node_id)}`, { method: "GET" });
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(sanitizePath(node_id), { method: "POST", body: body2 });
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(sanitizePath(parsed.node_id, parsed.job_id), { method: "GET" });
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(sanitizePath(node_id, job_id), { method: "PATCH", body: body2 });
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(`/nodes/${encodeURIComponent(parsed.machine_id)}/reboot`, {
3172
- method: "POST",
3173
- body: {
3174
- mode,
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(`/nodes/${encodeURIComponent(id)}/assign`, {
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 only the explicitly requested VM, Bare Metal, or network goal while retaining SSH-key intent.",
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 machine data and hard reset one exact direct machine.",
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 machine only with explicit local-data erasure scope and final consent.",
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/workflows/compute/nodes";
3897
- var ORG_SSH_KEYS_ROUTE = `${NODES_ROUTE}/organizations/me/ssh-keys`;
3898
- var CLUSTER_USERS_ROUTE = `${NODES_ROUTE}/organizations/me/cluster-users`;
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(`${NODES_ROUTE}/${encodeURIComponent(input.nodeId)}/reboot`, {
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(`${NODES_ROUTE}?reservation_id=${encodeURIComponent(input.reservationId)}`, {
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(reservationNodesRoute(input.reservationId, "launch"), {
3958
- method: "POST",
3959
- body: {
3960
- access_mode: input.accessMode === "vm" ? "virtual-machine" : "bare-metal",
3961
- machine_count: input.machineCount ?? 1,
3962
- request_id: input.requestId ?? null,
3963
- ssh_key_ids: input.sshKeyIds,
3964
- ...input.networkMode ? { network_mode: input.networkMode } : {},
3965
- ...input.diskId ? { disk_id: input.diskId } : {},
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(reservationNodesRoute(input.reservationId, "switch-access"), {
3989
- method: "POST",
3990
- body: {
3991
- access_mode: input.accessMode ?? "bare-metal",
3992
- network_mode: input.networkMode,
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(reservationNodesRoute(input.reservationId, "ssh-keys"), { method: "GET" })
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(reservationNodesRoute(input.reservationId, "ssh-keys"), {
4019
- method: "POST",
4020
- body: { label: input.label ?? null, public_key: input.publicKey }
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(`${NODES_ROUTE}/${encodeURIComponent(input.nodeId)}/push-keys`, {
4144
- method: "POST",
4145
- body: { request_id: input.requestId, ssh_key_ids: input.sshKeyIds }
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: { method: "GET", path: `${NODES_ROUTE}/reservations/{reservationId}/live-metrics` },
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: { method: "GET", path: `${NODES_ROUTE}/reservations/{reservationId}/telemetry-history` },
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(),