@vm0/runner 3.12.2 → 3.13.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/index.js +569 -478
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -429,6 +429,26 @@ function isProcessRunning(pid) {
|
|
|
429
429
|
return false;
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
|
+
async function gracefulKillProcess(pid, timeoutMs = 5e3) {
|
|
433
|
+
if (!isProcessRunning(pid)) return true;
|
|
434
|
+
try {
|
|
435
|
+
process.kill(pid, "SIGTERM");
|
|
436
|
+
} catch {
|
|
437
|
+
return !isProcessRunning(pid);
|
|
438
|
+
}
|
|
439
|
+
const startTime = Date.now();
|
|
440
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
441
|
+
if (!isProcessRunning(pid)) return true;
|
|
442
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
443
|
+
}
|
|
444
|
+
if (isProcessRunning(pid)) {
|
|
445
|
+
try {
|
|
446
|
+
process.kill(pid, "SIGKILL");
|
|
447
|
+
} catch {
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return !isProcessRunning(pid);
|
|
451
|
+
}
|
|
432
452
|
function killProcessTree(pid) {
|
|
433
453
|
try {
|
|
434
454
|
const childPidsStr = execSync(`pgrep -P ${pid} 2>/dev/null || true`, {
|
|
@@ -7896,10 +7916,109 @@ var secretsByNameContract = c11.router({
|
|
|
7896
7916
|
}
|
|
7897
7917
|
});
|
|
7898
7918
|
|
|
7899
|
-
// ../../packages/core/src/contracts/
|
|
7919
|
+
// ../../packages/core/src/contracts/variables.ts
|
|
7900
7920
|
import { z as z19 } from "zod";
|
|
7901
7921
|
var c12 = initContract();
|
|
7902
|
-
var
|
|
7922
|
+
var variableNameSchema = z19.string().min(1, "Variable name is required").max(255, "Variable name must be at most 255 characters").regex(
|
|
7923
|
+
/^[A-Z][A-Z0-9_]*$/,
|
|
7924
|
+
"Variable name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_VAR)"
|
|
7925
|
+
);
|
|
7926
|
+
var variableResponseSchema = z19.object({
|
|
7927
|
+
id: z19.string().uuid(),
|
|
7928
|
+
name: z19.string(),
|
|
7929
|
+
value: z19.string(),
|
|
7930
|
+
description: z19.string().nullable(),
|
|
7931
|
+
createdAt: z19.string(),
|
|
7932
|
+
updatedAt: z19.string()
|
|
7933
|
+
});
|
|
7934
|
+
var variableListResponseSchema = z19.object({
|
|
7935
|
+
variables: z19.array(variableResponseSchema)
|
|
7936
|
+
});
|
|
7937
|
+
var setVariableRequestSchema = z19.object({
|
|
7938
|
+
name: variableNameSchema,
|
|
7939
|
+
value: z19.string().min(1, "Variable value is required"),
|
|
7940
|
+
description: z19.string().max(1e3).optional()
|
|
7941
|
+
});
|
|
7942
|
+
var variablesMainContract = c12.router({
|
|
7943
|
+
/**
|
|
7944
|
+
* GET /api/variables
|
|
7945
|
+
* List all variables for the current user's scope (includes values)
|
|
7946
|
+
*/
|
|
7947
|
+
list: {
|
|
7948
|
+
method: "GET",
|
|
7949
|
+
path: "/api/variables",
|
|
7950
|
+
headers: authHeadersSchema,
|
|
7951
|
+
responses: {
|
|
7952
|
+
200: variableListResponseSchema,
|
|
7953
|
+
401: apiErrorSchema,
|
|
7954
|
+
500: apiErrorSchema
|
|
7955
|
+
},
|
|
7956
|
+
summary: "List all variables (includes values)"
|
|
7957
|
+
},
|
|
7958
|
+
/**
|
|
7959
|
+
* PUT /api/variables
|
|
7960
|
+
* Create or update a variable
|
|
7961
|
+
*/
|
|
7962
|
+
set: {
|
|
7963
|
+
method: "PUT",
|
|
7964
|
+
path: "/api/variables",
|
|
7965
|
+
headers: authHeadersSchema,
|
|
7966
|
+
body: setVariableRequestSchema,
|
|
7967
|
+
responses: {
|
|
7968
|
+
200: variableResponseSchema,
|
|
7969
|
+
201: variableResponseSchema,
|
|
7970
|
+
400: apiErrorSchema,
|
|
7971
|
+
401: apiErrorSchema,
|
|
7972
|
+
500: apiErrorSchema
|
|
7973
|
+
},
|
|
7974
|
+
summary: "Create or update a variable"
|
|
7975
|
+
}
|
|
7976
|
+
});
|
|
7977
|
+
var variablesByNameContract = c12.router({
|
|
7978
|
+
/**
|
|
7979
|
+
* GET /api/variables/:name
|
|
7980
|
+
* Get a variable by name (includes value)
|
|
7981
|
+
*/
|
|
7982
|
+
get: {
|
|
7983
|
+
method: "GET",
|
|
7984
|
+
path: "/api/variables/:name",
|
|
7985
|
+
headers: authHeadersSchema,
|
|
7986
|
+
pathParams: z19.object({
|
|
7987
|
+
name: variableNameSchema
|
|
7988
|
+
}),
|
|
7989
|
+
responses: {
|
|
7990
|
+
200: variableResponseSchema,
|
|
7991
|
+
401: apiErrorSchema,
|
|
7992
|
+
404: apiErrorSchema,
|
|
7993
|
+
500: apiErrorSchema
|
|
7994
|
+
},
|
|
7995
|
+
summary: "Get variable by name"
|
|
7996
|
+
},
|
|
7997
|
+
/**
|
|
7998
|
+
* DELETE /api/variables/:name
|
|
7999
|
+
* Delete a variable by name
|
|
8000
|
+
*/
|
|
8001
|
+
delete: {
|
|
8002
|
+
method: "DELETE",
|
|
8003
|
+
path: "/api/variables/:name",
|
|
8004
|
+
headers: authHeadersSchema,
|
|
8005
|
+
pathParams: z19.object({
|
|
8006
|
+
name: variableNameSchema
|
|
8007
|
+
}),
|
|
8008
|
+
responses: {
|
|
8009
|
+
204: c12.noBody(),
|
|
8010
|
+
401: apiErrorSchema,
|
|
8011
|
+
404: apiErrorSchema,
|
|
8012
|
+
500: apiErrorSchema
|
|
8013
|
+
},
|
|
8014
|
+
summary: "Delete a variable"
|
|
8015
|
+
}
|
|
8016
|
+
});
|
|
8017
|
+
|
|
8018
|
+
// ../../packages/core/src/contracts/model-providers.ts
|
|
8019
|
+
import { z as z20 } from "zod";
|
|
8020
|
+
var c13 = initContract();
|
|
8021
|
+
var modelProviderTypeSchema = z20.enum([
|
|
7903
8022
|
"claude-code-oauth-token",
|
|
7904
8023
|
"anthropic-api-key",
|
|
7905
8024
|
"openrouter-api-key",
|
|
@@ -7910,46 +8029,46 @@ var modelProviderTypeSchema = z19.enum([
|
|
|
7910
8029
|
"azure-foundry",
|
|
7911
8030
|
"aws-bedrock"
|
|
7912
8031
|
]);
|
|
7913
|
-
var modelProviderFrameworkSchema =
|
|
7914
|
-
var modelProviderResponseSchema =
|
|
7915
|
-
id:
|
|
8032
|
+
var modelProviderFrameworkSchema = z20.enum(["claude-code", "codex"]);
|
|
8033
|
+
var modelProviderResponseSchema = z20.object({
|
|
8034
|
+
id: z20.string().uuid(),
|
|
7916
8035
|
type: modelProviderTypeSchema,
|
|
7917
8036
|
framework: modelProviderFrameworkSchema,
|
|
7918
|
-
credentialName:
|
|
8037
|
+
credentialName: z20.string().nullable(),
|
|
7919
8038
|
// Legacy single-credential (deprecated for multi-auth)
|
|
7920
|
-
authMethod:
|
|
8039
|
+
authMethod: z20.string().nullable(),
|
|
7921
8040
|
// For multi-auth providers
|
|
7922
|
-
credentialNames:
|
|
8041
|
+
credentialNames: z20.array(z20.string()).nullable(),
|
|
7923
8042
|
// For multi-auth providers
|
|
7924
|
-
isDefault:
|
|
7925
|
-
selectedModel:
|
|
7926
|
-
createdAt:
|
|
7927
|
-
updatedAt:
|
|
8043
|
+
isDefault: z20.boolean(),
|
|
8044
|
+
selectedModel: z20.string().nullable(),
|
|
8045
|
+
createdAt: z20.string(),
|
|
8046
|
+
updatedAt: z20.string()
|
|
7928
8047
|
});
|
|
7929
|
-
var modelProviderListResponseSchema =
|
|
7930
|
-
modelProviders:
|
|
8048
|
+
var modelProviderListResponseSchema = z20.object({
|
|
8049
|
+
modelProviders: z20.array(modelProviderResponseSchema)
|
|
7931
8050
|
});
|
|
7932
|
-
var upsertModelProviderRequestSchema =
|
|
8051
|
+
var upsertModelProviderRequestSchema = z20.object({
|
|
7933
8052
|
type: modelProviderTypeSchema,
|
|
7934
|
-
credential:
|
|
8053
|
+
credential: z20.string().min(1).optional(),
|
|
7935
8054
|
// Legacy single credential
|
|
7936
|
-
authMethod:
|
|
8055
|
+
authMethod: z20.string().optional(),
|
|
7937
8056
|
// For multi-auth providers
|
|
7938
|
-
credentials:
|
|
8057
|
+
credentials: z20.record(z20.string(), z20.string()).optional(),
|
|
7939
8058
|
// For multi-auth providers
|
|
7940
|
-
convert:
|
|
7941
|
-
selectedModel:
|
|
8059
|
+
convert: z20.boolean().optional(),
|
|
8060
|
+
selectedModel: z20.string().optional()
|
|
7942
8061
|
});
|
|
7943
|
-
var upsertModelProviderResponseSchema =
|
|
8062
|
+
var upsertModelProviderResponseSchema = z20.object({
|
|
7944
8063
|
provider: modelProviderResponseSchema,
|
|
7945
|
-
created:
|
|
8064
|
+
created: z20.boolean()
|
|
7946
8065
|
});
|
|
7947
|
-
var checkCredentialResponseSchema =
|
|
7948
|
-
exists:
|
|
7949
|
-
credentialName:
|
|
7950
|
-
currentType:
|
|
8066
|
+
var checkCredentialResponseSchema = z20.object({
|
|
8067
|
+
exists: z20.boolean(),
|
|
8068
|
+
credentialName: z20.string(),
|
|
8069
|
+
currentType: z20.enum(["user", "model-provider"]).optional()
|
|
7951
8070
|
});
|
|
7952
|
-
var modelProvidersMainContract =
|
|
8071
|
+
var modelProvidersMainContract = c13.router({
|
|
7953
8072
|
list: {
|
|
7954
8073
|
method: "GET",
|
|
7955
8074
|
path: "/api/model-providers",
|
|
@@ -7977,12 +8096,12 @@ var modelProvidersMainContract = c12.router({
|
|
|
7977
8096
|
summary: "Create or update a model provider"
|
|
7978
8097
|
}
|
|
7979
8098
|
});
|
|
7980
|
-
var modelProvidersCheckContract =
|
|
8099
|
+
var modelProvidersCheckContract = c13.router({
|
|
7981
8100
|
check: {
|
|
7982
8101
|
method: "GET",
|
|
7983
8102
|
path: "/api/model-providers/check/:type",
|
|
7984
8103
|
headers: authHeadersSchema,
|
|
7985
|
-
pathParams:
|
|
8104
|
+
pathParams: z20.object({
|
|
7986
8105
|
type: modelProviderTypeSchema
|
|
7987
8106
|
}),
|
|
7988
8107
|
responses: {
|
|
@@ -7993,16 +8112,16 @@ var modelProvidersCheckContract = c12.router({
|
|
|
7993
8112
|
summary: "Check if credential exists for a model provider type"
|
|
7994
8113
|
}
|
|
7995
8114
|
});
|
|
7996
|
-
var modelProvidersByTypeContract =
|
|
8115
|
+
var modelProvidersByTypeContract = c13.router({
|
|
7997
8116
|
delete: {
|
|
7998
8117
|
method: "DELETE",
|
|
7999
8118
|
path: "/api/model-providers/:type",
|
|
8000
8119
|
headers: authHeadersSchema,
|
|
8001
|
-
pathParams:
|
|
8120
|
+
pathParams: z20.object({
|
|
8002
8121
|
type: modelProviderTypeSchema
|
|
8003
8122
|
}),
|
|
8004
8123
|
responses: {
|
|
8005
|
-
204:
|
|
8124
|
+
204: c13.noBody(),
|
|
8006
8125
|
401: apiErrorSchema,
|
|
8007
8126
|
404: apiErrorSchema,
|
|
8008
8127
|
500: apiErrorSchema
|
|
@@ -8010,15 +8129,15 @@ var modelProvidersByTypeContract = c12.router({
|
|
|
8010
8129
|
summary: "Delete a model provider"
|
|
8011
8130
|
}
|
|
8012
8131
|
});
|
|
8013
|
-
var modelProvidersConvertContract =
|
|
8132
|
+
var modelProvidersConvertContract = c13.router({
|
|
8014
8133
|
convert: {
|
|
8015
8134
|
method: "POST",
|
|
8016
8135
|
path: "/api/model-providers/:type/convert",
|
|
8017
8136
|
headers: authHeadersSchema,
|
|
8018
|
-
pathParams:
|
|
8137
|
+
pathParams: z20.object({
|
|
8019
8138
|
type: modelProviderTypeSchema
|
|
8020
8139
|
}),
|
|
8021
|
-
body:
|
|
8140
|
+
body: z20.undefined(),
|
|
8022
8141
|
responses: {
|
|
8023
8142
|
200: modelProviderResponseSchema,
|
|
8024
8143
|
400: apiErrorSchema,
|
|
@@ -8029,15 +8148,15 @@ var modelProvidersConvertContract = c12.router({
|
|
|
8029
8148
|
summary: "Convert existing user credential to model provider"
|
|
8030
8149
|
}
|
|
8031
8150
|
});
|
|
8032
|
-
var modelProvidersSetDefaultContract =
|
|
8151
|
+
var modelProvidersSetDefaultContract = c13.router({
|
|
8033
8152
|
setDefault: {
|
|
8034
8153
|
method: "POST",
|
|
8035
8154
|
path: "/api/model-providers/:type/set-default",
|
|
8036
8155
|
headers: authHeadersSchema,
|
|
8037
|
-
pathParams:
|
|
8156
|
+
pathParams: z20.object({
|
|
8038
8157
|
type: modelProviderTypeSchema
|
|
8039
8158
|
}),
|
|
8040
|
-
body:
|
|
8159
|
+
body: z20.undefined(),
|
|
8041
8160
|
responses: {
|
|
8042
8161
|
200: modelProviderResponseSchema,
|
|
8043
8162
|
401: apiErrorSchema,
|
|
@@ -8047,15 +8166,15 @@ var modelProvidersSetDefaultContract = c12.router({
|
|
|
8047
8166
|
summary: "Set a model provider as default for its framework"
|
|
8048
8167
|
}
|
|
8049
8168
|
});
|
|
8050
|
-
var updateModelRequestSchema =
|
|
8051
|
-
selectedModel:
|
|
8169
|
+
var updateModelRequestSchema = z20.object({
|
|
8170
|
+
selectedModel: z20.string().optional()
|
|
8052
8171
|
});
|
|
8053
|
-
var modelProvidersUpdateModelContract =
|
|
8172
|
+
var modelProvidersUpdateModelContract = c13.router({
|
|
8054
8173
|
updateModel: {
|
|
8055
8174
|
method: "PATCH",
|
|
8056
8175
|
path: "/api/model-providers/:type/model",
|
|
8057
8176
|
headers: authHeadersSchema,
|
|
8058
|
-
pathParams:
|
|
8177
|
+
pathParams: z20.object({
|
|
8059
8178
|
type: modelProviderTypeSchema
|
|
8060
8179
|
}),
|
|
8061
8180
|
body: updateModelRequestSchema,
|
|
@@ -8070,42 +8189,42 @@ var modelProvidersUpdateModelContract = c12.router({
|
|
|
8070
8189
|
});
|
|
8071
8190
|
|
|
8072
8191
|
// ../../packages/core/src/contracts/sessions.ts
|
|
8073
|
-
import { z as
|
|
8074
|
-
var
|
|
8075
|
-
var sessionResponseSchema =
|
|
8076
|
-
id:
|
|
8077
|
-
agentComposeId:
|
|
8078
|
-
agentComposeVersionId:
|
|
8079
|
-
conversationId:
|
|
8080
|
-
artifactName:
|
|
8081
|
-
vars:
|
|
8082
|
-
secretNames:
|
|
8083
|
-
volumeVersions:
|
|
8084
|
-
createdAt:
|
|
8085
|
-
updatedAt:
|
|
8192
|
+
import { z as z21 } from "zod";
|
|
8193
|
+
var c14 = initContract();
|
|
8194
|
+
var sessionResponseSchema = z21.object({
|
|
8195
|
+
id: z21.string(),
|
|
8196
|
+
agentComposeId: z21.string(),
|
|
8197
|
+
agentComposeVersionId: z21.string().nullable(),
|
|
8198
|
+
conversationId: z21.string().nullable(),
|
|
8199
|
+
artifactName: z21.string().nullable(),
|
|
8200
|
+
vars: z21.record(z21.string(), z21.string()).nullable(),
|
|
8201
|
+
secretNames: z21.array(z21.string()).nullable(),
|
|
8202
|
+
volumeVersions: z21.record(z21.string(), z21.string()).nullable(),
|
|
8203
|
+
createdAt: z21.string(),
|
|
8204
|
+
updatedAt: z21.string()
|
|
8086
8205
|
});
|
|
8087
|
-
var agentComposeSnapshotSchema =
|
|
8088
|
-
agentComposeVersionId:
|
|
8089
|
-
vars:
|
|
8090
|
-
secretNames:
|
|
8206
|
+
var agentComposeSnapshotSchema = z21.object({
|
|
8207
|
+
agentComposeVersionId: z21.string(),
|
|
8208
|
+
vars: z21.record(z21.string(), z21.string()).optional(),
|
|
8209
|
+
secretNames: z21.array(z21.string()).optional()
|
|
8091
8210
|
});
|
|
8092
|
-
var artifactSnapshotSchema2 =
|
|
8093
|
-
artifactName:
|
|
8094
|
-
artifactVersion:
|
|
8211
|
+
var artifactSnapshotSchema2 = z21.object({
|
|
8212
|
+
artifactName: z21.string(),
|
|
8213
|
+
artifactVersion: z21.string()
|
|
8095
8214
|
});
|
|
8096
|
-
var volumeVersionsSnapshotSchema2 =
|
|
8097
|
-
versions:
|
|
8215
|
+
var volumeVersionsSnapshotSchema2 = z21.object({
|
|
8216
|
+
versions: z21.record(z21.string(), z21.string())
|
|
8098
8217
|
});
|
|
8099
|
-
var checkpointResponseSchema =
|
|
8100
|
-
id:
|
|
8101
|
-
runId:
|
|
8102
|
-
conversationId:
|
|
8218
|
+
var checkpointResponseSchema = z21.object({
|
|
8219
|
+
id: z21.string(),
|
|
8220
|
+
runId: z21.string(),
|
|
8221
|
+
conversationId: z21.string(),
|
|
8103
8222
|
agentComposeSnapshot: agentComposeSnapshotSchema,
|
|
8104
8223
|
artifactSnapshot: artifactSnapshotSchema2.nullable(),
|
|
8105
8224
|
volumeVersionsSnapshot: volumeVersionsSnapshotSchema2.nullable(),
|
|
8106
|
-
createdAt:
|
|
8225
|
+
createdAt: z21.string()
|
|
8107
8226
|
});
|
|
8108
|
-
var sessionsByIdContract =
|
|
8227
|
+
var sessionsByIdContract = c14.router({
|
|
8109
8228
|
/**
|
|
8110
8229
|
* GET /api/agent/sessions/:id
|
|
8111
8230
|
* Get session by ID
|
|
@@ -8114,8 +8233,8 @@ var sessionsByIdContract = c13.router({
|
|
|
8114
8233
|
method: "GET",
|
|
8115
8234
|
path: "/api/agent/sessions/:id",
|
|
8116
8235
|
headers: authHeadersSchema,
|
|
8117
|
-
pathParams:
|
|
8118
|
-
id:
|
|
8236
|
+
pathParams: z21.object({
|
|
8237
|
+
id: z21.string().min(1, "Session ID is required")
|
|
8119
8238
|
}),
|
|
8120
8239
|
responses: {
|
|
8121
8240
|
200: sessionResponseSchema,
|
|
@@ -8126,7 +8245,7 @@ var sessionsByIdContract = c13.router({
|
|
|
8126
8245
|
summary: "Get session by ID"
|
|
8127
8246
|
}
|
|
8128
8247
|
});
|
|
8129
|
-
var checkpointsByIdContract =
|
|
8248
|
+
var checkpointsByIdContract = c14.router({
|
|
8130
8249
|
/**
|
|
8131
8250
|
* GET /api/agent/checkpoints/:id
|
|
8132
8251
|
* Get checkpoint by ID
|
|
@@ -8135,8 +8254,8 @@ var checkpointsByIdContract = c13.router({
|
|
|
8135
8254
|
method: "GET",
|
|
8136
8255
|
path: "/api/agent/checkpoints/:id",
|
|
8137
8256
|
headers: authHeadersSchema,
|
|
8138
|
-
pathParams:
|
|
8139
|
-
id:
|
|
8257
|
+
pathParams: z21.object({
|
|
8258
|
+
id: z21.string().min(1, "Checkpoint ID is required")
|
|
8140
8259
|
}),
|
|
8141
8260
|
responses: {
|
|
8142
8261
|
200: checkpointResponseSchema,
|
|
@@ -8149,93 +8268,93 @@ var checkpointsByIdContract = c13.router({
|
|
|
8149
8268
|
});
|
|
8150
8269
|
|
|
8151
8270
|
// ../../packages/core/src/contracts/schedules.ts
|
|
8152
|
-
import { z as
|
|
8153
|
-
var
|
|
8154
|
-
var scheduleTriggerSchema =
|
|
8155
|
-
cron:
|
|
8156
|
-
at:
|
|
8157
|
-
timezone:
|
|
8271
|
+
import { z as z22 } from "zod";
|
|
8272
|
+
var c15 = initContract();
|
|
8273
|
+
var scheduleTriggerSchema = z22.object({
|
|
8274
|
+
cron: z22.string().optional(),
|
|
8275
|
+
at: z22.string().optional(),
|
|
8276
|
+
timezone: z22.string().default("UTC")
|
|
8158
8277
|
}).refine((data) => data.cron && !data.at || !data.cron && data.at, {
|
|
8159
8278
|
message: "Exactly one of 'cron' or 'at' must be specified"
|
|
8160
8279
|
});
|
|
8161
|
-
var scheduleRunConfigSchema =
|
|
8162
|
-
agent:
|
|
8163
|
-
prompt:
|
|
8164
|
-
vars:
|
|
8165
|
-
secrets:
|
|
8166
|
-
artifactName:
|
|
8167
|
-
artifactVersion:
|
|
8168
|
-
volumeVersions:
|
|
8280
|
+
var scheduleRunConfigSchema = z22.object({
|
|
8281
|
+
agent: z22.string().min(1, "Agent reference required"),
|
|
8282
|
+
prompt: z22.string().min(1, "Prompt required"),
|
|
8283
|
+
vars: z22.record(z22.string(), z22.string()).optional(),
|
|
8284
|
+
secrets: z22.record(z22.string(), z22.string()).optional(),
|
|
8285
|
+
artifactName: z22.string().optional(),
|
|
8286
|
+
artifactVersion: z22.string().optional(),
|
|
8287
|
+
volumeVersions: z22.record(z22.string(), z22.string()).optional()
|
|
8169
8288
|
});
|
|
8170
|
-
var scheduleDefinitionSchema =
|
|
8289
|
+
var scheduleDefinitionSchema = z22.object({
|
|
8171
8290
|
on: scheduleTriggerSchema,
|
|
8172
8291
|
run: scheduleRunConfigSchema
|
|
8173
8292
|
});
|
|
8174
|
-
var scheduleYamlSchema =
|
|
8175
|
-
version:
|
|
8176
|
-
schedules:
|
|
8177
|
-
});
|
|
8178
|
-
var deployScheduleRequestSchema =
|
|
8179
|
-
name:
|
|
8180
|
-
cronExpression:
|
|
8181
|
-
atTime:
|
|
8182
|
-
timezone:
|
|
8183
|
-
prompt:
|
|
8184
|
-
vars:
|
|
8185
|
-
secrets:
|
|
8186
|
-
artifactName:
|
|
8187
|
-
artifactVersion:
|
|
8188
|
-
volumeVersions:
|
|
8293
|
+
var scheduleYamlSchema = z22.object({
|
|
8294
|
+
version: z22.literal("1.0"),
|
|
8295
|
+
schedules: z22.record(z22.string(), scheduleDefinitionSchema)
|
|
8296
|
+
});
|
|
8297
|
+
var deployScheduleRequestSchema = z22.object({
|
|
8298
|
+
name: z22.string().min(1).max(64, "Schedule name max 64 chars"),
|
|
8299
|
+
cronExpression: z22.string().optional(),
|
|
8300
|
+
atTime: z22.string().optional(),
|
|
8301
|
+
timezone: z22.string().default("UTC"),
|
|
8302
|
+
prompt: z22.string().min(1, "Prompt required"),
|
|
8303
|
+
vars: z22.record(z22.string(), z22.string()).optional(),
|
|
8304
|
+
secrets: z22.record(z22.string(), z22.string()).optional(),
|
|
8305
|
+
artifactName: z22.string().optional(),
|
|
8306
|
+
artifactVersion: z22.string().optional(),
|
|
8307
|
+
volumeVersions: z22.record(z22.string(), z22.string()).optional(),
|
|
8189
8308
|
// Resolved agent compose ID (CLI resolves scope/name:version → composeId)
|
|
8190
|
-
composeId:
|
|
8309
|
+
composeId: z22.string().uuid("Invalid compose ID")
|
|
8191
8310
|
}).refine(
|
|
8192
8311
|
(data) => data.cronExpression && !data.atTime || !data.cronExpression && data.atTime,
|
|
8193
8312
|
{
|
|
8194
8313
|
message: "Exactly one of 'cronExpression' or 'atTime' must be specified"
|
|
8195
8314
|
}
|
|
8196
8315
|
);
|
|
8197
|
-
var scheduleResponseSchema =
|
|
8198
|
-
id:
|
|
8199
|
-
composeId:
|
|
8200
|
-
composeName:
|
|
8201
|
-
scopeSlug:
|
|
8202
|
-
name:
|
|
8203
|
-
cronExpression:
|
|
8204
|
-
atTime:
|
|
8205
|
-
timezone:
|
|
8206
|
-
prompt:
|
|
8207
|
-
vars:
|
|
8316
|
+
var scheduleResponseSchema = z22.object({
|
|
8317
|
+
id: z22.string().uuid(),
|
|
8318
|
+
composeId: z22.string().uuid(),
|
|
8319
|
+
composeName: z22.string(),
|
|
8320
|
+
scopeSlug: z22.string(),
|
|
8321
|
+
name: z22.string(),
|
|
8322
|
+
cronExpression: z22.string().nullable(),
|
|
8323
|
+
atTime: z22.string().nullable(),
|
|
8324
|
+
timezone: z22.string(),
|
|
8325
|
+
prompt: z22.string(),
|
|
8326
|
+
vars: z22.record(z22.string(), z22.string()).nullable(),
|
|
8208
8327
|
// Secret names only (values are never returned)
|
|
8209
|
-
secretNames:
|
|
8210
|
-
artifactName:
|
|
8211
|
-
artifactVersion:
|
|
8212
|
-
volumeVersions:
|
|
8213
|
-
enabled:
|
|
8214
|
-
nextRunAt:
|
|
8215
|
-
lastRunAt:
|
|
8216
|
-
retryStartedAt:
|
|
8217
|
-
createdAt:
|
|
8218
|
-
updatedAt:
|
|
8219
|
-
});
|
|
8220
|
-
var runSummarySchema =
|
|
8221
|
-
id:
|
|
8222
|
-
status:
|
|
8223
|
-
createdAt:
|
|
8224
|
-
completedAt:
|
|
8225
|
-
error:
|
|
8226
|
-
});
|
|
8227
|
-
var scheduleRunsResponseSchema =
|
|
8228
|
-
runs:
|
|
8229
|
-
});
|
|
8230
|
-
var scheduleListResponseSchema =
|
|
8231
|
-
schedules:
|
|
8232
|
-
});
|
|
8233
|
-
var deployScheduleResponseSchema =
|
|
8328
|
+
secretNames: z22.array(z22.string()).nullable(),
|
|
8329
|
+
artifactName: z22.string().nullable(),
|
|
8330
|
+
artifactVersion: z22.string().nullable(),
|
|
8331
|
+
volumeVersions: z22.record(z22.string(), z22.string()).nullable(),
|
|
8332
|
+
enabled: z22.boolean(),
|
|
8333
|
+
nextRunAt: z22.string().nullable(),
|
|
8334
|
+
lastRunAt: z22.string().nullable(),
|
|
8335
|
+
retryStartedAt: z22.string().nullable(),
|
|
8336
|
+
createdAt: z22.string(),
|
|
8337
|
+
updatedAt: z22.string()
|
|
8338
|
+
});
|
|
8339
|
+
var runSummarySchema = z22.object({
|
|
8340
|
+
id: z22.string().uuid(),
|
|
8341
|
+
status: z22.enum(["pending", "running", "completed", "failed", "timeout"]),
|
|
8342
|
+
createdAt: z22.string(),
|
|
8343
|
+
completedAt: z22.string().nullable(),
|
|
8344
|
+
error: z22.string().nullable()
|
|
8345
|
+
});
|
|
8346
|
+
var scheduleRunsResponseSchema = z22.object({
|
|
8347
|
+
runs: z22.array(runSummarySchema)
|
|
8348
|
+
});
|
|
8349
|
+
var scheduleListResponseSchema = z22.object({
|
|
8350
|
+
schedules: z22.array(scheduleResponseSchema)
|
|
8351
|
+
});
|
|
8352
|
+
var deployScheduleResponseSchema = z22.object({
|
|
8234
8353
|
schedule: scheduleResponseSchema,
|
|
8235
|
-
created:
|
|
8354
|
+
created: z22.boolean()
|
|
8236
8355
|
// true if created, false if updated
|
|
8237
8356
|
});
|
|
8238
|
-
var schedulesMainContract =
|
|
8357
|
+
var schedulesMainContract = c15.router({
|
|
8239
8358
|
/**
|
|
8240
8359
|
* POST /api/agent/schedules
|
|
8241
8360
|
* Deploy (create or update) a schedule
|
|
@@ -8273,7 +8392,7 @@ var schedulesMainContract = c14.router({
|
|
|
8273
8392
|
summary: "List all schedules"
|
|
8274
8393
|
}
|
|
8275
8394
|
});
|
|
8276
|
-
var schedulesByNameContract =
|
|
8395
|
+
var schedulesByNameContract = c15.router({
|
|
8277
8396
|
/**
|
|
8278
8397
|
* GET /api/agent/schedules/:name
|
|
8279
8398
|
* Get schedule by name
|
|
@@ -8282,11 +8401,11 @@ var schedulesByNameContract = c14.router({
|
|
|
8282
8401
|
method: "GET",
|
|
8283
8402
|
path: "/api/agent/schedules/:name",
|
|
8284
8403
|
headers: authHeadersSchema,
|
|
8285
|
-
pathParams:
|
|
8286
|
-
name:
|
|
8404
|
+
pathParams: z22.object({
|
|
8405
|
+
name: z22.string().min(1, "Schedule name required")
|
|
8287
8406
|
}),
|
|
8288
|
-
query:
|
|
8289
|
-
composeId:
|
|
8407
|
+
query: z22.object({
|
|
8408
|
+
composeId: z22.string().uuid("Compose ID required")
|
|
8290
8409
|
}),
|
|
8291
8410
|
responses: {
|
|
8292
8411
|
200: scheduleResponseSchema,
|
|
@@ -8303,21 +8422,21 @@ var schedulesByNameContract = c14.router({
|
|
|
8303
8422
|
method: "DELETE",
|
|
8304
8423
|
path: "/api/agent/schedules/:name",
|
|
8305
8424
|
headers: authHeadersSchema,
|
|
8306
|
-
pathParams:
|
|
8307
|
-
name:
|
|
8425
|
+
pathParams: z22.object({
|
|
8426
|
+
name: z22.string().min(1, "Schedule name required")
|
|
8308
8427
|
}),
|
|
8309
|
-
query:
|
|
8310
|
-
composeId:
|
|
8428
|
+
query: z22.object({
|
|
8429
|
+
composeId: z22.string().uuid("Compose ID required")
|
|
8311
8430
|
}),
|
|
8312
8431
|
responses: {
|
|
8313
|
-
204:
|
|
8432
|
+
204: c15.noBody(),
|
|
8314
8433
|
401: apiErrorSchema,
|
|
8315
8434
|
404: apiErrorSchema
|
|
8316
8435
|
},
|
|
8317
8436
|
summary: "Delete schedule"
|
|
8318
8437
|
}
|
|
8319
8438
|
});
|
|
8320
|
-
var schedulesEnableContract =
|
|
8439
|
+
var schedulesEnableContract = c15.router({
|
|
8321
8440
|
/**
|
|
8322
8441
|
* POST /api/agent/schedules/:name/enable
|
|
8323
8442
|
* Enable a disabled schedule
|
|
@@ -8326,11 +8445,11 @@ var schedulesEnableContract = c14.router({
|
|
|
8326
8445
|
method: "POST",
|
|
8327
8446
|
path: "/api/agent/schedules/:name/enable",
|
|
8328
8447
|
headers: authHeadersSchema,
|
|
8329
|
-
pathParams:
|
|
8330
|
-
name:
|
|
8448
|
+
pathParams: z22.object({
|
|
8449
|
+
name: z22.string().min(1, "Schedule name required")
|
|
8331
8450
|
}),
|
|
8332
|
-
body:
|
|
8333
|
-
composeId:
|
|
8451
|
+
body: z22.object({
|
|
8452
|
+
composeId: z22.string().uuid("Compose ID required")
|
|
8334
8453
|
}),
|
|
8335
8454
|
responses: {
|
|
8336
8455
|
200: scheduleResponseSchema,
|
|
@@ -8347,11 +8466,11 @@ var schedulesEnableContract = c14.router({
|
|
|
8347
8466
|
method: "POST",
|
|
8348
8467
|
path: "/api/agent/schedules/:name/disable",
|
|
8349
8468
|
headers: authHeadersSchema,
|
|
8350
|
-
pathParams:
|
|
8351
|
-
name:
|
|
8469
|
+
pathParams: z22.object({
|
|
8470
|
+
name: z22.string().min(1, "Schedule name required")
|
|
8352
8471
|
}),
|
|
8353
|
-
body:
|
|
8354
|
-
composeId:
|
|
8472
|
+
body: z22.object({
|
|
8473
|
+
composeId: z22.string().uuid("Compose ID required")
|
|
8355
8474
|
}),
|
|
8356
8475
|
responses: {
|
|
8357
8476
|
200: scheduleResponseSchema,
|
|
@@ -8361,7 +8480,7 @@ var schedulesEnableContract = c14.router({
|
|
|
8361
8480
|
summary: "Disable schedule"
|
|
8362
8481
|
}
|
|
8363
8482
|
});
|
|
8364
|
-
var scheduleRunsContract =
|
|
8483
|
+
var scheduleRunsContract = c15.router({
|
|
8365
8484
|
/**
|
|
8366
8485
|
* GET /api/agent/schedules/:name/runs
|
|
8367
8486
|
* List recent runs for a schedule
|
|
@@ -8370,12 +8489,12 @@ var scheduleRunsContract = c14.router({
|
|
|
8370
8489
|
method: "GET",
|
|
8371
8490
|
path: "/api/agent/schedules/:name/runs",
|
|
8372
8491
|
headers: authHeadersSchema,
|
|
8373
|
-
pathParams:
|
|
8374
|
-
name:
|
|
8492
|
+
pathParams: z22.object({
|
|
8493
|
+
name: z22.string().min(1, "Schedule name required")
|
|
8375
8494
|
}),
|
|
8376
|
-
query:
|
|
8377
|
-
composeId:
|
|
8378
|
-
limit:
|
|
8495
|
+
query: z22.object({
|
|
8496
|
+
composeId: z22.string().uuid("Compose ID required"),
|
|
8497
|
+
limit: z22.coerce.number().min(0).max(100).default(5)
|
|
8379
8498
|
}),
|
|
8380
8499
|
responses: {
|
|
8381
8500
|
200: scheduleRunsResponseSchema,
|
|
@@ -8387,18 +8506,18 @@ var scheduleRunsContract = c14.router({
|
|
|
8387
8506
|
});
|
|
8388
8507
|
|
|
8389
8508
|
// ../../packages/core/src/contracts/realtime.ts
|
|
8390
|
-
import { z as
|
|
8391
|
-
var
|
|
8392
|
-
var ablyTokenRequestSchema =
|
|
8393
|
-
keyName:
|
|
8394
|
-
ttl:
|
|
8395
|
-
timestamp:
|
|
8396
|
-
capability:
|
|
8397
|
-
clientId:
|
|
8398
|
-
nonce:
|
|
8399
|
-
mac:
|
|
8509
|
+
import { z as z23 } from "zod";
|
|
8510
|
+
var c16 = initContract();
|
|
8511
|
+
var ablyTokenRequestSchema = z23.object({
|
|
8512
|
+
keyName: z23.string(),
|
|
8513
|
+
ttl: z23.number().optional(),
|
|
8514
|
+
timestamp: z23.number(),
|
|
8515
|
+
capability: z23.string(),
|
|
8516
|
+
clientId: z23.string().optional(),
|
|
8517
|
+
nonce: z23.string(),
|
|
8518
|
+
mac: z23.string()
|
|
8400
8519
|
});
|
|
8401
|
-
var realtimeTokenContract =
|
|
8520
|
+
var realtimeTokenContract = c16.router({
|
|
8402
8521
|
/**
|
|
8403
8522
|
* POST /api/realtime/token
|
|
8404
8523
|
* Get an Ably token to subscribe to a run's events channel
|
|
@@ -8407,8 +8526,8 @@ var realtimeTokenContract = c15.router({
|
|
|
8407
8526
|
method: "POST",
|
|
8408
8527
|
path: "/api/realtime/token",
|
|
8409
8528
|
headers: authHeadersSchema,
|
|
8410
|
-
body:
|
|
8411
|
-
runId:
|
|
8529
|
+
body: z23.object({
|
|
8530
|
+
runId: z23.string().uuid("runId must be a valid UUID")
|
|
8412
8531
|
}),
|
|
8413
8532
|
responses: {
|
|
8414
8533
|
200: ablyTokenRequestSchema,
|
|
@@ -8420,7 +8539,7 @@ var realtimeTokenContract = c15.router({
|
|
|
8420
8539
|
summary: "Get Ably token for run event subscription"
|
|
8421
8540
|
}
|
|
8422
8541
|
});
|
|
8423
|
-
var runnerRealtimeTokenContract =
|
|
8542
|
+
var runnerRealtimeTokenContract = c16.router({
|
|
8424
8543
|
/**
|
|
8425
8544
|
* POST /api/runners/realtime/token
|
|
8426
8545
|
* Get an Ably token to subscribe to a runner group's job notification channel
|
|
@@ -8429,7 +8548,7 @@ var runnerRealtimeTokenContract = c15.router({
|
|
|
8429
8548
|
method: "POST",
|
|
8430
8549
|
path: "/api/runners/realtime/token",
|
|
8431
8550
|
headers: authHeadersSchema,
|
|
8432
|
-
body:
|
|
8551
|
+
body: z23.object({
|
|
8433
8552
|
group: runnerGroupSchema
|
|
8434
8553
|
}),
|
|
8435
8554
|
responses: {
|
|
@@ -8443,11 +8562,11 @@ var runnerRealtimeTokenContract = c15.router({
|
|
|
8443
8562
|
});
|
|
8444
8563
|
|
|
8445
8564
|
// ../../packages/core/src/contracts/platform.ts
|
|
8446
|
-
import { z as
|
|
8565
|
+
import { z as z25 } from "zod";
|
|
8447
8566
|
|
|
8448
8567
|
// ../../packages/core/src/contracts/public/common.ts
|
|
8449
|
-
import { z as
|
|
8450
|
-
var publicApiErrorTypeSchema =
|
|
8568
|
+
import { z as z24 } from "zod";
|
|
8569
|
+
var publicApiErrorTypeSchema = z24.enum([
|
|
8451
8570
|
"api_error",
|
|
8452
8571
|
// Internal server error (5xx)
|
|
8453
8572
|
"invalid_request_error",
|
|
@@ -8461,40 +8580,40 @@ var publicApiErrorTypeSchema = z23.enum([
|
|
|
8461
8580
|
"rate_limit_error"
|
|
8462
8581
|
// Rate limit exceeded (429)
|
|
8463
8582
|
]);
|
|
8464
|
-
var publicApiErrorSchema =
|
|
8465
|
-
error:
|
|
8583
|
+
var publicApiErrorSchema = z24.object({
|
|
8584
|
+
error: z24.object({
|
|
8466
8585
|
type: publicApiErrorTypeSchema,
|
|
8467
|
-
code:
|
|
8468
|
-
message:
|
|
8469
|
-
param:
|
|
8470
|
-
docUrl:
|
|
8586
|
+
code: z24.string(),
|
|
8587
|
+
message: z24.string(),
|
|
8588
|
+
param: z24.string().optional(),
|
|
8589
|
+
docUrl: z24.string().url().optional()
|
|
8471
8590
|
})
|
|
8472
8591
|
});
|
|
8473
|
-
var paginationSchema =
|
|
8474
|
-
hasMore:
|
|
8475
|
-
nextCursor:
|
|
8592
|
+
var paginationSchema = z24.object({
|
|
8593
|
+
hasMore: z24.boolean(),
|
|
8594
|
+
nextCursor: z24.string().nullable()
|
|
8476
8595
|
});
|
|
8477
8596
|
function createPaginatedResponseSchema(dataSchema) {
|
|
8478
|
-
return
|
|
8479
|
-
data:
|
|
8597
|
+
return z24.object({
|
|
8598
|
+
data: z24.array(dataSchema),
|
|
8480
8599
|
pagination: paginationSchema
|
|
8481
8600
|
});
|
|
8482
8601
|
}
|
|
8483
|
-
var listQuerySchema =
|
|
8484
|
-
cursor:
|
|
8485
|
-
limit:
|
|
8602
|
+
var listQuerySchema = z24.object({
|
|
8603
|
+
cursor: z24.string().optional(),
|
|
8604
|
+
limit: z24.coerce.number().min(1).max(100).default(20)
|
|
8486
8605
|
});
|
|
8487
|
-
var requestIdSchema =
|
|
8488
|
-
var timestampSchema =
|
|
8606
|
+
var requestIdSchema = z24.string().uuid();
|
|
8607
|
+
var timestampSchema = z24.string().datetime();
|
|
8489
8608
|
|
|
8490
8609
|
// ../../packages/core/src/contracts/platform.ts
|
|
8491
|
-
var
|
|
8492
|
-
var platformPaginationSchema =
|
|
8493
|
-
hasMore:
|
|
8494
|
-
nextCursor:
|
|
8495
|
-
totalPages:
|
|
8610
|
+
var c17 = initContract();
|
|
8611
|
+
var platformPaginationSchema = z25.object({
|
|
8612
|
+
hasMore: z25.boolean(),
|
|
8613
|
+
nextCursor: z25.string().nullable(),
|
|
8614
|
+
totalPages: z25.number()
|
|
8496
8615
|
});
|
|
8497
|
-
var platformLogStatusSchema =
|
|
8616
|
+
var platformLogStatusSchema = z25.enum([
|
|
8498
8617
|
"pending",
|
|
8499
8618
|
"running",
|
|
8500
8619
|
"completed",
|
|
@@ -8502,41 +8621,41 @@ var platformLogStatusSchema = z24.enum([
|
|
|
8502
8621
|
"timeout",
|
|
8503
8622
|
"cancelled"
|
|
8504
8623
|
]);
|
|
8505
|
-
var platformLogEntrySchema =
|
|
8506
|
-
id:
|
|
8507
|
-
sessionId:
|
|
8508
|
-
agentName:
|
|
8509
|
-
framework:
|
|
8624
|
+
var platformLogEntrySchema = z25.object({
|
|
8625
|
+
id: z25.string().uuid(),
|
|
8626
|
+
sessionId: z25.string().nullable(),
|
|
8627
|
+
agentName: z25.string(),
|
|
8628
|
+
framework: z25.string().nullable(),
|
|
8510
8629
|
status: platformLogStatusSchema,
|
|
8511
|
-
createdAt:
|
|
8630
|
+
createdAt: z25.string()
|
|
8512
8631
|
});
|
|
8513
|
-
var platformLogsListResponseSchema =
|
|
8514
|
-
data:
|
|
8632
|
+
var platformLogsListResponseSchema = z25.object({
|
|
8633
|
+
data: z25.array(platformLogEntrySchema),
|
|
8515
8634
|
pagination: platformPaginationSchema
|
|
8516
8635
|
});
|
|
8517
|
-
var artifactSchema =
|
|
8518
|
-
name:
|
|
8519
|
-
version:
|
|
8636
|
+
var artifactSchema = z25.object({
|
|
8637
|
+
name: z25.string().nullable(),
|
|
8638
|
+
version: z25.string().nullable()
|
|
8520
8639
|
});
|
|
8521
|
-
var platformLogDetailSchema =
|
|
8522
|
-
id:
|
|
8523
|
-
sessionId:
|
|
8524
|
-
agentName:
|
|
8525
|
-
framework:
|
|
8640
|
+
var platformLogDetailSchema = z25.object({
|
|
8641
|
+
id: z25.string().uuid(),
|
|
8642
|
+
sessionId: z25.string().nullable(),
|
|
8643
|
+
agentName: z25.string(),
|
|
8644
|
+
framework: z25.string().nullable(),
|
|
8526
8645
|
status: platformLogStatusSchema,
|
|
8527
|
-
prompt:
|
|
8528
|
-
error:
|
|
8529
|
-
createdAt:
|
|
8530
|
-
startedAt:
|
|
8531
|
-
completedAt:
|
|
8646
|
+
prompt: z25.string(),
|
|
8647
|
+
error: z25.string().nullable(),
|
|
8648
|
+
createdAt: z25.string(),
|
|
8649
|
+
startedAt: z25.string().nullable(),
|
|
8650
|
+
completedAt: z25.string().nullable(),
|
|
8532
8651
|
artifact: artifactSchema
|
|
8533
8652
|
});
|
|
8534
|
-
var platformLogsListContract =
|
|
8653
|
+
var platformLogsListContract = c17.router({
|
|
8535
8654
|
list: {
|
|
8536
8655
|
method: "GET",
|
|
8537
8656
|
path: "/api/platform/logs",
|
|
8538
8657
|
query: listQuerySchema.extend({
|
|
8539
|
-
search:
|
|
8658
|
+
search: z25.string().optional()
|
|
8540
8659
|
}),
|
|
8541
8660
|
responses: {
|
|
8542
8661
|
200: platformLogsListResponseSchema,
|
|
@@ -8545,12 +8664,12 @@ var platformLogsListContract = c16.router({
|
|
|
8545
8664
|
summary: "List agent run logs with pagination"
|
|
8546
8665
|
}
|
|
8547
8666
|
});
|
|
8548
|
-
var platformLogsByIdContract =
|
|
8667
|
+
var platformLogsByIdContract = c17.router({
|
|
8549
8668
|
getById: {
|
|
8550
8669
|
method: "GET",
|
|
8551
8670
|
path: "/api/platform/logs/:id",
|
|
8552
|
-
pathParams:
|
|
8553
|
-
id:
|
|
8671
|
+
pathParams: z25.object({
|
|
8672
|
+
id: z25.string().uuid("Invalid log ID")
|
|
8554
8673
|
}),
|
|
8555
8674
|
responses: {
|
|
8556
8675
|
200: platformLogDetailSchema,
|
|
@@ -8560,17 +8679,17 @@ var platformLogsByIdContract = c16.router({
|
|
|
8560
8679
|
summary: "Get agent run log details by ID"
|
|
8561
8680
|
}
|
|
8562
8681
|
});
|
|
8563
|
-
var artifactDownloadResponseSchema =
|
|
8564
|
-
url:
|
|
8565
|
-
expiresAt:
|
|
8682
|
+
var artifactDownloadResponseSchema = z25.object({
|
|
8683
|
+
url: z25.string().url(),
|
|
8684
|
+
expiresAt: z25.string()
|
|
8566
8685
|
});
|
|
8567
|
-
var platformArtifactDownloadContract =
|
|
8686
|
+
var platformArtifactDownloadContract = c17.router({
|
|
8568
8687
|
getDownloadUrl: {
|
|
8569
8688
|
method: "GET",
|
|
8570
8689
|
path: "/api/platform/artifacts/download",
|
|
8571
|
-
query:
|
|
8572
|
-
name:
|
|
8573
|
-
version:
|
|
8690
|
+
query: z25.object({
|
|
8691
|
+
name: z25.string().min(1, "Artifact name is required"),
|
|
8692
|
+
version: z25.string().optional()
|
|
8574
8693
|
}),
|
|
8575
8694
|
responses: {
|
|
8576
8695
|
200: artifactDownloadResponseSchema,
|
|
@@ -8582,29 +8701,29 @@ var platformArtifactDownloadContract = c16.router({
|
|
|
8582
8701
|
});
|
|
8583
8702
|
|
|
8584
8703
|
// ../../packages/core/src/contracts/llm.ts
|
|
8585
|
-
import { z as
|
|
8586
|
-
var
|
|
8587
|
-
var messageRoleSchema =
|
|
8588
|
-
var chatMessageSchema =
|
|
8704
|
+
import { z as z26 } from "zod";
|
|
8705
|
+
var c18 = initContract();
|
|
8706
|
+
var messageRoleSchema = z26.enum(["user", "assistant", "system"]);
|
|
8707
|
+
var chatMessageSchema = z26.object({
|
|
8589
8708
|
role: messageRoleSchema,
|
|
8590
|
-
content:
|
|
8709
|
+
content: z26.string()
|
|
8591
8710
|
});
|
|
8592
|
-
var tokenUsageSchema =
|
|
8593
|
-
promptTokens:
|
|
8594
|
-
completionTokens:
|
|
8595
|
-
totalTokens:
|
|
8711
|
+
var tokenUsageSchema = z26.object({
|
|
8712
|
+
promptTokens: z26.number(),
|
|
8713
|
+
completionTokens: z26.number(),
|
|
8714
|
+
totalTokens: z26.number()
|
|
8596
8715
|
});
|
|
8597
|
-
var llmChatRequestSchema =
|
|
8598
|
-
model:
|
|
8599
|
-
messages:
|
|
8600
|
-
stream:
|
|
8716
|
+
var llmChatRequestSchema = z26.object({
|
|
8717
|
+
model: z26.string().min(1).optional(),
|
|
8718
|
+
messages: z26.array(chatMessageSchema).min(1, "At least one message is required"),
|
|
8719
|
+
stream: z26.boolean().optional().default(false)
|
|
8601
8720
|
});
|
|
8602
|
-
var llmChatResponseSchema =
|
|
8603
|
-
content:
|
|
8604
|
-
model:
|
|
8721
|
+
var llmChatResponseSchema = z26.object({
|
|
8722
|
+
content: z26.string(),
|
|
8723
|
+
model: z26.string(),
|
|
8605
8724
|
usage: tokenUsageSchema
|
|
8606
8725
|
});
|
|
8607
|
-
var llmChatContract =
|
|
8726
|
+
var llmChatContract = c18.router({
|
|
8608
8727
|
chat: {
|
|
8609
8728
|
method: "POST",
|
|
8610
8729
|
path: "/api/llm/chat",
|
|
@@ -8620,28 +8739,28 @@ var llmChatContract = c17.router({
|
|
|
8620
8739
|
});
|
|
8621
8740
|
|
|
8622
8741
|
// ../../packages/core/src/contracts/public/agents.ts
|
|
8623
|
-
import { z as
|
|
8624
|
-
var
|
|
8625
|
-
var publicAgentSchema =
|
|
8626
|
-
id:
|
|
8627
|
-
name:
|
|
8628
|
-
currentVersionId:
|
|
8742
|
+
import { z as z27 } from "zod";
|
|
8743
|
+
var c19 = initContract();
|
|
8744
|
+
var publicAgentSchema = z27.object({
|
|
8745
|
+
id: z27.string(),
|
|
8746
|
+
name: z27.string(),
|
|
8747
|
+
currentVersionId: z27.string().nullable(),
|
|
8629
8748
|
createdAt: timestampSchema,
|
|
8630
8749
|
updatedAt: timestampSchema
|
|
8631
8750
|
});
|
|
8632
|
-
var agentVersionSchema =
|
|
8633
|
-
id:
|
|
8634
|
-
agentId:
|
|
8635
|
-
versionNumber:
|
|
8751
|
+
var agentVersionSchema = z27.object({
|
|
8752
|
+
id: z27.string(),
|
|
8753
|
+
agentId: z27.string(),
|
|
8754
|
+
versionNumber: z27.number(),
|
|
8636
8755
|
createdAt: timestampSchema
|
|
8637
8756
|
});
|
|
8638
8757
|
var publicAgentDetailSchema = publicAgentSchema;
|
|
8639
8758
|
var paginatedAgentsSchema = createPaginatedResponseSchema(publicAgentSchema);
|
|
8640
8759
|
var paginatedAgentVersionsSchema = createPaginatedResponseSchema(agentVersionSchema);
|
|
8641
8760
|
var agentListQuerySchema = listQuerySchema.extend({
|
|
8642
|
-
name:
|
|
8761
|
+
name: z27.string().optional()
|
|
8643
8762
|
});
|
|
8644
|
-
var publicAgentsListContract =
|
|
8763
|
+
var publicAgentsListContract = c19.router({
|
|
8645
8764
|
list: {
|
|
8646
8765
|
method: "GET",
|
|
8647
8766
|
path: "/v1/agents",
|
|
@@ -8656,13 +8775,13 @@ var publicAgentsListContract = c18.router({
|
|
|
8656
8775
|
description: "List all agents in the current scope with pagination. Use the `name` query parameter to filter by agent name."
|
|
8657
8776
|
}
|
|
8658
8777
|
});
|
|
8659
|
-
var publicAgentByIdContract =
|
|
8778
|
+
var publicAgentByIdContract = c19.router({
|
|
8660
8779
|
get: {
|
|
8661
8780
|
method: "GET",
|
|
8662
8781
|
path: "/v1/agents/:id",
|
|
8663
8782
|
headers: authHeadersSchema,
|
|
8664
|
-
pathParams:
|
|
8665
|
-
id:
|
|
8783
|
+
pathParams: z27.object({
|
|
8784
|
+
id: z27.string().min(1, "Agent ID is required")
|
|
8666
8785
|
}),
|
|
8667
8786
|
responses: {
|
|
8668
8787
|
200: publicAgentDetailSchema,
|
|
@@ -8674,13 +8793,13 @@ var publicAgentByIdContract = c18.router({
|
|
|
8674
8793
|
description: "Get agent details by ID"
|
|
8675
8794
|
}
|
|
8676
8795
|
});
|
|
8677
|
-
var publicAgentVersionsContract =
|
|
8796
|
+
var publicAgentVersionsContract = c19.router({
|
|
8678
8797
|
list: {
|
|
8679
8798
|
method: "GET",
|
|
8680
8799
|
path: "/v1/agents/:id/versions",
|
|
8681
8800
|
headers: authHeadersSchema,
|
|
8682
|
-
pathParams:
|
|
8683
|
-
id:
|
|
8801
|
+
pathParams: z27.object({
|
|
8802
|
+
id: z27.string().min(1, "Agent ID is required")
|
|
8684
8803
|
}),
|
|
8685
8804
|
query: listQuerySchema,
|
|
8686
8805
|
responses: {
|
|
@@ -8695,9 +8814,9 @@ var publicAgentVersionsContract = c18.router({
|
|
|
8695
8814
|
});
|
|
8696
8815
|
|
|
8697
8816
|
// ../../packages/core/src/contracts/public/runs.ts
|
|
8698
|
-
import { z as
|
|
8699
|
-
var
|
|
8700
|
-
var publicRunStatusSchema =
|
|
8817
|
+
import { z as z28 } from "zod";
|
|
8818
|
+
var c20 = initContract();
|
|
8819
|
+
var publicRunStatusSchema = z28.enum([
|
|
8701
8820
|
"pending",
|
|
8702
8821
|
"running",
|
|
8703
8822
|
"completed",
|
|
@@ -8705,54 +8824,54 @@ var publicRunStatusSchema = z27.enum([
|
|
|
8705
8824
|
"timeout",
|
|
8706
8825
|
"cancelled"
|
|
8707
8826
|
]);
|
|
8708
|
-
var publicRunSchema =
|
|
8709
|
-
id:
|
|
8710
|
-
agentId:
|
|
8711
|
-
agentName:
|
|
8827
|
+
var publicRunSchema = z28.object({
|
|
8828
|
+
id: z28.string(),
|
|
8829
|
+
agentId: z28.string(),
|
|
8830
|
+
agentName: z28.string(),
|
|
8712
8831
|
status: publicRunStatusSchema,
|
|
8713
|
-
prompt:
|
|
8832
|
+
prompt: z28.string(),
|
|
8714
8833
|
createdAt: timestampSchema,
|
|
8715
8834
|
startedAt: timestampSchema.nullable(),
|
|
8716
8835
|
completedAt: timestampSchema.nullable()
|
|
8717
8836
|
});
|
|
8718
8837
|
var publicRunDetailSchema = publicRunSchema.extend({
|
|
8719
|
-
error:
|
|
8720
|
-
executionTimeMs:
|
|
8721
|
-
checkpointId:
|
|
8722
|
-
sessionId:
|
|
8723
|
-
artifactName:
|
|
8724
|
-
artifactVersion:
|
|
8725
|
-
volumes:
|
|
8838
|
+
error: z28.string().nullable(),
|
|
8839
|
+
executionTimeMs: z28.number().nullable(),
|
|
8840
|
+
checkpointId: z28.string().nullable(),
|
|
8841
|
+
sessionId: z28.string().nullable(),
|
|
8842
|
+
artifactName: z28.string().nullable(),
|
|
8843
|
+
artifactVersion: z28.string().nullable(),
|
|
8844
|
+
volumes: z28.record(z28.string(), z28.string()).optional()
|
|
8726
8845
|
});
|
|
8727
8846
|
var paginatedRunsSchema = createPaginatedResponseSchema(publicRunSchema);
|
|
8728
|
-
var createRunRequestSchema =
|
|
8847
|
+
var createRunRequestSchema = z28.object({
|
|
8729
8848
|
// Agent identification (one of: agent, agentId, sessionId, checkpointId)
|
|
8730
|
-
agent:
|
|
8849
|
+
agent: z28.string().optional(),
|
|
8731
8850
|
// Agent name
|
|
8732
|
-
agentId:
|
|
8851
|
+
agentId: z28.string().optional(),
|
|
8733
8852
|
// Agent ID
|
|
8734
|
-
agentVersion:
|
|
8853
|
+
agentVersion: z28.string().optional(),
|
|
8735
8854
|
// Version specifier (e.g., "latest", "v1", specific ID)
|
|
8736
8855
|
// Continue session
|
|
8737
|
-
sessionId:
|
|
8856
|
+
sessionId: z28.string().optional(),
|
|
8738
8857
|
// Resume from checkpoint
|
|
8739
|
-
checkpointId:
|
|
8858
|
+
checkpointId: z28.string().optional(),
|
|
8740
8859
|
// Required
|
|
8741
|
-
prompt:
|
|
8860
|
+
prompt: z28.string().min(1, "Prompt is required"),
|
|
8742
8861
|
// Optional configuration
|
|
8743
|
-
variables:
|
|
8744
|
-
secrets:
|
|
8745
|
-
artifactName:
|
|
8862
|
+
variables: z28.record(z28.string(), z28.string()).optional(),
|
|
8863
|
+
secrets: z28.record(z28.string(), z28.string()).optional(),
|
|
8864
|
+
artifactName: z28.string().optional(),
|
|
8746
8865
|
// Artifact name to mount
|
|
8747
|
-
artifactVersion:
|
|
8866
|
+
artifactVersion: z28.string().optional(),
|
|
8748
8867
|
// Artifact version (defaults to latest)
|
|
8749
|
-
volumes:
|
|
8868
|
+
volumes: z28.record(z28.string(), z28.string()).optional()
|
|
8750
8869
|
// volume_name -> version
|
|
8751
8870
|
});
|
|
8752
8871
|
var runListQuerySchema = listQuerySchema.extend({
|
|
8753
8872
|
status: publicRunStatusSchema.optional()
|
|
8754
8873
|
});
|
|
8755
|
-
var publicRunsListContract =
|
|
8874
|
+
var publicRunsListContract = c20.router({
|
|
8756
8875
|
list: {
|
|
8757
8876
|
method: "GET",
|
|
8758
8877
|
path: "/v1/runs",
|
|
@@ -8784,13 +8903,13 @@ var publicRunsListContract = c19.router({
|
|
|
8784
8903
|
description: "Create and execute a new agent run. Returns 202 Accepted as runs execute asynchronously."
|
|
8785
8904
|
}
|
|
8786
8905
|
});
|
|
8787
|
-
var publicRunByIdContract =
|
|
8906
|
+
var publicRunByIdContract = c20.router({
|
|
8788
8907
|
get: {
|
|
8789
8908
|
method: "GET",
|
|
8790
8909
|
path: "/v1/runs/:id",
|
|
8791
8910
|
headers: authHeadersSchema,
|
|
8792
|
-
pathParams:
|
|
8793
|
-
id:
|
|
8911
|
+
pathParams: z28.object({
|
|
8912
|
+
id: z28.string().min(1, "Run ID is required")
|
|
8794
8913
|
}),
|
|
8795
8914
|
responses: {
|
|
8796
8915
|
200: publicRunDetailSchema,
|
|
@@ -8802,15 +8921,15 @@ var publicRunByIdContract = c19.router({
|
|
|
8802
8921
|
description: "Get run details by ID"
|
|
8803
8922
|
}
|
|
8804
8923
|
});
|
|
8805
|
-
var publicRunCancelContract =
|
|
8924
|
+
var publicRunCancelContract = c20.router({
|
|
8806
8925
|
cancel: {
|
|
8807
8926
|
method: "POST",
|
|
8808
8927
|
path: "/v1/runs/:id/cancel",
|
|
8809
8928
|
headers: authHeadersSchema,
|
|
8810
|
-
pathParams:
|
|
8811
|
-
id:
|
|
8929
|
+
pathParams: z28.object({
|
|
8930
|
+
id: z28.string().min(1, "Run ID is required")
|
|
8812
8931
|
}),
|
|
8813
|
-
body:
|
|
8932
|
+
body: z28.undefined(),
|
|
8814
8933
|
responses: {
|
|
8815
8934
|
200: publicRunDetailSchema,
|
|
8816
8935
|
400: publicApiErrorSchema,
|
|
@@ -8823,27 +8942,27 @@ var publicRunCancelContract = c19.router({
|
|
|
8823
8942
|
description: "Cancel a pending or running execution"
|
|
8824
8943
|
}
|
|
8825
8944
|
});
|
|
8826
|
-
var logEntrySchema =
|
|
8945
|
+
var logEntrySchema = z28.object({
|
|
8827
8946
|
timestamp: timestampSchema,
|
|
8828
|
-
type:
|
|
8829
|
-
level:
|
|
8830
|
-
message:
|
|
8831
|
-
metadata:
|
|
8947
|
+
type: z28.enum(["agent", "system", "network"]),
|
|
8948
|
+
level: z28.enum(["debug", "info", "warn", "error"]),
|
|
8949
|
+
message: z28.string(),
|
|
8950
|
+
metadata: z28.record(z28.string(), z28.unknown()).optional()
|
|
8832
8951
|
});
|
|
8833
8952
|
var paginatedLogsSchema = createPaginatedResponseSchema(logEntrySchema);
|
|
8834
8953
|
var logsQuerySchema = listQuerySchema.extend({
|
|
8835
|
-
type:
|
|
8954
|
+
type: z28.enum(["agent", "system", "network", "all"]).default("all"),
|
|
8836
8955
|
since: timestampSchema.optional(),
|
|
8837
8956
|
until: timestampSchema.optional(),
|
|
8838
|
-
order:
|
|
8957
|
+
order: z28.enum(["asc", "desc"]).default("asc")
|
|
8839
8958
|
});
|
|
8840
|
-
var publicRunLogsContract =
|
|
8959
|
+
var publicRunLogsContract = c20.router({
|
|
8841
8960
|
getLogs: {
|
|
8842
8961
|
method: "GET",
|
|
8843
8962
|
path: "/v1/runs/:id/logs",
|
|
8844
8963
|
headers: authHeadersSchema,
|
|
8845
|
-
pathParams:
|
|
8846
|
-
id:
|
|
8964
|
+
pathParams: z28.object({
|
|
8965
|
+
id: z28.string().min(1, "Run ID is required")
|
|
8847
8966
|
}),
|
|
8848
8967
|
query: logsQuerySchema,
|
|
8849
8968
|
responses: {
|
|
@@ -8856,30 +8975,30 @@ var publicRunLogsContract = c19.router({
|
|
|
8856
8975
|
description: "Get unified logs for a run. Combines agent, system, and network logs."
|
|
8857
8976
|
}
|
|
8858
8977
|
});
|
|
8859
|
-
var metricPointSchema =
|
|
8978
|
+
var metricPointSchema = z28.object({
|
|
8860
8979
|
timestamp: timestampSchema,
|
|
8861
|
-
cpuPercent:
|
|
8862
|
-
memoryUsedMb:
|
|
8863
|
-
memoryTotalMb:
|
|
8864
|
-
diskUsedMb:
|
|
8865
|
-
diskTotalMb:
|
|
8866
|
-
});
|
|
8867
|
-
var metricsSummarySchema =
|
|
8868
|
-
avgCpuPercent:
|
|
8869
|
-
maxMemoryUsedMb:
|
|
8870
|
-
totalDurationMs:
|
|
8871
|
-
});
|
|
8872
|
-
var metricsResponseSchema2 =
|
|
8873
|
-
data:
|
|
8980
|
+
cpuPercent: z28.number(),
|
|
8981
|
+
memoryUsedMb: z28.number(),
|
|
8982
|
+
memoryTotalMb: z28.number(),
|
|
8983
|
+
diskUsedMb: z28.number(),
|
|
8984
|
+
diskTotalMb: z28.number()
|
|
8985
|
+
});
|
|
8986
|
+
var metricsSummarySchema = z28.object({
|
|
8987
|
+
avgCpuPercent: z28.number(),
|
|
8988
|
+
maxMemoryUsedMb: z28.number(),
|
|
8989
|
+
totalDurationMs: z28.number().nullable()
|
|
8990
|
+
});
|
|
8991
|
+
var metricsResponseSchema2 = z28.object({
|
|
8992
|
+
data: z28.array(metricPointSchema),
|
|
8874
8993
|
summary: metricsSummarySchema
|
|
8875
8994
|
});
|
|
8876
|
-
var publicRunMetricsContract =
|
|
8995
|
+
var publicRunMetricsContract = c20.router({
|
|
8877
8996
|
getMetrics: {
|
|
8878
8997
|
method: "GET",
|
|
8879
8998
|
path: "/v1/runs/:id/metrics",
|
|
8880
8999
|
headers: authHeadersSchema,
|
|
8881
|
-
pathParams:
|
|
8882
|
-
id:
|
|
9000
|
+
pathParams: z28.object({
|
|
9001
|
+
id: z28.string().min(1, "Run ID is required")
|
|
8883
9002
|
}),
|
|
8884
9003
|
responses: {
|
|
8885
9004
|
200: metricsResponseSchema2,
|
|
@@ -8891,7 +9010,7 @@ var publicRunMetricsContract = c19.router({
|
|
|
8891
9010
|
description: "Get CPU, memory, and disk metrics for a run"
|
|
8892
9011
|
}
|
|
8893
9012
|
});
|
|
8894
|
-
var sseEventTypeSchema =
|
|
9013
|
+
var sseEventTypeSchema = z28.enum([
|
|
8895
9014
|
"status",
|
|
8896
9015
|
// Run status change
|
|
8897
9016
|
"output",
|
|
@@ -8903,26 +9022,26 @@ var sseEventTypeSchema = z27.enum([
|
|
|
8903
9022
|
"heartbeat"
|
|
8904
9023
|
// Keep-alive
|
|
8905
9024
|
]);
|
|
8906
|
-
var sseEventSchema =
|
|
9025
|
+
var sseEventSchema = z28.object({
|
|
8907
9026
|
event: sseEventTypeSchema,
|
|
8908
|
-
data:
|
|
8909
|
-
id:
|
|
9027
|
+
data: z28.unknown(),
|
|
9028
|
+
id: z28.string().optional()
|
|
8910
9029
|
// For Last-Event-ID reconnection
|
|
8911
9030
|
});
|
|
8912
|
-
var publicRunEventsContract =
|
|
9031
|
+
var publicRunEventsContract = c20.router({
|
|
8913
9032
|
streamEvents: {
|
|
8914
9033
|
method: "GET",
|
|
8915
9034
|
path: "/v1/runs/:id/events",
|
|
8916
9035
|
headers: authHeadersSchema,
|
|
8917
|
-
pathParams:
|
|
8918
|
-
id:
|
|
9036
|
+
pathParams: z28.object({
|
|
9037
|
+
id: z28.string().min(1, "Run ID is required")
|
|
8919
9038
|
}),
|
|
8920
|
-
query:
|
|
8921
|
-
lastEventId:
|
|
9039
|
+
query: z28.object({
|
|
9040
|
+
lastEventId: z28.string().optional()
|
|
8922
9041
|
// For reconnection
|
|
8923
9042
|
}),
|
|
8924
9043
|
responses: {
|
|
8925
|
-
200:
|
|
9044
|
+
200: z28.any(),
|
|
8926
9045
|
// SSE stream - actual content is text/event-stream
|
|
8927
9046
|
401: publicApiErrorSchema,
|
|
8928
9047
|
404: publicApiErrorSchema,
|
|
@@ -8934,28 +9053,28 @@ var publicRunEventsContract = c19.router({
|
|
|
8934
9053
|
});
|
|
8935
9054
|
|
|
8936
9055
|
// ../../packages/core/src/contracts/public/artifacts.ts
|
|
8937
|
-
import { z as
|
|
8938
|
-
var
|
|
8939
|
-
var publicArtifactSchema =
|
|
8940
|
-
id:
|
|
8941
|
-
name:
|
|
8942
|
-
currentVersionId:
|
|
8943
|
-
size:
|
|
9056
|
+
import { z as z29 } from "zod";
|
|
9057
|
+
var c21 = initContract();
|
|
9058
|
+
var publicArtifactSchema = z29.object({
|
|
9059
|
+
id: z29.string(),
|
|
9060
|
+
name: z29.string(),
|
|
9061
|
+
currentVersionId: z29.string().nullable(),
|
|
9062
|
+
size: z29.number(),
|
|
8944
9063
|
// Total size in bytes
|
|
8945
|
-
fileCount:
|
|
9064
|
+
fileCount: z29.number(),
|
|
8946
9065
|
createdAt: timestampSchema,
|
|
8947
9066
|
updatedAt: timestampSchema
|
|
8948
9067
|
});
|
|
8949
|
-
var artifactVersionSchema =
|
|
8950
|
-
id:
|
|
9068
|
+
var artifactVersionSchema = z29.object({
|
|
9069
|
+
id: z29.string(),
|
|
8951
9070
|
// SHA-256 content hash
|
|
8952
|
-
artifactId:
|
|
8953
|
-
size:
|
|
9071
|
+
artifactId: z29.string(),
|
|
9072
|
+
size: z29.number(),
|
|
8954
9073
|
// Size in bytes
|
|
8955
|
-
fileCount:
|
|
8956
|
-
message:
|
|
9074
|
+
fileCount: z29.number(),
|
|
9075
|
+
message: z29.string().nullable(),
|
|
8957
9076
|
// Optional commit message
|
|
8958
|
-
createdBy:
|
|
9077
|
+
createdBy: z29.string(),
|
|
8959
9078
|
createdAt: timestampSchema
|
|
8960
9079
|
});
|
|
8961
9080
|
var publicArtifactDetailSchema = publicArtifactSchema.extend({
|
|
@@ -8965,7 +9084,7 @@ var paginatedArtifactsSchema = createPaginatedResponseSchema(publicArtifactSchem
|
|
|
8965
9084
|
var paginatedArtifactVersionsSchema = createPaginatedResponseSchema(
|
|
8966
9085
|
artifactVersionSchema
|
|
8967
9086
|
);
|
|
8968
|
-
var publicArtifactsListContract =
|
|
9087
|
+
var publicArtifactsListContract = c21.router({
|
|
8969
9088
|
list: {
|
|
8970
9089
|
method: "GET",
|
|
8971
9090
|
path: "/v1/artifacts",
|
|
@@ -8980,13 +9099,13 @@ var publicArtifactsListContract = c20.router({
|
|
|
8980
9099
|
description: "List all artifacts in the current scope with pagination"
|
|
8981
9100
|
}
|
|
8982
9101
|
});
|
|
8983
|
-
var publicArtifactByIdContract =
|
|
9102
|
+
var publicArtifactByIdContract = c21.router({
|
|
8984
9103
|
get: {
|
|
8985
9104
|
method: "GET",
|
|
8986
9105
|
path: "/v1/artifacts/:id",
|
|
8987
9106
|
headers: authHeadersSchema,
|
|
8988
|
-
pathParams:
|
|
8989
|
-
id:
|
|
9107
|
+
pathParams: z29.object({
|
|
9108
|
+
id: z29.string().min(1, "Artifact ID is required")
|
|
8990
9109
|
}),
|
|
8991
9110
|
responses: {
|
|
8992
9111
|
200: publicArtifactDetailSchema,
|
|
@@ -8998,13 +9117,13 @@ var publicArtifactByIdContract = c20.router({
|
|
|
8998
9117
|
description: "Get artifact details by ID"
|
|
8999
9118
|
}
|
|
9000
9119
|
});
|
|
9001
|
-
var publicArtifactVersionsContract =
|
|
9120
|
+
var publicArtifactVersionsContract = c21.router({
|
|
9002
9121
|
list: {
|
|
9003
9122
|
method: "GET",
|
|
9004
9123
|
path: "/v1/artifacts/:id/versions",
|
|
9005
9124
|
headers: authHeadersSchema,
|
|
9006
|
-
pathParams:
|
|
9007
|
-
id:
|
|
9125
|
+
pathParams: z29.object({
|
|
9126
|
+
id: z29.string().min(1, "Artifact ID is required")
|
|
9008
9127
|
}),
|
|
9009
9128
|
query: listQuerySchema,
|
|
9010
9129
|
responses: {
|
|
@@ -9017,20 +9136,20 @@ var publicArtifactVersionsContract = c20.router({
|
|
|
9017
9136
|
description: "List all versions of an artifact with pagination"
|
|
9018
9137
|
}
|
|
9019
9138
|
});
|
|
9020
|
-
var publicArtifactDownloadContract =
|
|
9139
|
+
var publicArtifactDownloadContract = c21.router({
|
|
9021
9140
|
download: {
|
|
9022
9141
|
method: "GET",
|
|
9023
9142
|
path: "/v1/artifacts/:id/download",
|
|
9024
9143
|
headers: authHeadersSchema,
|
|
9025
|
-
pathParams:
|
|
9026
|
-
id:
|
|
9144
|
+
pathParams: z29.object({
|
|
9145
|
+
id: z29.string().min(1, "Artifact ID is required")
|
|
9027
9146
|
}),
|
|
9028
|
-
query:
|
|
9029
|
-
versionId:
|
|
9147
|
+
query: z29.object({
|
|
9148
|
+
versionId: z29.string().optional()
|
|
9030
9149
|
// Defaults to current version
|
|
9031
9150
|
}),
|
|
9032
9151
|
responses: {
|
|
9033
|
-
302:
|
|
9152
|
+
302: z29.undefined(),
|
|
9034
9153
|
// Redirect to presigned URL
|
|
9035
9154
|
401: publicApiErrorSchema,
|
|
9036
9155
|
404: publicApiErrorSchema,
|
|
@@ -9042,28 +9161,28 @@ var publicArtifactDownloadContract = c20.router({
|
|
|
9042
9161
|
});
|
|
9043
9162
|
|
|
9044
9163
|
// ../../packages/core/src/contracts/public/volumes.ts
|
|
9045
|
-
import { z as
|
|
9046
|
-
var
|
|
9047
|
-
var publicVolumeSchema =
|
|
9048
|
-
id:
|
|
9049
|
-
name:
|
|
9050
|
-
currentVersionId:
|
|
9051
|
-
size:
|
|
9164
|
+
import { z as z30 } from "zod";
|
|
9165
|
+
var c22 = initContract();
|
|
9166
|
+
var publicVolumeSchema = z30.object({
|
|
9167
|
+
id: z30.string(),
|
|
9168
|
+
name: z30.string(),
|
|
9169
|
+
currentVersionId: z30.string().nullable(),
|
|
9170
|
+
size: z30.number(),
|
|
9052
9171
|
// Total size in bytes
|
|
9053
|
-
fileCount:
|
|
9172
|
+
fileCount: z30.number(),
|
|
9054
9173
|
createdAt: timestampSchema,
|
|
9055
9174
|
updatedAt: timestampSchema
|
|
9056
9175
|
});
|
|
9057
|
-
var volumeVersionSchema =
|
|
9058
|
-
id:
|
|
9176
|
+
var volumeVersionSchema = z30.object({
|
|
9177
|
+
id: z30.string(),
|
|
9059
9178
|
// SHA-256 content hash
|
|
9060
|
-
volumeId:
|
|
9061
|
-
size:
|
|
9179
|
+
volumeId: z30.string(),
|
|
9180
|
+
size: z30.number(),
|
|
9062
9181
|
// Size in bytes
|
|
9063
|
-
fileCount:
|
|
9064
|
-
message:
|
|
9182
|
+
fileCount: z30.number(),
|
|
9183
|
+
message: z30.string().nullable(),
|
|
9065
9184
|
// Optional commit message
|
|
9066
|
-
createdBy:
|
|
9185
|
+
createdBy: z30.string(),
|
|
9067
9186
|
createdAt: timestampSchema
|
|
9068
9187
|
});
|
|
9069
9188
|
var publicVolumeDetailSchema = publicVolumeSchema.extend({
|
|
@@ -9071,7 +9190,7 @@ var publicVolumeDetailSchema = publicVolumeSchema.extend({
|
|
|
9071
9190
|
});
|
|
9072
9191
|
var paginatedVolumesSchema = createPaginatedResponseSchema(publicVolumeSchema);
|
|
9073
9192
|
var paginatedVolumeVersionsSchema = createPaginatedResponseSchema(volumeVersionSchema);
|
|
9074
|
-
var publicVolumesListContract =
|
|
9193
|
+
var publicVolumesListContract = c22.router({
|
|
9075
9194
|
list: {
|
|
9076
9195
|
method: "GET",
|
|
9077
9196
|
path: "/v1/volumes",
|
|
@@ -9086,13 +9205,13 @@ var publicVolumesListContract = c21.router({
|
|
|
9086
9205
|
description: "List all volumes in the current scope with pagination"
|
|
9087
9206
|
}
|
|
9088
9207
|
});
|
|
9089
|
-
var publicVolumeByIdContract =
|
|
9208
|
+
var publicVolumeByIdContract = c22.router({
|
|
9090
9209
|
get: {
|
|
9091
9210
|
method: "GET",
|
|
9092
9211
|
path: "/v1/volumes/:id",
|
|
9093
9212
|
headers: authHeadersSchema,
|
|
9094
|
-
pathParams:
|
|
9095
|
-
id:
|
|
9213
|
+
pathParams: z30.object({
|
|
9214
|
+
id: z30.string().min(1, "Volume ID is required")
|
|
9096
9215
|
}),
|
|
9097
9216
|
responses: {
|
|
9098
9217
|
200: publicVolumeDetailSchema,
|
|
@@ -9104,13 +9223,13 @@ var publicVolumeByIdContract = c21.router({
|
|
|
9104
9223
|
description: "Get volume details by ID"
|
|
9105
9224
|
}
|
|
9106
9225
|
});
|
|
9107
|
-
var publicVolumeVersionsContract =
|
|
9226
|
+
var publicVolumeVersionsContract = c22.router({
|
|
9108
9227
|
list: {
|
|
9109
9228
|
method: "GET",
|
|
9110
9229
|
path: "/v1/volumes/:id/versions",
|
|
9111
9230
|
headers: authHeadersSchema,
|
|
9112
|
-
pathParams:
|
|
9113
|
-
id:
|
|
9231
|
+
pathParams: z30.object({
|
|
9232
|
+
id: z30.string().min(1, "Volume ID is required")
|
|
9114
9233
|
}),
|
|
9115
9234
|
query: listQuerySchema,
|
|
9116
9235
|
responses: {
|
|
@@ -9123,20 +9242,20 @@ var publicVolumeVersionsContract = c21.router({
|
|
|
9123
9242
|
description: "List all versions of a volume with pagination"
|
|
9124
9243
|
}
|
|
9125
9244
|
});
|
|
9126
|
-
var publicVolumeDownloadContract =
|
|
9245
|
+
var publicVolumeDownloadContract = c22.router({
|
|
9127
9246
|
download: {
|
|
9128
9247
|
method: "GET",
|
|
9129
9248
|
path: "/v1/volumes/:id/download",
|
|
9130
9249
|
headers: authHeadersSchema,
|
|
9131
|
-
pathParams:
|
|
9132
|
-
id:
|
|
9250
|
+
pathParams: z30.object({
|
|
9251
|
+
id: z30.string().min(1, "Volume ID is required")
|
|
9133
9252
|
}),
|
|
9134
|
-
query:
|
|
9135
|
-
versionId:
|
|
9253
|
+
query: z30.object({
|
|
9254
|
+
versionId: z30.string().optional()
|
|
9136
9255
|
// Defaults to current version
|
|
9137
9256
|
}),
|
|
9138
9257
|
responses: {
|
|
9139
|
-
302:
|
|
9258
|
+
302: z30.undefined(),
|
|
9140
9259
|
// Redirect to presigned URL
|
|
9141
9260
|
401: publicApiErrorSchema,
|
|
9142
9261
|
404: publicApiErrorSchema,
|
|
@@ -9375,17 +9494,15 @@ var ProxyManager = class {
|
|
|
9375
9494
|
String(this.config.port),
|
|
9376
9495
|
"--set",
|
|
9377
9496
|
`confdir=${this.config.caDir}`,
|
|
9497
|
+
"--set",
|
|
9498
|
+
`vm0_api_url=${this.config.apiUrl}`,
|
|
9499
|
+
"--set",
|
|
9500
|
+
`vm0_registry_path=${this.config.registryPath}`,
|
|
9378
9501
|
"--scripts",
|
|
9379
9502
|
this.config.addonPath,
|
|
9380
9503
|
"--quiet"
|
|
9381
9504
|
];
|
|
9382
|
-
const env = {
|
|
9383
|
-
...process.env,
|
|
9384
|
-
VM0_API_URL: this.config.apiUrl,
|
|
9385
|
-
VM0_REGISTRY_PATH: this.config.registryPath
|
|
9386
|
-
};
|
|
9387
9505
|
this.process = spawn2("mitmdump", args, {
|
|
9388
|
-
env,
|
|
9389
9506
|
stdio: ["ignore", "pipe", "pipe"],
|
|
9390
9507
|
detached: false
|
|
9391
9508
|
});
|
|
@@ -9838,7 +9955,7 @@ async function executeJob(context, config, options = {}) {
|
|
|
9838
9955
|
logger9.log(`Guest client ready`);
|
|
9839
9956
|
if (config.firecracker.snapshot) {
|
|
9840
9957
|
const timestamp = (Date.now() / 1e3).toFixed(3);
|
|
9841
|
-
await guest.exec(`date -s "@${timestamp}"`);
|
|
9958
|
+
await guest.exec(`sudo date -s "@${timestamp}"`);
|
|
9842
9959
|
}
|
|
9843
9960
|
if (context.storageManifest) {
|
|
9844
9961
|
await withSandboxTiming(
|
|
@@ -9897,7 +10014,7 @@ async function executeJob(context, config, options = {}) {
|
|
|
9897
10014
|
const duration = Math.round(durationMs / 1e3);
|
|
9898
10015
|
if (exitCode === 137 || exitCode === 9) {
|
|
9899
10016
|
const dmesgCheck = await guest.exec(
|
|
9900
|
-
`dmesg | tail -20 | grep -iE "killed|oom" 2>/dev/null`
|
|
10017
|
+
`sudo dmesg | tail -20 | grep -iE "killed|oom" 2>/dev/null`
|
|
9901
10018
|
);
|
|
9902
10019
|
if (dmesgCheck.stdout.toLowerCase().includes("oom") || dmesgCheck.stdout.toLowerCase().includes("killed")) {
|
|
9903
10020
|
logger9.log(`OOM detected: ${dmesgCheck.stdout}`);
|
|
@@ -10031,14 +10148,6 @@ function checkNetworkPrerequisites() {
|
|
|
10031
10148
|
errors
|
|
10032
10149
|
};
|
|
10033
10150
|
}
|
|
10034
|
-
async function isPortInUse(port) {
|
|
10035
|
-
try {
|
|
10036
|
-
await execAsync3(`ss -tln | grep -q ":${port} "`);
|
|
10037
|
-
return true;
|
|
10038
|
-
} catch {
|
|
10039
|
-
return false;
|
|
10040
|
-
}
|
|
10041
|
-
}
|
|
10042
10151
|
|
|
10043
10152
|
// src/lib/runner/runner-lock.ts
|
|
10044
10153
|
import fs10 from "fs";
|
|
@@ -10448,19 +10557,24 @@ function parseFirecrackerCmdline(cmdline) {
|
|
|
10448
10557
|
}
|
|
10449
10558
|
}
|
|
10450
10559
|
if (!filePath) return null;
|
|
10451
|
-
const
|
|
10452
|
-
if (!
|
|
10453
|
-
|
|
10560
|
+
const vmIdMatch = filePath.match(/vm0-([a-f0-9]+)\//);
|
|
10561
|
+
if (!vmIdMatch?.[1]) return null;
|
|
10562
|
+
const baseDirMatch = filePath.match(/^(.+)\/workspaces\/vm0-[a-f0-9]+\//);
|
|
10563
|
+
if (!baseDirMatch?.[1]) return null;
|
|
10564
|
+
return { vmId: createVmId(vmIdMatch[1]), baseDir: baseDirMatch[1] };
|
|
10454
10565
|
}
|
|
10455
10566
|
function parseMitmproxyCmdline(cmdline) {
|
|
10456
10567
|
if (!cmdline.includes("mitmproxy") && !cmdline.includes("mitmdump")) {
|
|
10457
10568
|
return null;
|
|
10458
10569
|
}
|
|
10459
10570
|
const args = cmdline.split("\0");
|
|
10460
|
-
const
|
|
10461
|
-
|
|
10462
|
-
|
|
10463
|
-
|
|
10571
|
+
for (const arg of args) {
|
|
10572
|
+
const match = arg.match(/^vm0_registry_path=(.+)\/vm-registry\.json$/);
|
|
10573
|
+
if (match?.[1]) {
|
|
10574
|
+
return match[1];
|
|
10575
|
+
}
|
|
10576
|
+
}
|
|
10577
|
+
return null;
|
|
10464
10578
|
}
|
|
10465
10579
|
function findFirecrackerProcesses() {
|
|
10466
10580
|
const processes = [];
|
|
@@ -10478,9 +10592,9 @@ function findFirecrackerProcesses() {
|
|
|
10478
10592
|
if (!existsSync4(cmdlinePath)) continue;
|
|
10479
10593
|
try {
|
|
10480
10594
|
const cmdline = readFileSync2(cmdlinePath, "utf-8");
|
|
10481
|
-
const
|
|
10482
|
-
if (
|
|
10483
|
-
processes.push({ pid, vmId });
|
|
10595
|
+
const parsed = parseFirecrackerCmdline(cmdline);
|
|
10596
|
+
if (parsed) {
|
|
10597
|
+
processes.push({ pid, vmId: parsed.vmId, baseDir: parsed.baseDir });
|
|
10484
10598
|
}
|
|
10485
10599
|
} catch {
|
|
10486
10600
|
continue;
|
|
@@ -10493,33 +10607,14 @@ function findProcessByVmId(vmId) {
|
|
|
10493
10607
|
const vmIdStr = vmIdValue(vmId);
|
|
10494
10608
|
return processes.find((p) => vmIdValue(p.vmId) === vmIdStr) || null;
|
|
10495
10609
|
}
|
|
10496
|
-
|
|
10497
|
-
|
|
10498
|
-
try {
|
|
10499
|
-
process.kill(pid, "SIGTERM");
|
|
10500
|
-
} catch {
|
|
10501
|
-
return !isProcessRunning(pid);
|
|
10502
|
-
}
|
|
10503
|
-
const startTime = Date.now();
|
|
10504
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
10505
|
-
if (!isProcessRunning(pid)) return true;
|
|
10506
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
10507
|
-
}
|
|
10508
|
-
if (isProcessRunning(pid)) {
|
|
10509
|
-
try {
|
|
10510
|
-
process.kill(pid, "SIGKILL");
|
|
10511
|
-
} catch {
|
|
10512
|
-
}
|
|
10513
|
-
}
|
|
10514
|
-
return !isProcessRunning(pid);
|
|
10515
|
-
}
|
|
10516
|
-
function findMitmproxyProcess() {
|
|
10610
|
+
function findMitmproxyProcesses() {
|
|
10611
|
+
const processes = [];
|
|
10517
10612
|
const procDir = "/proc";
|
|
10518
10613
|
let entries;
|
|
10519
10614
|
try {
|
|
10520
10615
|
entries = readdirSync(procDir);
|
|
10521
10616
|
} catch {
|
|
10522
|
-
return
|
|
10617
|
+
return [];
|
|
10523
10618
|
}
|
|
10524
10619
|
for (const entry of entries) {
|
|
10525
10620
|
if (!/^\d+$/.test(entry)) continue;
|
|
@@ -10528,26 +10623,26 @@ function findMitmproxyProcess() {
|
|
|
10528
10623
|
if (!existsSync4(cmdlinePath)) continue;
|
|
10529
10624
|
try {
|
|
10530
10625
|
const cmdline = readFileSync2(cmdlinePath, "utf-8");
|
|
10531
|
-
const
|
|
10532
|
-
if (
|
|
10533
|
-
|
|
10626
|
+
const baseDir = parseMitmproxyCmdline(cmdline);
|
|
10627
|
+
if (baseDir) {
|
|
10628
|
+
processes.push({ pid, baseDir });
|
|
10534
10629
|
}
|
|
10535
10630
|
} catch {
|
|
10536
10631
|
continue;
|
|
10537
10632
|
}
|
|
10538
10633
|
}
|
|
10539
|
-
return
|
|
10634
|
+
return processes;
|
|
10540
10635
|
}
|
|
10541
10636
|
|
|
10542
10637
|
// src/lib/runner/types.ts
|
|
10543
|
-
import { z as
|
|
10544
|
-
var RunnerModeSchema =
|
|
10545
|
-
var RunnerStatusSchema =
|
|
10638
|
+
import { z as z31 } from "zod";
|
|
10639
|
+
var RunnerModeSchema = z31.enum(["running", "draining", "stopping", "stopped"]);
|
|
10640
|
+
var RunnerStatusSchema = z31.object({
|
|
10546
10641
|
mode: RunnerModeSchema,
|
|
10547
|
-
active_runs:
|
|
10548
|
-
active_run_ids:
|
|
10549
|
-
started_at:
|
|
10550
|
-
updated_at:
|
|
10642
|
+
active_runs: z31.number(),
|
|
10643
|
+
active_run_ids: z31.array(z31.string()),
|
|
10644
|
+
started_at: z31.string(),
|
|
10645
|
+
updated_at: z31.string()
|
|
10551
10646
|
});
|
|
10552
10647
|
|
|
10553
10648
|
// src/commands/doctor.ts
|
|
@@ -10589,20 +10684,14 @@ async function checkApiConnectivity(config, warnings) {
|
|
|
10589
10684
|
});
|
|
10590
10685
|
}
|
|
10591
10686
|
}
|
|
10592
|
-
|
|
10687
|
+
function checkNetwork(config, warnings) {
|
|
10593
10688
|
console.log("Network:");
|
|
10594
|
-
const
|
|
10595
|
-
const mitmProc =
|
|
10596
|
-
const portInUse = await isPortInUse(proxyPort);
|
|
10689
|
+
const mitmProcesses = findMitmproxyProcesses();
|
|
10690
|
+
const mitmProc = mitmProcesses.find((p) => p.baseDir === config.base_dir);
|
|
10597
10691
|
if (mitmProc) {
|
|
10598
|
-
console.log(` \u2713 Proxy mitmproxy (PID ${mitmProc.pid}) on :${proxyPort}`);
|
|
10599
|
-
} else if (portInUse) {
|
|
10600
10692
|
console.log(
|
|
10601
|
-
` \
|
|
10693
|
+
` \u2713 Proxy mitmproxy (PID ${mitmProc.pid}) on :${config.proxy.port}`
|
|
10602
10694
|
);
|
|
10603
|
-
warnings.push({
|
|
10604
|
-
message: `Port ${proxyPort} is in use but mitmproxy process not detected`
|
|
10605
|
-
});
|
|
10606
10695
|
} else {
|
|
10607
10696
|
console.log(` \u2717 Proxy mitmproxy not running`);
|
|
10608
10697
|
warnings.push({ message: "Proxy mitmproxy is not running" });
|
|
@@ -10688,7 +10777,8 @@ async function findOrphanNetworkNamespaces(warnings) {
|
|
|
10688
10777
|
return [];
|
|
10689
10778
|
}
|
|
10690
10779
|
}
|
|
10691
|
-
async function detectOrphanResources(jobs,
|
|
10780
|
+
async function detectOrphanResources(jobs, allProcesses, workspaces, statusVmIds, baseDir, warnings) {
|
|
10781
|
+
const processes = allProcesses.filter((p) => p.baseDir === baseDir);
|
|
10692
10782
|
for (const job of jobs) {
|
|
10693
10783
|
if (!job.firecrackerPid) {
|
|
10694
10784
|
warnings.push({
|
|
@@ -10750,7 +10840,7 @@ var doctorCommand = new Command2("doctor").description("Diagnose runner health,
|
|
|
10750
10840
|
console.log("");
|
|
10751
10841
|
await checkApiConnectivity(config, warnings);
|
|
10752
10842
|
console.log("");
|
|
10753
|
-
|
|
10843
|
+
checkNetwork(config, warnings);
|
|
10754
10844
|
console.log("");
|
|
10755
10845
|
const processes = findFirecrackerProcesses();
|
|
10756
10846
|
const workspaces = existsSync5(workspacesDir) ? readdirSync2(workspacesDir).filter(runnerPaths.isVmWorkspace) : [];
|
|
@@ -10762,6 +10852,7 @@ var doctorCommand = new Command2("doctor").description("Diagnose runner health,
|
|
|
10762
10852
|
processes,
|
|
10763
10853
|
workspaces,
|
|
10764
10854
|
statusVmIds,
|
|
10855
|
+
config.base_dir,
|
|
10765
10856
|
warnings
|
|
10766
10857
|
);
|
|
10767
10858
|
displayWarnings(warnings);
|
|
@@ -10809,7 +10900,7 @@ var killCommand = new Command3("kill").description("Force terminate a run and cl
|
|
|
10809
10900
|
}
|
|
10810
10901
|
const results = [];
|
|
10811
10902
|
if (proc) {
|
|
10812
|
-
const killed = await
|
|
10903
|
+
const killed = await gracefulKillProcess(proc.pid);
|
|
10813
10904
|
results.push({
|
|
10814
10905
|
step: "Firecracker process",
|
|
10815
10906
|
success: killed,
|
|
@@ -11254,7 +11345,7 @@ var snapshotCommand = new Command5("snapshot").description("Generate a Firecrack
|
|
|
11254
11345
|
);
|
|
11255
11346
|
|
|
11256
11347
|
// src/index.ts
|
|
11257
|
-
var version = true ? "3.
|
|
11348
|
+
var version = true ? "3.13.0" : "0.1.0";
|
|
11258
11349
|
program.name("vm0-runner").version(version).description("Self-hosted runner for VM0 agents");
|
|
11259
11350
|
program.addCommand(startCommand);
|
|
11260
11351
|
program.addCommand(doctorCommand);
|