@runpod/mcp-server 4.6.0 → 4.7.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/CHANGELOG.md +30 -0
- package/README.md +3 -1
- package/dist/{chunk-4GF3CMSH.mjs → chunk-5IFIMVI6.mjs} +2 -2
- package/dist/{chunk-4GF3CMSH.mjs.map → chunk-5IFIMVI6.mjs.map} +1 -1
- package/dist/http.cjs +335 -220
- package/dist/http.cjs.map +1 -1
- package/dist/http.mjs +335 -220
- package/dist/http.mjs.map +1 -1
- package/dist/stdio.cjs +336 -221
- package/dist/stdio.cjs.map +1 -1
- package/dist/stdio.mjs +337 -222
- package/dist/stdio.mjs.map +1 -1
- package/dist/{wizard-KKTBTVXE.mjs → wizard-NVV3UNOG.mjs} +2 -2
- package/package.json +5 -3
- /package/dist/{wizard-KKTBTVXE.mjs.map → wizard-NVV3UNOG.mjs.map} +0 -0
package/dist/stdio.cjs
CHANGED
|
@@ -47,7 +47,7 @@ function authedGraphqlBase(env) {
|
|
|
47
47
|
return pick(env.RUNPOD_AUTHED_GRAPHQL_URL, "https://api.runpod.io/graphql");
|
|
48
48
|
}
|
|
49
49
|
function hostedMcpBase(env) {
|
|
50
|
-
return pick(env.RUNPOD_MCP_URL, "https://mcp.
|
|
50
|
+
return pick(env.RUNPOD_MCP_URL, "https://mcp.runpod.io");
|
|
51
51
|
}
|
|
52
52
|
var init_hosts = __esm({
|
|
53
53
|
"src/_shared/hosts.ts"() {
|
|
@@ -1183,7 +1183,7 @@ var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
|
1183
1183
|
|
|
1184
1184
|
// src/server.ts
|
|
1185
1185
|
var SERVER_NAME = "Runpod API Server";
|
|
1186
|
-
var SERVER_VERSION = true ? "4.
|
|
1186
|
+
var SERVER_VERSION = true ? "4.7.0" : "dev";
|
|
1187
1187
|
|
|
1188
1188
|
// src/specgen/server.ts
|
|
1189
1189
|
var import_server3 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
@@ -1579,7 +1579,7 @@ var generatedTools = [
|
|
|
1579
1579
|
description: "Environment variables as key-value pairs",
|
|
1580
1580
|
examples: [
|
|
1581
1581
|
{
|
|
1582
|
-
JUPYTER_PASSWORD: "
|
|
1582
|
+
JUPYTER_PASSWORD: "changeme"
|
|
1583
1583
|
}
|
|
1584
1584
|
]
|
|
1585
1585
|
},
|
|
@@ -1782,7 +1782,7 @@ var generatedTools = [
|
|
|
1782
1782
|
type: "string",
|
|
1783
1783
|
description: "ECR resource ARN",
|
|
1784
1784
|
examples: [
|
|
1785
|
-
"arn:aws:ecr:us-east-2:
|
|
1785
|
+
"arn:aws:ecr:us-east-2:123456789012:repository/runpod/deployment"
|
|
1786
1786
|
]
|
|
1787
1787
|
},
|
|
1788
1788
|
name: {
|
|
@@ -1866,7 +1866,7 @@ var generatedTools = [
|
|
|
1866
1866
|
description: "Environment variables as key-value pairs",
|
|
1867
1867
|
examples: [
|
|
1868
1868
|
{
|
|
1869
|
-
JUPYTER_PASSWORD: "
|
|
1869
|
+
JUPYTER_PASSWORD: "changeme"
|
|
1870
1870
|
}
|
|
1871
1871
|
]
|
|
1872
1872
|
},
|
|
@@ -2117,7 +2117,7 @@ var generatedTools = [
|
|
|
2117
2117
|
type: "object",
|
|
2118
2118
|
required: ["volumeId"],
|
|
2119
2119
|
additionalProperties: false,
|
|
2120
|
-
description: "A volume mounted on every worker, always at `/runpod-volume`.
|
|
2120
|
+
description: "A volume mounted on every worker, always at `/runpod-volume`.",
|
|
2121
2121
|
properties: {
|
|
2122
2122
|
volumeId: {
|
|
2123
2123
|
type: "string",
|
|
@@ -2167,8 +2167,7 @@ var generatedTools = [
|
|
|
2167
2167
|
},
|
|
2168
2168
|
EndpointType: {
|
|
2169
2169
|
type: "string",
|
|
2170
|
-
description: "Request-routing semantics for a
|
|
2171
|
-
"x-enum-varnames": ["EndpointTypeQueue", "EndpointTypeLoadBalancer"],
|
|
2170
|
+
description: "Request-routing semantics for a serverless endpoint. `QUEUE` \u2014 submit asynchronous or synchronous jobs through the managed queue. `LOAD_BALANCER` \u2014 send requests directly to worker-defined HTTP paths.",
|
|
2172
2171
|
enum: ["QUEUE", "LOAD_BALANCER"]
|
|
2173
2172
|
},
|
|
2174
2173
|
EndpointWorkers: {
|
|
@@ -2277,7 +2276,6 @@ var generatedTools = [
|
|
|
2277
2276
|
type: "string",
|
|
2278
2277
|
minLength: 1,
|
|
2279
2278
|
maxLength: 191,
|
|
2280
|
-
pattern: "[^\\p{Z}\\t-\\r\x85]",
|
|
2281
2279
|
description: "Human-readable name, 1\u2013191 characters with at least one non-whitespace character. Leading and trailing whitespace is trimmed.",
|
|
2282
2280
|
examples: ["training-data"]
|
|
2283
2281
|
}
|
|
@@ -2424,7 +2422,7 @@ var generatedTools = [
|
|
|
2424
2422
|
description: "Environment variables as key-value pairs",
|
|
2425
2423
|
examples: [
|
|
2426
2424
|
{
|
|
2427
|
-
JUPYTER_PASSWORD: "
|
|
2425
|
+
JUPYTER_PASSWORD: "changeme"
|
|
2428
2426
|
}
|
|
2429
2427
|
]
|
|
2430
2428
|
},
|
|
@@ -2573,7 +2571,7 @@ var generatedTools = [
|
|
|
2573
2571
|
{
|
|
2574
2572
|
type: "object",
|
|
2575
2573
|
required: ["name"],
|
|
2576
|
-
description: "Request body for creating a pod. Exactly one of `gpu` or `cpu` must be set
|
|
2574
|
+
description: "Request body for creating a pod. Exactly one of `gpu` or `cpu` must be set. For CPU pods, memory is derived by the API from the selected flavor's RAM multiplier; clients provide only CPU flavor and vCPU count.",
|
|
2577
2575
|
properties: {
|
|
2578
2576
|
name: {
|
|
2579
2577
|
type: "string",
|
|
@@ -2603,7 +2601,7 @@ var generatedTools = [
|
|
|
2603
2601
|
globalNetworking: {
|
|
2604
2602
|
type: "boolean",
|
|
2605
2603
|
default: false,
|
|
2606
|
-
description: "Enable global networking, giving the pod a private IP reachable across data centers. Requires an NVIDIA GPU and a global-networking-enabled data center (
|
|
2604
|
+
description: "Enable global networking, giving the pod a private IP reachable across data centers. Requires an NVIDIA GPU and a global-networking-enabled data center. See `list-data-centers` (`globalNetwork`) for eligible data centers.",
|
|
2607
2605
|
examples: [false]
|
|
2608
2606
|
},
|
|
2609
2607
|
gpu: {
|
|
@@ -2902,7 +2900,7 @@ var generatedTools = [
|
|
|
2902
2900
|
description: "Environment variables as key-value pairs",
|
|
2903
2901
|
examples: [
|
|
2904
2902
|
{
|
|
2905
|
-
JUPYTER_PASSWORD: "
|
|
2903
|
+
JUPYTER_PASSWORD: "changeme"
|
|
2906
2904
|
}
|
|
2907
2905
|
]
|
|
2908
2906
|
},
|
|
@@ -3363,7 +3361,7 @@ var generatedTools = [
|
|
|
3363
3361
|
items: {
|
|
3364
3362
|
$ref: "#/$defs/CatalogInclude"
|
|
3365
3363
|
},
|
|
3366
|
-
description: "Comma-separated optional expansions
|
|
3364
|
+
description: "Comma-separated optional expansions; see `CatalogInclude` for the supported values."
|
|
3367
3365
|
},
|
|
3368
3366
|
product: {
|
|
3369
3367
|
type: "array",
|
|
@@ -3383,7 +3381,7 @@ var generatedTools = [
|
|
|
3383
3381
|
$defs: {
|
|
3384
3382
|
CatalogInclude: {
|
|
3385
3383
|
type: "string",
|
|
3386
|
-
description: "Catalog include expansion.
|
|
3384
|
+
description: "Catalog include expansion. `AVAILABILITY` is the only supported value.",
|
|
3387
3385
|
enum: ["AVAILABILITY"]
|
|
3388
3386
|
},
|
|
3389
3387
|
CpuProduct: {
|
|
@@ -3609,7 +3607,7 @@ var generatedTools = [
|
|
|
3609
3607
|
items: {
|
|
3610
3608
|
$ref: "#/$defs/CatalogInclude"
|
|
3611
3609
|
},
|
|
3612
|
-
description: "Comma-separated optional expansions
|
|
3610
|
+
description: "Comma-separated optional expansions; see `CatalogInclude` for the supported values."
|
|
3613
3611
|
},
|
|
3614
3612
|
product: {
|
|
3615
3613
|
type: "array",
|
|
@@ -3655,7 +3653,7 @@ var generatedTools = [
|
|
|
3655
3653
|
$defs: {
|
|
3656
3654
|
CatalogInclude: {
|
|
3657
3655
|
type: "string",
|
|
3658
|
-
description: "Catalog include expansion.
|
|
3656
|
+
description: "Catalog include expansion. `AVAILABILITY` is the only supported value.",
|
|
3659
3657
|
enum: ["AVAILABILITY"]
|
|
3660
3658
|
},
|
|
3661
3659
|
GpuCloudFilter: {
|
|
@@ -3864,6 +3862,99 @@ var generatedTools = [
|
|
|
3864
3862
|
required: ["id"]
|
|
3865
3863
|
}
|
|
3866
3864
|
},
|
|
3865
|
+
{
|
|
3866
|
+
name: "list-audit-logs",
|
|
3867
|
+
title: "List audit logs",
|
|
3868
|
+
operationId: "listAuditLogs",
|
|
3869
|
+
description: "List audit logs. Returns the account's audit trail, newest first, cursor-paginated; an omitted `limit` defaults to 200. Each entry records who acted (`actorId`, `email`), what they did (`action`), to which resource (`resourceType`, `resourceId`), and the details of the change (`value`). When the caller belongs to an organization the trail is the organization's, and `actorIds` narrows it to specific members; otherwise it is the trail of the account the request acts for. Filters combine with AND. Entries older than the account's audit log retention window are not returned, and an account whose plan does not include audit logs is answered 403. Follow `pagination.nextCursor` until `hasNextPage` is false.",
|
|
3870
|
+
directoryDescription: "List the account's audit trail, newest first. Results are cursor-paginated and record the actor, action, resource, timestamp, and change details. Filters include actor IDs, actions, time range, and text search. The account's retention window and plan determine which entries are available.",
|
|
3871
|
+
method: "GET",
|
|
3872
|
+
path: "/v2/audit-logs",
|
|
3873
|
+
params: [
|
|
3874
|
+
{
|
|
3875
|
+
name: "actorIds",
|
|
3876
|
+
location: "query",
|
|
3877
|
+
explode: false
|
|
3878
|
+
},
|
|
3879
|
+
{
|
|
3880
|
+
name: "actions",
|
|
3881
|
+
location: "query",
|
|
3882
|
+
explode: false
|
|
3883
|
+
},
|
|
3884
|
+
{
|
|
3885
|
+
name: "startTime",
|
|
3886
|
+
location: "query"
|
|
3887
|
+
},
|
|
3888
|
+
{
|
|
3889
|
+
name: "endTime",
|
|
3890
|
+
location: "query"
|
|
3891
|
+
},
|
|
3892
|
+
{
|
|
3893
|
+
name: "search",
|
|
3894
|
+
location: "query"
|
|
3895
|
+
},
|
|
3896
|
+
{
|
|
3897
|
+
name: "cursor",
|
|
3898
|
+
location: "query"
|
|
3899
|
+
},
|
|
3900
|
+
{
|
|
3901
|
+
name: "limit",
|
|
3902
|
+
location: "query"
|
|
3903
|
+
}
|
|
3904
|
+
],
|
|
3905
|
+
hasBody: false,
|
|
3906
|
+
annotations: {
|
|
3907
|
+
readOnlyHint: true,
|
|
3908
|
+
destructiveHint: false,
|
|
3909
|
+
idempotentHint: true,
|
|
3910
|
+
openWorldHint: true
|
|
3911
|
+
},
|
|
3912
|
+
inputSchema: {
|
|
3913
|
+
type: "object",
|
|
3914
|
+
properties: {
|
|
3915
|
+
actorIds: {
|
|
3916
|
+
type: "array",
|
|
3917
|
+
items: {
|
|
3918
|
+
type: "string"
|
|
3919
|
+
},
|
|
3920
|
+
description: "Only return entries performed by these users. Comma-separated user IDs. Available to organization accounts only; a personal or team account is answered 400."
|
|
3921
|
+
},
|
|
3922
|
+
actions: {
|
|
3923
|
+
type: "array",
|
|
3924
|
+
items: {
|
|
3925
|
+
type: "string"
|
|
3926
|
+
},
|
|
3927
|
+
description: "Only return entries whose `action` is one of these names, matched exactly as recorded. Comma-separated."
|
|
3928
|
+
},
|
|
3929
|
+
startTime: {
|
|
3930
|
+
type: "string",
|
|
3931
|
+
format: "date-time",
|
|
3932
|
+
description: "Earliest instant to include, inclusive (RFC 3339). The account's audit log retention window still applies: entries that have aged out are not returned even when this reaches further back."
|
|
3933
|
+
},
|
|
3934
|
+
endTime: {
|
|
3935
|
+
type: "string",
|
|
3936
|
+
format: "date-time",
|
|
3937
|
+
description: "Latest instant to include, inclusive (RFC 3339). Must be after `startTime` when both are given; 400 otherwise."
|
|
3938
|
+
},
|
|
3939
|
+
search: {
|
|
3940
|
+
type: "string",
|
|
3941
|
+
minLength: 1,
|
|
3942
|
+
description: "Case-insensitive substring match against `email`, `resourceType`, `resourceId`, `action` and `value`; `actorId` is not searched. Surrounding whitespace is ignored."
|
|
3943
|
+
},
|
|
3944
|
+
cursor: {
|
|
3945
|
+
type: "string",
|
|
3946
|
+
minLength: 1,
|
|
3947
|
+
description: "Opaque resume cursor \u2014 pass the previous response's `pagination.nextCursor` through verbatim; omit for the first page. A cursor is only valid for the operation and parameters that issued it; a malformed or foreign cursor is rejected."
|
|
3948
|
+
},
|
|
3949
|
+
limit: {
|
|
3950
|
+
type: "integer",
|
|
3951
|
+
minimum: 1,
|
|
3952
|
+
maximum: 200,
|
|
3953
|
+
description: "Page size, 1\u2013200. Defaults to 200 when omitted."
|
|
3954
|
+
}
|
|
3955
|
+
}
|
|
3956
|
+
}
|
|
3957
|
+
},
|
|
3867
3958
|
{
|
|
3868
3959
|
name: "list-billing",
|
|
3869
3960
|
title: "List billing",
|
|
@@ -3924,13 +4015,6 @@ var generatedTools = [
|
|
|
3924
4015
|
BillingBucketSize: {
|
|
3925
4016
|
type: "string",
|
|
3926
4017
|
enum: ["hour", "day", "week", "month", "year"],
|
|
3927
|
-
"x-enum-varnames": [
|
|
3928
|
-
"BillingBucketSizeHour",
|
|
3929
|
-
"BillingBucketSizeDay",
|
|
3930
|
-
"BillingBucketSizeWeek",
|
|
3931
|
-
"BillingBucketSizeMonth",
|
|
3932
|
-
"BillingBucketSizeYear"
|
|
3933
|
-
],
|
|
3934
4018
|
default: "day",
|
|
3935
4019
|
description: "Length of each billing time bucket.",
|
|
3936
4020
|
examples: ["day"]
|
|
@@ -4006,13 +4090,6 @@ var generatedTools = [
|
|
|
4006
4090
|
BillingBucketSize: {
|
|
4007
4091
|
type: "string",
|
|
4008
4092
|
enum: ["hour", "day", "week", "month", "year"],
|
|
4009
|
-
"x-enum-varnames": [
|
|
4010
|
-
"BillingBucketSizeHour",
|
|
4011
|
-
"BillingBucketSizeDay",
|
|
4012
|
-
"BillingBucketSizeWeek",
|
|
4013
|
-
"BillingBucketSizeMonth",
|
|
4014
|
-
"BillingBucketSizeYear"
|
|
4015
|
-
],
|
|
4016
4093
|
default: "day",
|
|
4017
4094
|
description: "Length of each billing time bucket.",
|
|
4018
4095
|
examples: ["day"]
|
|
@@ -4131,7 +4208,7 @@ var generatedTools = [
|
|
|
4131
4208
|
items: {
|
|
4132
4209
|
$ref: "#/$defs/CatalogInclude"
|
|
4133
4210
|
},
|
|
4134
|
-
description: "Comma-separated optional expansions
|
|
4211
|
+
description: "Comma-separated optional expansions; see `CatalogInclude` for the supported values."
|
|
4135
4212
|
},
|
|
4136
4213
|
product: {
|
|
4137
4214
|
type: "array",
|
|
@@ -4150,7 +4227,7 @@ var generatedTools = [
|
|
|
4150
4227
|
$defs: {
|
|
4151
4228
|
CatalogInclude: {
|
|
4152
4229
|
type: "string",
|
|
4153
|
-
description: "Catalog include expansion.
|
|
4230
|
+
description: "Catalog include expansion. `AVAILABILITY` is the only supported value.",
|
|
4154
4231
|
enum: ["AVAILABILITY"]
|
|
4155
4232
|
},
|
|
4156
4233
|
CpuProduct: {
|
|
@@ -4369,13 +4446,6 @@ var generatedTools = [
|
|
|
4369
4446
|
BillingBucketSize: {
|
|
4370
4447
|
type: "string",
|
|
4371
4448
|
enum: ["hour", "day", "week", "month", "year"],
|
|
4372
|
-
"x-enum-varnames": [
|
|
4373
|
-
"BillingBucketSizeHour",
|
|
4374
|
-
"BillingBucketSizeDay",
|
|
4375
|
-
"BillingBucketSizeWeek",
|
|
4376
|
-
"BillingBucketSizeMonth",
|
|
4377
|
-
"BillingBucketSizeYear"
|
|
4378
|
-
],
|
|
4379
4449
|
default: "day",
|
|
4380
4450
|
description: "Length of each billing time bucket.",
|
|
4381
4451
|
examples: ["day"]
|
|
@@ -4612,7 +4682,7 @@ var generatedTools = [
|
|
|
4612
4682
|
items: {
|
|
4613
4683
|
$ref: "#/$defs/CatalogInclude"
|
|
4614
4684
|
},
|
|
4615
|
-
description: "Comma-separated optional expansions
|
|
4685
|
+
description: "Comma-separated optional expansions; see `CatalogInclude` for the supported values."
|
|
4616
4686
|
},
|
|
4617
4687
|
product: {
|
|
4618
4688
|
type: "array",
|
|
@@ -4657,7 +4727,7 @@ var generatedTools = [
|
|
|
4657
4727
|
$defs: {
|
|
4658
4728
|
CatalogInclude: {
|
|
4659
4729
|
type: "string",
|
|
4660
|
-
description: "Catalog include expansion.
|
|
4730
|
+
description: "Catalog include expansion. `AVAILABILITY` is the only supported value.",
|
|
4661
4731
|
enum: ["AVAILABILITY"]
|
|
4662
4732
|
},
|
|
4663
4733
|
GpuCloudFilter: {
|
|
@@ -4741,13 +4811,6 @@ var generatedTools = [
|
|
|
4741
4811
|
BillingBucketSize: {
|
|
4742
4812
|
type: "string",
|
|
4743
4813
|
enum: ["hour", "day", "week", "month", "year"],
|
|
4744
|
-
"x-enum-varnames": [
|
|
4745
|
-
"BillingBucketSizeHour",
|
|
4746
|
-
"BillingBucketSizeDay",
|
|
4747
|
-
"BillingBucketSizeWeek",
|
|
4748
|
-
"BillingBucketSizeMonth",
|
|
4749
|
-
"BillingBucketSizeYear"
|
|
4750
|
-
],
|
|
4751
4814
|
default: "day",
|
|
4752
4815
|
description: "Length of each billing time bucket.",
|
|
4753
4816
|
examples: ["day"]
|
|
@@ -4864,13 +4927,6 @@ var generatedTools = [
|
|
|
4864
4927
|
BillingBucketSize: {
|
|
4865
4928
|
type: "string",
|
|
4866
4929
|
enum: ["hour", "day", "week", "month", "year"],
|
|
4867
|
-
"x-enum-varnames": [
|
|
4868
|
-
"BillingBucketSizeHour",
|
|
4869
|
-
"BillingBucketSizeDay",
|
|
4870
|
-
"BillingBucketSizeWeek",
|
|
4871
|
-
"BillingBucketSizeMonth",
|
|
4872
|
-
"BillingBucketSizeYear"
|
|
4873
|
-
],
|
|
4874
4930
|
default: "day",
|
|
4875
4931
|
description: "Length of each billing time bucket.",
|
|
4876
4932
|
examples: ["day"]
|
|
@@ -5079,13 +5135,6 @@ var generatedTools = [
|
|
|
5079
5135
|
BillingBucketSize: {
|
|
5080
5136
|
type: "string",
|
|
5081
5137
|
enum: ["hour", "day", "week", "month", "year"],
|
|
5082
|
-
"x-enum-varnames": [
|
|
5083
|
-
"BillingBucketSizeHour",
|
|
5084
|
-
"BillingBucketSizeDay",
|
|
5085
|
-
"BillingBucketSizeWeek",
|
|
5086
|
-
"BillingBucketSizeMonth",
|
|
5087
|
-
"BillingBucketSizeYear"
|
|
5088
|
-
],
|
|
5089
5138
|
default: "day",
|
|
5090
5139
|
description: "Length of each billing time bucket.",
|
|
5091
5140
|
examples: ["day"]
|
|
@@ -5304,7 +5353,7 @@ var generatedTools = [
|
|
|
5304
5353
|
description: "Environment variables as key-value pairs",
|
|
5305
5354
|
examples: [
|
|
5306
5355
|
{
|
|
5307
|
-
JUPYTER_PASSWORD: "
|
|
5356
|
+
JUPYTER_PASSWORD: "changeme"
|
|
5308
5357
|
}
|
|
5309
5358
|
]
|
|
5310
5359
|
},
|
|
@@ -5401,7 +5450,7 @@ var generatedTools = [
|
|
|
5401
5450
|
type: "object",
|
|
5402
5451
|
required: ["volumeId"],
|
|
5403
5452
|
additionalProperties: false,
|
|
5404
|
-
description: "A volume mounted on every worker, always at `/runpod-volume`.
|
|
5453
|
+
description: "A volume mounted on every worker, always at `/runpod-volume`.",
|
|
5405
5454
|
properties: {
|
|
5406
5455
|
volumeId: {
|
|
5407
5456
|
type: "string",
|
|
@@ -5661,7 +5710,6 @@ var generatedTools = [
|
|
|
5661
5710
|
type: "string",
|
|
5662
5711
|
minLength: 1,
|
|
5663
5712
|
maxLength: 191,
|
|
5664
|
-
pattern: "[^\\p{Z}\\t-\\r\x85]",
|
|
5665
5713
|
description: "New human-readable name, 1\u2013191 characters with at least one non-whitespace character. Leading and trailing whitespace is trimmed.",
|
|
5666
5714
|
examples: ["renamed-volume"]
|
|
5667
5715
|
}
|
|
@@ -5807,7 +5855,7 @@ var generatedTools = [
|
|
|
5807
5855
|
description: "Environment variables as key-value pairs",
|
|
5808
5856
|
examples: [
|
|
5809
5857
|
{
|
|
5810
|
-
JUPYTER_PASSWORD: "
|
|
5858
|
+
JUPYTER_PASSWORD: "changeme"
|
|
5811
5859
|
}
|
|
5812
5860
|
]
|
|
5813
5861
|
},
|
|
@@ -5945,7 +5993,7 @@ var generatedTools = [
|
|
|
5945
5993
|
properties: {
|
|
5946
5994
|
globalNetworking: {
|
|
5947
5995
|
type: "boolean",
|
|
5948
|
-
description: "Enable (true) or disable (false) global networking. Takes effect on the next pod start/restart, not live. Requires an NVIDIA GPU and a global-networking-enabled data center
|
|
5996
|
+
description: "Enable (true) or disable (false) global networking. Takes effect on the next pod start/restart, not live. Requires an NVIDIA GPU and a global-networking-enabled data center."
|
|
5949
5997
|
},
|
|
5950
5998
|
locked: {
|
|
5951
5999
|
type: "boolean",
|
|
@@ -6092,7 +6140,7 @@ var generatedTools = [
|
|
|
6092
6140
|
hasBody: true,
|
|
6093
6141
|
annotations: {
|
|
6094
6142
|
readOnlyHint: false,
|
|
6095
|
-
destructiveHint:
|
|
6143
|
+
destructiveHint: true,
|
|
6096
6144
|
idempotentHint: true,
|
|
6097
6145
|
openWorldHint: true
|
|
6098
6146
|
},
|
|
@@ -6154,7 +6202,7 @@ var generatedTools = [
|
|
|
6154
6202
|
description: "Environment variables as key-value pairs",
|
|
6155
6203
|
examples: [
|
|
6156
6204
|
{
|
|
6157
|
-
JUPYTER_PASSWORD: "
|
|
6205
|
+
JUPYTER_PASSWORD: "changeme"
|
|
6158
6206
|
}
|
|
6159
6207
|
]
|
|
6160
6208
|
},
|
|
@@ -6274,8 +6322,186 @@ var generatedTools = [
|
|
|
6274
6322
|
}
|
|
6275
6323
|
];
|
|
6276
6324
|
|
|
6325
|
+
// src/specgen/tools/annotations.ts
|
|
6326
|
+
var readOnly = {
|
|
6327
|
+
readOnlyHint: true,
|
|
6328
|
+
destructiveHint: false,
|
|
6329
|
+
idempotentHint: true,
|
|
6330
|
+
openWorldHint: true
|
|
6331
|
+
};
|
|
6332
|
+
var bundledRead = {
|
|
6333
|
+
readOnlyHint: true,
|
|
6334
|
+
destructiveHint: false,
|
|
6335
|
+
idempotentHint: true,
|
|
6336
|
+
openWorldHint: false
|
|
6337
|
+
};
|
|
6338
|
+
var write = {
|
|
6339
|
+
readOnlyHint: false,
|
|
6340
|
+
destructiveHint: false,
|
|
6341
|
+
idempotentHint: false,
|
|
6342
|
+
openWorldHint: true
|
|
6343
|
+
};
|
|
6344
|
+
var idempotentWrite = {
|
|
6345
|
+
readOnlyHint: false,
|
|
6346
|
+
destructiveHint: false,
|
|
6347
|
+
idempotentHint: true,
|
|
6348
|
+
openWorldHint: true
|
|
6349
|
+
};
|
|
6350
|
+
var destructive = {
|
|
6351
|
+
readOnlyHint: false,
|
|
6352
|
+
destructiveHint: true,
|
|
6353
|
+
idempotentHint: true,
|
|
6354
|
+
openWorldHint: true
|
|
6355
|
+
};
|
|
6356
|
+
var destructiveWrite = {
|
|
6357
|
+
readOnlyHint: false,
|
|
6358
|
+
destructiveHint: true,
|
|
6359
|
+
idempotentHint: false,
|
|
6360
|
+
openWorldHint: true
|
|
6361
|
+
};
|
|
6362
|
+
|
|
6363
|
+
// src/specgen/clients/http-error.ts
|
|
6364
|
+
var HttpError = class extends Error {
|
|
6365
|
+
constructor(message, status, payload = void 0) {
|
|
6366
|
+
super(message);
|
|
6367
|
+
this.status = status;
|
|
6368
|
+
this.payload = payload;
|
|
6369
|
+
this.name = "HttpError";
|
|
6370
|
+
}
|
|
6371
|
+
};
|
|
6372
|
+
function missingKeyError() {
|
|
6373
|
+
return new HttpError(
|
|
6374
|
+
"No Runpod API key: the request carried no usable credential.",
|
|
6375
|
+
401
|
|
6376
|
+
);
|
|
6377
|
+
}
|
|
6378
|
+
|
|
6379
|
+
// src/specgen/tools/util.ts
|
|
6380
|
+
function ok(payload) {
|
|
6381
|
+
return { ok: true, status: 200, payload };
|
|
6382
|
+
}
|
|
6383
|
+
function badRequest(message) {
|
|
6384
|
+
return { ok: false, status: 400, payload: { error: message } };
|
|
6385
|
+
}
|
|
6386
|
+
function isTimeout(error) {
|
|
6387
|
+
if (!(error instanceof Error)) return false;
|
|
6388
|
+
if (error.name === "TimeoutError" || error.name === "AbortError") return true;
|
|
6389
|
+
const cause = error.cause;
|
|
6390
|
+
return cause instanceof Error && (cause.name === "TimeoutError" || cause.name === "AbortError");
|
|
6391
|
+
}
|
|
6392
|
+
var UNREACHED_CODES = /* @__PURE__ */ new Set([
|
|
6393
|
+
"ENOTFOUND",
|
|
6394
|
+
"EAI_AGAIN",
|
|
6395
|
+
"ECONNREFUSED",
|
|
6396
|
+
"EHOSTUNREACH",
|
|
6397
|
+
"ENETUNREACH",
|
|
6398
|
+
"UND_ERR_CONNECT_TIMEOUT"
|
|
6399
|
+
]);
|
|
6400
|
+
var TLS_CODE = /^(?:CERT_|ERR_TLS_|UNABLE_TO_|DEPTH_ZERO_|SELF_SIGNED_)/;
|
|
6401
|
+
function causeCode(cause) {
|
|
6402
|
+
const code = cause?.code;
|
|
6403
|
+
if (typeof code === "string") return code;
|
|
6404
|
+
const inner = cause instanceof AggregateError ? cause.errors[0] : void 0;
|
|
6405
|
+
const innerCode = inner?.code;
|
|
6406
|
+
return typeof innerCode === "string" ? innerCode : void 0;
|
|
6407
|
+
}
|
|
6408
|
+
function networkFailureResult(error) {
|
|
6409
|
+
if (!(error instanceof TypeError)) return void 0;
|
|
6410
|
+
const afterHeaders = error.message === "terminated";
|
|
6411
|
+
if (!afterHeaders && error.message !== "fetch failed") return void 0;
|
|
6412
|
+
const code = causeCode(error.cause);
|
|
6413
|
+
if (!code) return void 0;
|
|
6414
|
+
const unreached = !afterHeaders && (UNREACHED_CODES.has(code) || TLS_CODE.test(code));
|
|
6415
|
+
return {
|
|
6416
|
+
ok: false,
|
|
6417
|
+
status: unreached ? 503 : 502,
|
|
6418
|
+
payload: unreached ? {
|
|
6419
|
+
error: "Could not reach the Runpod API.",
|
|
6420
|
+
cause: code,
|
|
6421
|
+
hint: "The request never reached Runpod, so retrying the same call is safe: retry it once. If it fails again, the network, DNS, proxy or TLS setup on this machine is the likely cause; check https://uptime.runpod.io and report it rather than retrying further."
|
|
6422
|
+
} : {
|
|
6423
|
+
error: "The connection to the Runpod API dropped before the full response arrived.",
|
|
6424
|
+
cause: code,
|
|
6425
|
+
hint: "The request may have been applied. A read can be retried once. For a create, update, delete or job submission, check with the matching get- or list- tool whether it took effect before calling again; retrying blindly can create a duplicate billable resource."
|
|
6426
|
+
}
|
|
6427
|
+
};
|
|
6428
|
+
}
|
|
6429
|
+
async function runTool(body) {
|
|
6430
|
+
try {
|
|
6431
|
+
return await body();
|
|
6432
|
+
} catch (error) {
|
|
6433
|
+
if (error instanceof HttpError) {
|
|
6434
|
+
return {
|
|
6435
|
+
ok: false,
|
|
6436
|
+
status: error.status,
|
|
6437
|
+
payload: { error: error.message, detail: error.payload }
|
|
6438
|
+
};
|
|
6439
|
+
}
|
|
6440
|
+
if (isTimeout(error)) {
|
|
6441
|
+
return {
|
|
6442
|
+
ok: false,
|
|
6443
|
+
status: 504,
|
|
6444
|
+
payload: {
|
|
6445
|
+
error: "The Runpod API did not respond before the request deadline.",
|
|
6446
|
+
hint: "Transient upstream stall: retry the same call once; if it persists, check https://uptime.runpod.io."
|
|
6447
|
+
}
|
|
6448
|
+
};
|
|
6449
|
+
}
|
|
6450
|
+
const network = networkFailureResult(error);
|
|
6451
|
+
if (network) return network;
|
|
6452
|
+
throw error;
|
|
6453
|
+
}
|
|
6454
|
+
}
|
|
6455
|
+
|
|
6456
|
+
// src/specgen/tools/pod-transitions.ts
|
|
6457
|
+
var podAction = generatedTools.find((tool) => tool.name === "pod-action");
|
|
6458
|
+
if (!podAction)
|
|
6459
|
+
throw new Error("pod-action is missing from the generated tools");
|
|
6460
|
+
var POD_ID = {
|
|
6461
|
+
type: "object",
|
|
6462
|
+
properties: { id: { type: "string", description: "ID of the Pod" } },
|
|
6463
|
+
required: ["id"],
|
|
6464
|
+
additionalProperties: false
|
|
6465
|
+
};
|
|
6466
|
+
function transition(action, title, description, annotations) {
|
|
6467
|
+
return {
|
|
6468
|
+
name: `${action}-pod`,
|
|
6469
|
+
title,
|
|
6470
|
+
description,
|
|
6471
|
+
inputSchema: POD_ID,
|
|
6472
|
+
annotations,
|
|
6473
|
+
handler: (ctx, args) => runTool(
|
|
6474
|
+
() => dispatchGeneratedTool(ctx.sdk, podAction, {
|
|
6475
|
+
id: args.id,
|
|
6476
|
+
body: { action }
|
|
6477
|
+
})
|
|
6478
|
+
)
|
|
6479
|
+
};
|
|
6480
|
+
}
|
|
6481
|
+
var podTransitionTools = [
|
|
6482
|
+
transition(
|
|
6483
|
+
"start",
|
|
6484
|
+
"Start Pod",
|
|
6485
|
+
"Start a stopped Pod (status EXITED or ERROR). Billable: the Pod accrues its hourly price while it runs. Returns the updated Pod; a Pod in any other status returns 409.",
|
|
6486
|
+
write
|
|
6487
|
+
),
|
|
6488
|
+
transition(
|
|
6489
|
+
"stop",
|
|
6490
|
+
"Stop Pod",
|
|
6491
|
+
"Stop a running or provisioning Pod. It releases its GPU or CPU and stops compute billing; the container disk is wiped, while the volume disk and any attached network volume keep their data and volume storage keeps billing. Returns the updated Pod; a Pod in any other status returns 409.",
|
|
6492
|
+
destructiveWrite
|
|
6493
|
+
),
|
|
6494
|
+
transition(
|
|
6495
|
+
"restart",
|
|
6496
|
+
"Restart Pod",
|
|
6497
|
+
"Restart a running Pod's container in place. Whatever is running in the container is interrupted and the container disk is wiped; the volume disk and any attached network volume keep their data. Returns the updated Pod; a Pod that is not RUNNING returns 409.",
|
|
6498
|
+
destructiveWrite
|
|
6499
|
+
)
|
|
6500
|
+
];
|
|
6501
|
+
|
|
6277
6502
|
// src/specgen/profile.ts
|
|
6278
6503
|
var IN = { include: true };
|
|
6504
|
+
var CREDENTIAL_MANAGEMENT = "Manages stored credentials; OpenAI restricts plugins that handle access credentials, so the directory leaves the whole credential family out.";
|
|
6279
6505
|
var CREDENTIAL_INPUT = "Takes a secret or password as input; directories forbid collecting credentials.";
|
|
6280
6506
|
var ALP = "Collects conversation-derived data beyond the task; the directory profile never serves it.";
|
|
6281
6507
|
var DIRECTORY_TOOLS = {
|
|
@@ -6292,8 +6518,6 @@ var DIRECTORY_TOOLS = {
|
|
|
6292
6518
|
"delete-global-volume": IN,
|
|
6293
6519
|
"delete-network-volume": IN,
|
|
6294
6520
|
"delete-pod": IN,
|
|
6295
|
-
"delete-registry": IN,
|
|
6296
|
-
"delete-secret": IN,
|
|
6297
6521
|
"delete-template": IN,
|
|
6298
6522
|
"deploy-hub-repo": IN,
|
|
6299
6523
|
"endpoint-health": IN,
|
|
@@ -6309,10 +6533,9 @@ var DIRECTORY_TOOLS = {
|
|
|
6309
6533
|
"get-network-volume": IN,
|
|
6310
6534
|
"get-organization": IN,
|
|
6311
6535
|
"get-pod": IN,
|
|
6312
|
-
"get-registry": IN,
|
|
6313
|
-
"get-secret": IN,
|
|
6314
6536
|
"get-ssh-keys": IN,
|
|
6315
6537
|
"get-template": IN,
|
|
6538
|
+
"list-audit-logs": IN,
|
|
6316
6539
|
"list-billing": IN,
|
|
6317
6540
|
"list-cluster-billing": IN,
|
|
6318
6541
|
"list-cluster-pods": IN,
|
|
@@ -6334,12 +6557,9 @@ var DIRECTORY_TOOLS = {
|
|
|
6334
6557
|
"list-pods": IN,
|
|
6335
6558
|
"list-public-endpoints": IN,
|
|
6336
6559
|
"list-public-templates": IN,
|
|
6337
|
-
"list-registries": IN,
|
|
6338
|
-
"list-secrets": IN,
|
|
6339
6560
|
"list-serverless-billing": IN,
|
|
6340
6561
|
"list-templates": IN,
|
|
6341
6562
|
"lookup-concept": IN,
|
|
6342
|
-
"pod-action": IN,
|
|
6343
6563
|
"purge-endpoint-queue": IN,
|
|
6344
6564
|
"retry-job": IN,
|
|
6345
6565
|
"revoke-delegation": IN,
|
|
@@ -6358,6 +6578,13 @@ var DIRECTORY_TOOLS = {
|
|
|
6358
6578
|
"update-template": IN,
|
|
6359
6579
|
"run-endpoint": { include: true, omitInputs: ["s3Config"] },
|
|
6360
6580
|
"runsync-endpoint": { include: true, omitInputs: ["s3Config"] },
|
|
6581
|
+
"pod-action": {
|
|
6582
|
+
include: false,
|
|
6583
|
+
reason: "Takes the transition as an argument; OpenAI asks for one tool per operation, so the directory serves start-pod, stop-pod and restart-pod (terminate is delete-pod)."
|
|
6584
|
+
},
|
|
6585
|
+
"start-pod": IN,
|
|
6586
|
+
"stop-pod": IN,
|
|
6587
|
+
"restart-pod": IN,
|
|
6361
6588
|
"list-guides": {
|
|
6362
6589
|
include: false,
|
|
6363
6590
|
reason: "Serves playbooks that instruct the model how to behave."
|
|
@@ -6371,6 +6598,12 @@ var DIRECTORY_TOOLS = {
|
|
|
6371
6598
|
reason: "Fetches schemas the directory already lists in full; directories reject schema fetching."
|
|
6372
6599
|
},
|
|
6373
6600
|
"create-secret": { include: false, reason: CREDENTIAL_INPUT },
|
|
6601
|
+
"get-secret": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6602
|
+
"list-secrets": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6603
|
+
"delete-secret": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6604
|
+
"get-registry": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6605
|
+
"list-registries": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6606
|
+
"delete-registry": { include: false, reason: CREDENTIAL_MANAGEMENT },
|
|
6374
6607
|
"update-secret": { include: false, reason: CREDENTIAL_INPUT },
|
|
6375
6608
|
"create-registry": { include: false, reason: CREDENTIAL_INPUT },
|
|
6376
6609
|
report_feedback: { include: false, reason: ALP },
|
|
@@ -6485,137 +6718,6 @@ function capList(items, options, extra) {
|
|
|
6485
6718
|
};
|
|
6486
6719
|
}
|
|
6487
6720
|
|
|
6488
|
-
// src/specgen/clients/http-error.ts
|
|
6489
|
-
var HttpError = class extends Error {
|
|
6490
|
-
constructor(message, status, payload = void 0) {
|
|
6491
|
-
super(message);
|
|
6492
|
-
this.status = status;
|
|
6493
|
-
this.payload = payload;
|
|
6494
|
-
this.name = "HttpError";
|
|
6495
|
-
}
|
|
6496
|
-
};
|
|
6497
|
-
function missingKeyError() {
|
|
6498
|
-
return new HttpError(
|
|
6499
|
-
"No Runpod API key: the request carried no usable credential.",
|
|
6500
|
-
401
|
|
6501
|
-
);
|
|
6502
|
-
}
|
|
6503
|
-
|
|
6504
|
-
// src/specgen/tools/util.ts
|
|
6505
|
-
function ok(payload) {
|
|
6506
|
-
return { ok: true, status: 200, payload };
|
|
6507
|
-
}
|
|
6508
|
-
function badRequest(message) {
|
|
6509
|
-
return { ok: false, status: 400, payload: { error: message } };
|
|
6510
|
-
}
|
|
6511
|
-
function isTimeout(error) {
|
|
6512
|
-
if (!(error instanceof Error)) return false;
|
|
6513
|
-
if (error.name === "TimeoutError" || error.name === "AbortError") return true;
|
|
6514
|
-
const cause = error.cause;
|
|
6515
|
-
return cause instanceof Error && (cause.name === "TimeoutError" || cause.name === "AbortError");
|
|
6516
|
-
}
|
|
6517
|
-
var UNREACHED_CODES = /* @__PURE__ */ new Set([
|
|
6518
|
-
"ENOTFOUND",
|
|
6519
|
-
"EAI_AGAIN",
|
|
6520
|
-
"ECONNREFUSED",
|
|
6521
|
-
"EHOSTUNREACH",
|
|
6522
|
-
"ENETUNREACH",
|
|
6523
|
-
"UND_ERR_CONNECT_TIMEOUT"
|
|
6524
|
-
]);
|
|
6525
|
-
var TLS_CODE = /^(?:CERT_|ERR_TLS_|UNABLE_TO_|DEPTH_ZERO_|SELF_SIGNED_)/;
|
|
6526
|
-
function causeCode(cause) {
|
|
6527
|
-
const code = cause?.code;
|
|
6528
|
-
if (typeof code === "string") return code;
|
|
6529
|
-
const inner = cause instanceof AggregateError ? cause.errors[0] : void 0;
|
|
6530
|
-
const innerCode = inner?.code;
|
|
6531
|
-
return typeof innerCode === "string" ? innerCode : void 0;
|
|
6532
|
-
}
|
|
6533
|
-
function networkFailureResult(error) {
|
|
6534
|
-
if (!(error instanceof TypeError)) return void 0;
|
|
6535
|
-
const afterHeaders = error.message === "terminated";
|
|
6536
|
-
if (!afterHeaders && error.message !== "fetch failed") return void 0;
|
|
6537
|
-
const code = causeCode(error.cause);
|
|
6538
|
-
if (!code) return void 0;
|
|
6539
|
-
const unreached = !afterHeaders && (UNREACHED_CODES.has(code) || TLS_CODE.test(code));
|
|
6540
|
-
return {
|
|
6541
|
-
ok: false,
|
|
6542
|
-
status: unreached ? 503 : 502,
|
|
6543
|
-
payload: unreached ? {
|
|
6544
|
-
error: "Could not reach the Runpod API.",
|
|
6545
|
-
cause: code,
|
|
6546
|
-
hint: "The request never reached Runpod, so retrying the same call is safe: retry it once. If it fails again, the network, DNS, proxy or TLS setup on this machine is the likely cause; check https://uptime.runpod.io and report it rather than retrying further."
|
|
6547
|
-
} : {
|
|
6548
|
-
error: "The connection to the Runpod API dropped before the full response arrived.",
|
|
6549
|
-
cause: code,
|
|
6550
|
-
hint: "The request may have been applied. A read can be retried once. For a create, update, delete or job submission, check with the matching get- or list- tool whether it took effect before calling again; retrying blindly can create a duplicate billable resource."
|
|
6551
|
-
}
|
|
6552
|
-
};
|
|
6553
|
-
}
|
|
6554
|
-
async function runTool(body) {
|
|
6555
|
-
try {
|
|
6556
|
-
return await body();
|
|
6557
|
-
} catch (error) {
|
|
6558
|
-
if (error instanceof HttpError) {
|
|
6559
|
-
return {
|
|
6560
|
-
ok: false,
|
|
6561
|
-
status: error.status,
|
|
6562
|
-
payload: { error: error.message, detail: error.payload }
|
|
6563
|
-
};
|
|
6564
|
-
}
|
|
6565
|
-
if (isTimeout(error)) {
|
|
6566
|
-
return {
|
|
6567
|
-
ok: false,
|
|
6568
|
-
status: 504,
|
|
6569
|
-
payload: {
|
|
6570
|
-
error: "The Runpod API did not respond before the request deadline.",
|
|
6571
|
-
hint: "Transient upstream stall: retry the same call once; if it persists, check https://uptime.runpod.io."
|
|
6572
|
-
}
|
|
6573
|
-
};
|
|
6574
|
-
}
|
|
6575
|
-
const network = networkFailureResult(error);
|
|
6576
|
-
if (network) return network;
|
|
6577
|
-
throw error;
|
|
6578
|
-
}
|
|
6579
|
-
}
|
|
6580
|
-
|
|
6581
|
-
// src/specgen/tools/annotations.ts
|
|
6582
|
-
var readOnly = {
|
|
6583
|
-
readOnlyHint: true,
|
|
6584
|
-
destructiveHint: false,
|
|
6585
|
-
idempotentHint: true,
|
|
6586
|
-
openWorldHint: true
|
|
6587
|
-
};
|
|
6588
|
-
var bundledRead = {
|
|
6589
|
-
readOnlyHint: true,
|
|
6590
|
-
destructiveHint: false,
|
|
6591
|
-
idempotentHint: true,
|
|
6592
|
-
openWorldHint: false
|
|
6593
|
-
};
|
|
6594
|
-
var write = {
|
|
6595
|
-
readOnlyHint: false,
|
|
6596
|
-
destructiveHint: false,
|
|
6597
|
-
idempotentHint: false,
|
|
6598
|
-
openWorldHint: true
|
|
6599
|
-
};
|
|
6600
|
-
var idempotentWrite = {
|
|
6601
|
-
readOnlyHint: false,
|
|
6602
|
-
destructiveHint: false,
|
|
6603
|
-
idempotentHint: true,
|
|
6604
|
-
openWorldHint: true
|
|
6605
|
-
};
|
|
6606
|
-
var destructive = {
|
|
6607
|
-
readOnlyHint: false,
|
|
6608
|
-
destructiveHint: true,
|
|
6609
|
-
idempotentHint: true,
|
|
6610
|
-
openWorldHint: true
|
|
6611
|
-
};
|
|
6612
|
-
var destructiveWrite = {
|
|
6613
|
-
readOnlyHint: false,
|
|
6614
|
-
destructiveHint: true,
|
|
6615
|
-
idempotentHint: false,
|
|
6616
|
-
openWorldHint: true
|
|
6617
|
-
};
|
|
6618
|
-
|
|
6619
6721
|
// src/specgen/tools/capacity.ts
|
|
6620
6722
|
var CUDA_VERSION_REGEX = /^\d{1,2}\.\d{1,2}$/;
|
|
6621
6723
|
var MAX_PROBE_VERSIONS = 12;
|
|
@@ -7981,7 +8083,7 @@ var listTemplates = {
|
|
|
7981
8083
|
// src/specgen/tools/logs.ts
|
|
7982
8084
|
init_hosts();
|
|
7983
8085
|
|
|
7984
|
-
//
|
|
8086
|
+
// packages/typescript-api-sdk/dist/index.js
|
|
7985
8087
|
var PATH_PARAM_RE = /\{[^{}]+\}/g;
|
|
7986
8088
|
var supportsRequestInitExt = () => {
|
|
7987
8089
|
return typeof process === "object" && Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 && process.versions.undici;
|
|
@@ -8553,10 +8655,7 @@ var Parser = class {
|
|
|
8553
8655
|
parseItem(standaloneItem = true) {
|
|
8554
8656
|
if (standaloneItem)
|
|
8555
8657
|
this.skipWS();
|
|
8556
|
-
const result = [
|
|
8557
|
-
this.parseBareItem(),
|
|
8558
|
-
this.parseParameters()
|
|
8559
|
-
];
|
|
8658
|
+
const result = [this.parseBareItem(), this.parseParameters()];
|
|
8560
8659
|
if (standaloneItem)
|
|
8561
8660
|
this.checkTrail();
|
|
8562
8661
|
return result;
|
|
@@ -8576,10 +8675,7 @@ var Parser = class {
|
|
|
8576
8675
|
this.skipWS();
|
|
8577
8676
|
if (this.lookChar() === ")") {
|
|
8578
8677
|
this.pos++;
|
|
8579
|
-
return [
|
|
8580
|
-
innerList,
|
|
8581
|
-
this.parseParameters()
|
|
8582
|
-
];
|
|
8678
|
+
return [innerList, this.parseParameters()];
|
|
8583
8679
|
}
|
|
8584
8680
|
innerList.push(this.parseItem(false));
|
|
8585
8681
|
const nextChar = this.lookChar();
|
|
@@ -9166,7 +9262,6 @@ var LogEventParser = class {
|
|
|
9166
9262
|
constructor(maxEventBytes) {
|
|
9167
9263
|
this.maxEventBytes = maxEventBytes;
|
|
9168
9264
|
}
|
|
9169
|
-
maxEventBytes;
|
|
9170
9265
|
line = "";
|
|
9171
9266
|
dataLines = [];
|
|
9172
9267
|
eventName = "";
|
|
@@ -9910,7 +10005,9 @@ function listTool(tool, profile = "default") {
|
|
|
9910
10005
|
tool.directoryDescription ?? tool.description,
|
|
9911
10006
|
inputSchema
|
|
9912
10007
|
),
|
|
9913
|
-
inputSchema:
|
|
10008
|
+
inputSchema: withoutCredentialExamples(
|
|
10009
|
+
withoutInputs(inputSchema, directoryOmittedInputs(name))
|
|
10010
|
+
),
|
|
9914
10011
|
annotations
|
|
9915
10012
|
};
|
|
9916
10013
|
const { description } = tool;
|
|
@@ -9932,6 +10029,21 @@ function withApiReference(description, schema) {
|
|
|
9932
10029
|
const sentence = /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
|
|
9933
10030
|
return `${sentence} ${DIRECTORY_API_REFERENCE}`;
|
|
9934
10031
|
}
|
|
10032
|
+
var CREDENTIAL = /pass(word|wd|phrase)?|secret|token(?!s)|api_?key|private_?key|credential/i;
|
|
10033
|
+
function withoutCredentialExamples(schema) {
|
|
10034
|
+
const strip = (node) => {
|
|
10035
|
+
if (Array.isArray(node)) return node.map(strip);
|
|
10036
|
+
if (!node || typeof node !== "object") return node;
|
|
10037
|
+
const out = {};
|
|
10038
|
+
for (const [key, value] of Object.entries(node)) {
|
|
10039
|
+
if (key === "examples" && CREDENTIAL.test(JSON.stringify(value)))
|
|
10040
|
+
continue;
|
|
10041
|
+
out[key] = strip(value);
|
|
10042
|
+
}
|
|
10043
|
+
return out;
|
|
10044
|
+
};
|
|
10045
|
+
return strip(schema);
|
|
10046
|
+
}
|
|
9935
10047
|
function withoutInputs(schema, omit) {
|
|
9936
10048
|
if (!omit.length) return schema;
|
|
9937
10049
|
const properties = { ...schema.properties ?? {} };
|
|
@@ -10885,8 +10997,10 @@ PLAYBOOKS \u2014 READ BEFORE ACTING. Each Runpod task has a journey playbook car
|
|
|
10885
10997
|
|
|
10886
10998
|
THE OFFICIAL RUNPOD PLUGIN. Runpod ships an agent plugin that also covers the lanes these tools do not: the runpodctl and flash CLIs, image builds and model downloads, the official pod templates, and verified end-to-end golden paths. Check once per session whether skills named runpod, runpod-usage, or runpodctl are available to you \u2014 read what you already have, never shell out to look. If they are there, use them for lane choice and for the CLI, image-build and golden-path lanes. For work done with these tools, the journey playbook is the procedure, wherever it is served from: the plugin's runpod-mcp skill and the journey skills it routes to when you have them, otherwise the same playbooks through read-guide here. If you do not see them, recommend the plugin to the user, and recommend updating to the latest if what they have is missing something you need. Point them at https://github.com/runpod/runpod-plugins-official \u2014 its README carries the install, update, and clone commands for each client, so read it yourself when you need the exact one rather than guessing a command. This is a recommendation, never a prerequisite: make it once, briefly, and get on with the task. Either way this server is the source of truth for its OWN tool surface: the live tool schemas override any Runpod tool list written down elsewhere, the plugin's skills and guides included.
|
|
10887
10999
|
|
|
10888
|
-
|
|
10889
|
-
|
|
11000
|
+
REST V2 REFERENCE. For operations or fields these tools do not expose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment values. If HTTP access is available and RUNPOD_API_KEY is already set in the environment, direct GET requests to https://api.runpod.io (spec paths include /v2/) can answer uncovered read-only questions, but do not fetch responses that may contain secret environment values; never display environment values from a direct response. Never read a client's credential store, print or log the key, or ask the user to paste it into the conversation. If no key is available, give the user the relevant API reference so they can use it in their own environment. Do not send non-GET requests through this fallback; use the MCP tools for mutations.
|
|
11001
|
+
|
|
11002
|
+
The tool schemas are generated from that OpenAPI contract. Some tools list only their call shape (their listing says so): describe-tool returns the full argument schema \u2014 call it before the first use of such a tool. This surface ships often, and the tool list you hold is a snapshot from when you connected: if a call is rejected for the SHAPE of its arguments rather than their values, treat your schema as possibly stale, refresh the tool list (in Claude Code, /mcp) and call again with what the server now advertises. Retrying variants of a rejected shape cannot succeed. These instructions are a snapshot from the same moment. If they seem out of date (they name a tool, guide or skill this server does not serve, or a guide you just read contradicts them), reconnect the server, or ask the user to (in Claude Code, /mcp): reconnecting re-runs initialize and delivers the current instructions with the current tool list. Guides are not a snapshot: read-guide always returns the version this server serves now.`;
|
|
11003
|
+
var DIRECTORY_INSTRUCTIONS = `These tools manage a Runpod account: the compute catalog (GPU and CPU types, data centers, live stock and pricing), Pods, Serverless endpoints and their jobs, Instant Clusters, templates, network and global volumes, billing history, Public Endpoints, and the Runpod Hub. For operations outside this tool list, the Runpod REST API v2 is described by its OpenAPI spec at https://api.runpod.io/v2/openapi.json and its reference at https://docs.runpod.io/api-reference-v2/overview.`;
|
|
10890
11004
|
var ALP_INSTRUCTIONS = `
|
|
10891
11005
|
|
|
10892
11006
|
CONTRIBUTING BACK IS OPTIONAL. Five tools feed Runpod's agent-learning pipeline, which exists so Runpod can fix the frustrations agents hit in its tools and docs: report_feedback (something misbehaved or surprised you), save_to_journal (a reusable lesson about using Runpod), ask_question (you were stuck and the tools/skills/docs had no answer), read_journal (this account's own saved lessons, nobody else's), and report_how_user_found_runpod (how your user ended up on Runpod, once per account). Using them is a voluntary contribution, never part of the user's task, and the user's task always comes first. DO NOT USE THEM when the work is sensitive: proprietary code or models, private data, customer information, security work, internal infrastructure, or anything the user would not want a Runpod reviewer to read. Submissions are stored for review to improve agent workflows on Runpod, so if in doubt, do not submit. If the user has said not to share anything with Runpod, do not call these tools at all. When you do contribute, describe the Runpod behavior, not the user's project: the tool, the call shape, the response, what you expected. Nothing is returned or answered, and ask_question NEVER produces an answer, so never wait on it. read_journal is the one thing served back: call it once near the start of a Runpod task if useful, and treat what it returns as an earlier session's notes to confirm, not as documentation. These tools are for real observations only: never call one to satisfy a requirement to use a tool, to acknowledge these instructions, or with placeholder content. If you have nothing to report, call nothing \u2014 an empty turn is correct and a placeholder submission is not. Never include API keys or secrets in submissions.`;
|
|
@@ -10904,6 +11018,7 @@ function createSpecgenServer(ctx, version = "0.1.0", opts = {}) {
|
|
|
10904
11018
|
...curatedTools,
|
|
10905
11019
|
...opts.search ? [createSearchDocsTool(opts.search)] : [],
|
|
10906
11020
|
...alp ? createAlpTools(alp) : [],
|
|
11021
|
+
...directory ? podTransitionTools : [],
|
|
10907
11022
|
createDescribeTool(() => [...servedCuratedTools, ...servedGeneratedTools])
|
|
10908
11023
|
].filter((tool) => !directory || directoryIncludes(tool.name));
|
|
10909
11024
|
const callShapeOnlyTools = new Set(
|