@runtypelabs/cli 2.33.5 → 2.33.7
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/dist/index.js +344 -36
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -33038,7 +33038,7 @@ var GRANOLA_INTEGRATION = {
|
|
|
33038
33038
|
]
|
|
33039
33039
|
};
|
|
33040
33040
|
|
|
33041
|
-
// ../shared/dist/chunk-
|
|
33041
|
+
// ../shared/dist/chunk-ZUODFMLO.mjs
|
|
33042
33042
|
var DEFAULT_MODELS_FOR_NEW_ACCOUNTS = [
|
|
33043
33043
|
// Mixlayer models
|
|
33044
33044
|
{
|
|
@@ -33170,7 +33170,7 @@ var CONTEXT_STEP_TYPES = [
|
|
|
33170
33170
|
];
|
|
33171
33171
|
var FLOW_STEP_TYPES = ["prompt", ...CONTEXT_STEP_TYPES];
|
|
33172
33172
|
|
|
33173
|
-
// ../shared/dist/chunk-
|
|
33173
|
+
// ../shared/dist/chunk-ENAGUPHC.mjs
|
|
33174
33174
|
function getNestedValue(obj, path20) {
|
|
33175
33175
|
let normalizedPath = path20;
|
|
33176
33176
|
normalizedPath = normalizedPath.replace(/^\$\.?/, "");
|
|
@@ -33570,7 +33570,7 @@ function resolveFallback(parsed, context, tracking, options = {}) {
|
|
|
33570
33570
|
}
|
|
33571
33571
|
var templateEngine = new SimpleTemplateEngine();
|
|
33572
33572
|
|
|
33573
|
-
// ../shared/dist/chunk-
|
|
33573
|
+
// ../shared/dist/chunk-YF37CWRH.mjs
|
|
33574
33574
|
var jsonPatchOperationSchema = external_exports.object({
|
|
33575
33575
|
op: external_exports.enum(["add", "remove", "replace", "move", "copy", "test"]),
|
|
33576
33576
|
/** JSON Pointer (RFC 6901) into the state document. `''` addresses the root. */
|
|
@@ -33661,6 +33661,12 @@ var unifiedExecutionCompleteEventSchema = external_exports.object({
|
|
|
33661
33661
|
totalSteps: external_exports.number().optional(),
|
|
33662
33662
|
successfulSteps: external_exports.number().optional(),
|
|
33663
33663
|
failedSteps: external_exports.number().optional(),
|
|
33664
|
+
// Sibling of `success`, never a replacement: counts every top-level step that
|
|
33665
|
+
// carried a non-null `error`, INCLUDING continue-on-error swallows
|
|
33666
|
+
// (`success:true` + `error`). A strictly larger set than `failedSteps` when
|
|
33667
|
+
// any step swallowed an error under default-continue. Additive/optional —
|
|
33668
|
+
// old consumers ignore it. The API and runtime FLOW lanes both emit it.
|
|
33669
|
+
stepErrorCount: external_exports.number().optional(),
|
|
33664
33670
|
// Inline Claude Managed create dispatches return the reusable Anthropic
|
|
33665
33671
|
// agent id on the terminal frame so callers can connect on a later turn.
|
|
33666
33672
|
claudeManagedAgentId: external_exports.string().optional(),
|
|
@@ -34021,9 +34027,16 @@ var unifiedAwaitEventSchema = external_exports.object({
|
|
|
34021
34027
|
awaitedAt: external_exports.string().optional(),
|
|
34022
34028
|
origin: external_exports.enum(["webmcp", "sdk"]).optional(),
|
|
34023
34029
|
pageOrigin: external_exports.string().optional(),
|
|
34024
|
-
// Present when
|
|
34025
|
-
// server elicited input mid-tool-call
|
|
34030
|
+
// Present when the pause is an elicitation of the human: a user-configured
|
|
34031
|
+
// MCP server elicited input mid-tool-call (`mcp_elicitation`), or an external
|
|
34032
|
+
// A2A agent asked a clarification / auth question (`a2a_input_required` /
|
|
34033
|
+
// `a2a_auth_required`). Peer-controlled, display-only.
|
|
34026
34034
|
elicitation: unifiedElicitationSchema.optional(),
|
|
34035
|
+
// Present on an external A2A pause: the conversation handle the resume leg
|
|
34036
|
+
// re-enters on (`message/send` with the same `contextId` / `taskId`). The
|
|
34037
|
+
// resume ROUTES off the persisted checkpoint, never off this frame — these
|
|
34038
|
+
// are here so a client can correlate and display the paused conversation.
|
|
34039
|
+
externalAgent: unifiedExternalAgentContextSchema.optional(),
|
|
34027
34040
|
// Discriminates an AUTO-RESUMING durable pause (`crawl_pending` /
|
|
34028
34041
|
// `durable_poll`, resumed server-side by the crawl / wait-until Workflow;
|
|
34029
34042
|
// `detached`, a Claude Managed watch-budget detach — the stream ends but
|
|
@@ -34033,7 +34046,8 @@ var unifiedAwaitEventSchema = external_exports.object({
|
|
|
34033
34046
|
// render a "resume" prompt for a pause that resumes itself. Mirrors the
|
|
34034
34047
|
// JSON `pausedReason` discriminator (execution-pipeline.ts); the
|
|
34035
34048
|
// server-resumed pauses carry `crawlId` / `stepId` instead of the tool
|
|
34036
|
-
// fields
|
|
34049
|
+
// fields, and the A2A pauses (`a2a_input_required` / `a2a_auth_required`)
|
|
34050
|
+
// carry `elicitation` + `externalAgent`. UX context; never a control signal.
|
|
34037
34051
|
awaitReason: external_exports.string().optional(),
|
|
34038
34052
|
crawlId: external_exports.string().optional(),
|
|
34039
34053
|
stepId: external_exports.string().optional()
|
|
@@ -35540,6 +35554,11 @@ var recordFilterSchema = external_exports.object({
|
|
|
35540
35554
|
type: external_exports.string().min(1).max(255),
|
|
35541
35555
|
where: external_exports.union([recordFilterConditionSchema, recordFilterGroupSchema]).optional()
|
|
35542
35556
|
});
|
|
35557
|
+
var MAX_METADATA_BYTES = 256 * 1024;
|
|
35558
|
+
var MAX_MESSAGE_CONTENT_BYTES = 1024 * 1024;
|
|
35559
|
+
var MAX_MESSAGES_TOTAL_BYTES = 32 * 1024 * 1024;
|
|
35560
|
+
var encoder = new TextEncoder();
|
|
35561
|
+
var UNEVALUATED_VERDICT = Object.freeze({ status: "unevaluated" });
|
|
35543
35562
|
var contextFallbackSchema = external_exports.union([
|
|
35544
35563
|
external_exports.object({ type: external_exports.literal("retry"), delay: external_exports.number().optional() }),
|
|
35545
35564
|
external_exports.object({
|
|
@@ -38436,6 +38455,33 @@ function sanitizeCodeToolIdentifier(name) {
|
|
|
38436
38455
|
if (/^[0-9]/.test(safe)) safe = "_" + safe;
|
|
38437
38456
|
return safe;
|
|
38438
38457
|
}
|
|
38458
|
+
var DEFAULT_SANDBOX_PROVIDER = "cloudflare-worker";
|
|
38459
|
+
var SANDBOX_PROVIDER_LANGUAGES = Object.assign(
|
|
38460
|
+
/* @__PURE__ */ Object.create(null),
|
|
38461
|
+
{
|
|
38462
|
+
quickjs: ["javascript"],
|
|
38463
|
+
"cloudflare-worker": ["javascript"],
|
|
38464
|
+
"runtype-sandbox": ["javascript", "typescript", "python"],
|
|
38465
|
+
"cloudflare-sandbox": ["javascript", "typescript", "python"],
|
|
38466
|
+
daytona: ["javascript", "typescript", "python"]
|
|
38467
|
+
}
|
|
38468
|
+
);
|
|
38469
|
+
function resolveSandboxProvider(provider) {
|
|
38470
|
+
return typeof provider === "string" ? provider : DEFAULT_SANDBOX_PROVIDER;
|
|
38471
|
+
}
|
|
38472
|
+
function lookupLanguages(provider) {
|
|
38473
|
+
const resolved = resolveSandboxProvider(provider);
|
|
38474
|
+
if (!Object.prototype.hasOwnProperty.call(SANDBOX_PROVIDER_LANGUAGES, resolved)) return void 0;
|
|
38475
|
+
const languages = SANDBOX_PROVIDER_LANGUAGES[resolved];
|
|
38476
|
+
return Array.isArray(languages) ? languages : void 0;
|
|
38477
|
+
}
|
|
38478
|
+
function isJsOnlySandboxProvider(provider) {
|
|
38479
|
+
const languages = lookupLanguages(provider);
|
|
38480
|
+
return languages !== void 0 && languages.length === 1 && languages[0] === "javascript";
|
|
38481
|
+
}
|
|
38482
|
+
function supportsCodeModeToolPool(provider) {
|
|
38483
|
+
return resolveSandboxProvider(provider) === "cloudflare-worker";
|
|
38484
|
+
}
|
|
38439
38485
|
function snakeToCamel(str) {
|
|
38440
38486
|
return str.replace(/_([a-z])/g, (_2, letter) => letter.toUpperCase());
|
|
38441
38487
|
}
|
|
@@ -38550,6 +38596,42 @@ function validateSandboxNetworkAccess(config3, stepIndex, stepRef, buckets) {
|
|
|
38550
38596
|
buckets
|
|
38551
38597
|
);
|
|
38552
38598
|
}
|
|
38599
|
+
function validateTransformLanguageProviderPair(config3, stepIndex, stepRef, buckets) {
|
|
38600
|
+
const language = typeof config3.language === "string" ? config3.language : void 0;
|
|
38601
|
+
if (!language || language === "javascript") return;
|
|
38602
|
+
const provider = resolveSandboxProvider(config3.sandboxProvider);
|
|
38603
|
+
if (!isJsOnlySandboxProvider(provider)) return;
|
|
38604
|
+
addIssue(
|
|
38605
|
+
"warning",
|
|
38606
|
+
{
|
|
38607
|
+
code: "TRANSFORM_LANGUAGE_PROVIDER_MISMATCH",
|
|
38608
|
+
message: `Step requests language "${language}" but sandboxProvider "${provider}" only runs JavaScript. Switch to the "runtype-sandbox" or "daytona" provider to run this language, or set language to "javascript".`,
|
|
38609
|
+
path: `flowSteps[${stepIndex}].config.language`,
|
|
38610
|
+
step: stepRef,
|
|
38611
|
+
details: { language, sandboxProvider: provider }
|
|
38612
|
+
},
|
|
38613
|
+
buckets
|
|
38614
|
+
);
|
|
38615
|
+
}
|
|
38616
|
+
function validateTransformToolPoolProvider(config3, stepIndex, stepRef, buckets) {
|
|
38617
|
+
const tools = isObjectRecord(config3.tools) ? config3.tools : void 0;
|
|
38618
|
+
if (!tools) return;
|
|
38619
|
+
const poolSize = (Array.isArray(tools.runtimeTools) ? tools.runtimeTools.length : 0) + (Array.isArray(tools.toolIds) ? tools.toolIds.length : 0) + (Array.isArray(tools.mcpServers) ? tools.mcpServers.length : 0);
|
|
38620
|
+
if (poolSize === 0) return;
|
|
38621
|
+
const provider = resolveSandboxProvider(config3.sandboxProvider);
|
|
38622
|
+
if (supportsCodeModeToolPool(provider)) return;
|
|
38623
|
+
addIssue(
|
|
38624
|
+
"warning",
|
|
38625
|
+
{
|
|
38626
|
+
code: "TRANSFORM_POOL_TOOLS_ON_CONTAINER_PROVIDER",
|
|
38627
|
+
message: `Step configures tools but sandboxProvider "${provider}" cannot bind a code-mode tool pool, so the tools are not callable from this script and any call to one fails at runtime. Use the "cloudflare-worker" provider to call tools from a transform-data step, or remove the tools.`,
|
|
38628
|
+
path: `flowSteps[${stepIndex}].config.tools`,
|
|
38629
|
+
step: stepRef,
|
|
38630
|
+
details: { sandboxProvider: provider, poolSize }
|
|
38631
|
+
},
|
|
38632
|
+
buckets
|
|
38633
|
+
);
|
|
38634
|
+
}
|
|
38553
38635
|
function validateCodeToolNameCollisions(toolNames, stepRef, code, preSeededCount = 0) {
|
|
38554
38636
|
const seen = /* @__PURE__ */ new Map();
|
|
38555
38637
|
for (const [i, tool] of toolNames.entries()) {
|
|
@@ -39293,6 +39375,149 @@ function validateListRecordsArrayAccess(flowSteps, buckets) {
|
|
|
39293
39375
|
}
|
|
39294
39376
|
}
|
|
39295
39377
|
}
|
|
39378
|
+
var FETCH_CLASS_SWALLOWING_FEED_CODE = "FETCH_CLASS_SWALLOWING_FEED";
|
|
39379
|
+
var FETCH_CLASS_SWALLOWING_STEP_TYPES = /* @__PURE__ */ new Set(["fetch-url", "api-call", "crawl", "search"]);
|
|
39380
|
+
function errorHandlingIsUnset(errorHandling) {
|
|
39381
|
+
if (errorHandling === void 0 || errorHandling === null) return true;
|
|
39382
|
+
return isObjectRecord(errorHandling) && !errorHandling.onError;
|
|
39383
|
+
}
|
|
39384
|
+
var MAX_TEMPLATE_INTERPOLATION_SCAN_DEPTH = 16;
|
|
39385
|
+
function stripNonCodeScriptText(script, interpolationDepth = 0) {
|
|
39386
|
+
let out = "";
|
|
39387
|
+
let i = 0;
|
|
39388
|
+
while (i < script.length) {
|
|
39389
|
+
const ch = script[i];
|
|
39390
|
+
const next = script[i + 1];
|
|
39391
|
+
if (ch === "/" && next === "/") {
|
|
39392
|
+
while (i < script.length && script[i] !== "\n") i++;
|
|
39393
|
+
continue;
|
|
39394
|
+
}
|
|
39395
|
+
if (ch === "/" && next === "*") {
|
|
39396
|
+
i += 2;
|
|
39397
|
+
while (i < script.length && !(script[i] === "*" && script[i + 1] === "/")) i++;
|
|
39398
|
+
i += 2;
|
|
39399
|
+
continue;
|
|
39400
|
+
}
|
|
39401
|
+
if (ch === "'" || ch === '"') {
|
|
39402
|
+
const quote = ch;
|
|
39403
|
+
i++;
|
|
39404
|
+
while (i < script.length && script[i] !== quote) {
|
|
39405
|
+
i += script[i] === "\\" ? 2 : 1;
|
|
39406
|
+
}
|
|
39407
|
+
i++;
|
|
39408
|
+
out += " ";
|
|
39409
|
+
continue;
|
|
39410
|
+
}
|
|
39411
|
+
if (ch === "`") {
|
|
39412
|
+
i++;
|
|
39413
|
+
while (i < script.length && script[i] !== "`") {
|
|
39414
|
+
if (script[i] === "\\") {
|
|
39415
|
+
i += 2;
|
|
39416
|
+
continue;
|
|
39417
|
+
}
|
|
39418
|
+
if (script[i] === "$" && script[i + 1] === "{") {
|
|
39419
|
+
i += 2;
|
|
39420
|
+
const start = i;
|
|
39421
|
+
let depth = 1;
|
|
39422
|
+
while (i < script.length && depth > 0) {
|
|
39423
|
+
if (script[i] === "{") depth++;
|
|
39424
|
+
else if (script[i] === "}") {
|
|
39425
|
+
depth--;
|
|
39426
|
+
if (depth === 0) break;
|
|
39427
|
+
}
|
|
39428
|
+
i++;
|
|
39429
|
+
}
|
|
39430
|
+
out += interpolationDepth < MAX_TEMPLATE_INTERPOLATION_SCAN_DEPTH ? ` ${stripNonCodeScriptText(script.slice(start, i), interpolationDepth + 1)} ` : " ";
|
|
39431
|
+
i++;
|
|
39432
|
+
continue;
|
|
39433
|
+
}
|
|
39434
|
+
i++;
|
|
39435
|
+
}
|
|
39436
|
+
i++;
|
|
39437
|
+
out += " ";
|
|
39438
|
+
continue;
|
|
39439
|
+
}
|
|
39440
|
+
out += ch;
|
|
39441
|
+
i++;
|
|
39442
|
+
}
|
|
39443
|
+
return out;
|
|
39444
|
+
}
|
|
39445
|
+
function validateFetchClassSwallowingFeed(flowSteps, buckets) {
|
|
39446
|
+
const swallowingFetchOutputs = /* @__PURE__ */ new Map();
|
|
39447
|
+
const consumerPath = (step, stepIndex) => step.type === "upsert-record" ? `flowSteps[${stepIndex}].config.sourceVariable` : `flowSteps[${stepIndex}].config.script`;
|
|
39448
|
+
const findConsumedOrigin = (step, config3) => {
|
|
39449
|
+
if (step.type === "upsert-record") {
|
|
39450
|
+
const inputMode = typeof config3.inputMode === "string" ? config3.inputMode : "single";
|
|
39451
|
+
const sourceVariable = typeof config3.sourceVariable === "string" ? config3.sourceVariable : "";
|
|
39452
|
+
if (inputMode === "batch" || !sourceVariable) return null;
|
|
39453
|
+
const origin = swallowingFetchOutputs.get(sourceVariable);
|
|
39454
|
+
return origin ? { outputVariable: sourceVariable, origin } : null;
|
|
39455
|
+
}
|
|
39456
|
+
if (step.type === "transform-data") {
|
|
39457
|
+
const script = typeof config3.script === "string" ? config3.script : "";
|
|
39458
|
+
if (!script) return null;
|
|
39459
|
+
const inputMode = config3.inputMode === "variable" ? "variable" : "code";
|
|
39460
|
+
if (inputMode === "variable") {
|
|
39461
|
+
for (const { variable } of extractVariableReferences(config3)) {
|
|
39462
|
+
const classification = classifyVariableReference(variable);
|
|
39463
|
+
if (classification.namespace !== "plain" && classification.namespace !== "flow") continue;
|
|
39464
|
+
const root = classification.baseName.split(".")[0] || "";
|
|
39465
|
+
const origin = swallowingFetchOutputs.get(root);
|
|
39466
|
+
if (origin) return { outputVariable: root, origin };
|
|
39467
|
+
}
|
|
39468
|
+
return null;
|
|
39469
|
+
}
|
|
39470
|
+
if (swallowingFetchOutputs.size === 0) return null;
|
|
39471
|
+
const codeText = stripNonCodeScriptText(script);
|
|
39472
|
+
for (const [fetchVar, origin] of swallowingFetchOutputs) {
|
|
39473
|
+
const escaped = fetchVar.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
39474
|
+
if (new RegExp(`(?<![.$\\w])${escaped}(?![$\\w])`).test(codeText)) {
|
|
39475
|
+
return { outputVariable: fetchVar, origin };
|
|
39476
|
+
}
|
|
39477
|
+
}
|
|
39478
|
+
return null;
|
|
39479
|
+
}
|
|
39480
|
+
return null;
|
|
39481
|
+
};
|
|
39482
|
+
for (const [stepIndex, step] of flowSteps.entries()) {
|
|
39483
|
+
if (step.enabled === false) continue;
|
|
39484
|
+
if (!isObjectRecord(step.config)) continue;
|
|
39485
|
+
const config3 = step.config;
|
|
39486
|
+
if (step.type === "upsert-record" || step.type === "transform-data") {
|
|
39487
|
+
const consumed = findConsumedOrigin(step, config3);
|
|
39488
|
+
if (consumed) {
|
|
39489
|
+
addIssue(
|
|
39490
|
+
"warning",
|
|
39491
|
+
{
|
|
39492
|
+
code: FETCH_CLASS_SWALLOWING_FEED_CODE,
|
|
39493
|
+
message: `Step "${consumed.origin.name}" (${consumed.origin.type}) has no errorHandling set, so a failed fetch silently produces an empty result (default continue) \u2014 and its output "{{${consumed.outputVariable}}}" is read by "${step.name}" (${step.type}). An empty fetch flows through as if the API legitimately returned no rows, which can drive downstream logic, analytics, or record writes over zero data. Either set errorHandling to "fail" on "${consumed.origin.name}" (recommended when its output feeds further logic), or set it to "continue" explicitly if an empty result is expected.`,
|
|
39494
|
+
path: consumerPath(step, stepIndex),
|
|
39495
|
+
step: { index: stepIndex, name: step.name, type: step.type },
|
|
39496
|
+
details: {
|
|
39497
|
+
fetchStepIndex: consumed.origin.index,
|
|
39498
|
+
fetchStepName: consumed.origin.name,
|
|
39499
|
+
fetchStepType: consumed.origin.type,
|
|
39500
|
+
outputVariable: consumed.outputVariable
|
|
39501
|
+
}
|
|
39502
|
+
},
|
|
39503
|
+
buckets
|
|
39504
|
+
);
|
|
39505
|
+
}
|
|
39506
|
+
}
|
|
39507
|
+
const outputVar = getStepOutputVariable(step);
|
|
39508
|
+
if (outputVar) {
|
|
39509
|
+
if (FETCH_CLASS_SWALLOWING_STEP_TYPES.has(step.type) && errorHandlingIsUnset(config3.errorHandling)) {
|
|
39510
|
+
swallowingFetchOutputs.set(outputVar, {
|
|
39511
|
+
index: stepIndex,
|
|
39512
|
+
name: step.name,
|
|
39513
|
+
type: step.type
|
|
39514
|
+
});
|
|
39515
|
+
} else {
|
|
39516
|
+
swallowingFetchOutputs.delete(outputVar);
|
|
39517
|
+
}
|
|
39518
|
+
}
|
|
39519
|
+
}
|
|
39520
|
+
}
|
|
39296
39521
|
function validateDeprecatedStepTypes(flowSteps, buckets) {
|
|
39297
39522
|
for (const [stepIndex, step] of flowSteps.entries()) {
|
|
39298
39523
|
if (step.type !== "retrieve-record") continue;
|
|
@@ -39835,6 +40060,8 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
|
|
|
39835
40060
|
const sandboxProvider = config3.sandboxProvider || "cloudflare-worker";
|
|
39836
40061
|
const resolvedProvider = sandboxProvider === "cloudflare-sandbox" ? "runtype-sandbox" : sandboxProvider;
|
|
39837
40062
|
validateSandboxNetworkAccess(config3, stepIndex, stepRef, buckets);
|
|
40063
|
+
validateTransformLanguageProviderPair(config3, stepIndex, stepRef, buckets);
|
|
40064
|
+
validateTransformToolPoolProvider(config3, stepIndex, stepRef, buckets);
|
|
39838
40065
|
if (resolvedProvider === "runtype-sandbox" && !config3.language) {
|
|
39839
40066
|
addIssue(
|
|
39840
40067
|
"warning",
|
|
@@ -39897,6 +40124,7 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
|
|
|
39897
40124
|
validateConditionExpressions(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
|
|
39898
40125
|
validateToolCallStrategyMultiStep(flowData.flowSteps, buckets);
|
|
39899
40126
|
validateListRecordsArrayAccess(flowData.flowSteps, buckets);
|
|
40127
|
+
validateFetchClassSwallowingFeed(flowData.flowSteps, buckets);
|
|
39900
40128
|
validateWaitUntilPollBudget(flowData.flowSteps, buckets);
|
|
39901
40129
|
validateDeprecatedStepTypes(flowData.flowSteps, buckets);
|
|
39902
40130
|
validatePromptSystemPromptVolatility(flowData.flowSteps, buckets);
|
|
@@ -40101,11 +40329,16 @@ var PROVIDER_SECRET_SPECS = [
|
|
|
40101
40329
|
},
|
|
40102
40330
|
{
|
|
40103
40331
|
providerId: "mixlayer",
|
|
40104
|
-
// Matches open-weight models Mixlayer hosts (Qwen 3.5 family, Kimi)
|
|
40105
|
-
// explicit prefixes. Does NOT match closed Alibaba models
|
|
40106
|
-
// which route through Vercel Gateway. See
|
|
40107
|
-
// canonical predicate mirrored here.
|
|
40108
|
-
|
|
40332
|
+
// Matches open-weight models Mixlayer hosts (Qwen 3.5 family, Kimi, GLM)
|
|
40333
|
+
// plus explicit prefixes. Does NOT match closed Alibaba models
|
|
40334
|
+
// (qwen3.5-flash/plus) which route through Vercel Gateway. See
|
|
40335
|
+
// mixlayer-executor.ts for the canonical predicate mirrored here.
|
|
40336
|
+
//
|
|
40337
|
+
// `z-ai/` is Mixlayer's vendor namespace for Zhipu's GLM listings
|
|
40338
|
+
// (`z-ai/glm-5.2`). It is NOT the Vercel Gateway spelling of the same
|
|
40339
|
+
// model, which is `zai/glm-5.2` (no hyphen) and must keep routing to the
|
|
40340
|
+
// gateway — hence the exact `z-ai/` prefix rather than a looser match.
|
|
40341
|
+
matches: (m2) => m2.startsWith("mixlayer/") || m2.startsWith("modelsocket/") || m2.startsWith("qwen/") || m2.startsWith("z-ai/") || m2.startsWith("kimi-") || m2.includes("/kimi-") || /(?:^|\/)qwen3[.-]5-\d+b(?:-a\d+b)?$/i.test(m2),
|
|
40109
40342
|
secretNames: ["MIXLAYER_API_KEY"]
|
|
40110
40343
|
},
|
|
40111
40344
|
{
|
|
@@ -40288,7 +40521,7 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
|
|
|
40288
40521
|
// `vendored-export` (it rides the same host `CodeModeExecutor` seam as
|
|
40289
40522
|
// `transformDataCodeModeTools`) — see {@link VENDORED_EXPORT_REFOLDS}.
|
|
40290
40523
|
// Rollback lever: revert the bit to `true` (plus its test).
|
|
40291
|
-
version: "2026-08-
|
|
40524
|
+
version: "2026-08-11.1",
|
|
40292
40525
|
unsupportedStepTypes: ["wait-until", "crawl"],
|
|
40293
40526
|
unsupportedFeatures: {
|
|
40294
40527
|
approvalSteps: true,
|
|
@@ -40347,7 +40580,34 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
|
|
|
40347
40580
|
// decision attribution but no longer folds.
|
|
40348
40581
|
// Rollback lever: revert this bit to `true` (plus its test).
|
|
40349
40582
|
transformDataMcpServers: false,
|
|
40350
|
-
|
|
40583
|
+
// SUPPORTED as of 2026-08-11 (#6521): `TransformSandboxRouter`
|
|
40584
|
+
// (`apps/api/src/lib/runtime/transform-sandbox-router.ts`) selects a
|
|
40585
|
+
// concrete executor per `execute()` call from the step's own
|
|
40586
|
+
// `sandboxProvider`, so a container-backed or Daytona `transform-data` step
|
|
40587
|
+
// now has a faithful runtime-lane execution. The api owns the router (it
|
|
40588
|
+
// holds the SANDBOX binding and the Daytona credentials), which is why the
|
|
40589
|
+
// `vendored-export` matrix RE-FOLDS this bit rather than inheriting the
|
|
40590
|
+
// graduation — see {@link VENDORED_EXPORT_REFOLDS}.
|
|
40591
|
+
//
|
|
40592
|
+
// The fold does NOT disappear: `transformDataHasUnsupportedExecution`
|
|
40593
|
+
// (`apps/api/src/lib/runtime/flow-eligibility-facts.ts`) narrowed to the
|
|
40594
|
+
// shapes the router still throws on — an unroutable provider, and a non-JS
|
|
40595
|
+
// `language` on a JS-only provider (which legacy runs as JavaScript
|
|
40596
|
+
// because it never forwards `language` to those branches). Both would
|
|
40597
|
+
// otherwise land as `success: true` with a null output, since
|
|
40598
|
+
// `transform-data` default-continues.
|
|
40599
|
+
//
|
|
40600
|
+
// Rollback lever: flip this bit back to `true` (plus its test). That
|
|
40601
|
+
// re-folds every container/Daytona transform to legacy without touching
|
|
40602
|
+
// the router or the narrowed predicate.
|
|
40603
|
+
unsupportedTransformExecution: false,
|
|
40604
|
+
// NOT graduated, and not graduating with its sibling: these are the shapes
|
|
40605
|
+
// the router THROWS on, which `transform-data`'s default-continue turns
|
|
40606
|
+
// into `success: true` + null rather than a visible failure. Keeping this
|
|
40607
|
+
// bit `true` is what stops the graduation above from being a silent data
|
|
40608
|
+
// bug for `python` + `cloudflare-worker` (which legacy runs as JavaScript
|
|
40609
|
+
// today). See {@link FlowEligibilityFacts.hasUnroutableTransformExecution}.
|
|
40610
|
+
unroutableTransformExecution: true,
|
|
40351
40611
|
// #6023 leg 1 (2026-08-05): a custom runtime tool requesting code_mode / a
|
|
40352
40612
|
// non-JS language / a container-backed sandbox provider has no runtime-lane
|
|
40353
40613
|
// port — `runCustom` ignores all three and silently misexecutes as JS. Same
|
|
@@ -40416,7 +40676,7 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
|
|
|
40416
40676
|
}
|
|
40417
40677
|
};
|
|
40418
40678
|
var DURABLE_HOSTED_STEP_TYPES = /* @__PURE__ */ new Set(["wait-until", "crawl"]);
|
|
40419
|
-
var
|
|
40679
|
+
var API_DURABLE_HOSTED_CAPABILITY_MATRIX = {
|
|
40420
40680
|
...API_INPROCESS_CAPABILITY_MATRIX,
|
|
40421
40681
|
unsupportedStepTypes: API_INPROCESS_CAPABILITY_MATRIX.unsupportedStepTypes.filter(
|
|
40422
40682
|
(stepType) => !DURABLE_HOSTED_STEP_TYPES.has(stepType)
|
|
@@ -40441,7 +40701,7 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
|
|
|
40441
40701
|
// Bumped 2026-08-08.1: `transformDataMcpServers` graduated on the base and
|
|
40442
40702
|
// becomes the fourth documented re-fold here — the discovered tools still
|
|
40443
40703
|
// need the host `CodeModeExecutor` to be bound as sandbox callables.
|
|
40444
|
-
version: "2026-08-
|
|
40704
|
+
version: "2026-08-11.1",
|
|
40445
40705
|
unsupportedStepTypes: [
|
|
40446
40706
|
// ── Carried over from api-inprocess: durable-host-only step types. A
|
|
40447
40707
|
// self-contained container has no durable host (BYOC §3.3 / S0 — the
|
|
@@ -40570,8 +40830,19 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
|
|
|
40570
40830
|
// `CodeModeExecutor` seam as the sibling bit above — discovery itself is
|
|
40571
40831
|
// portable, the BINDING is not. Same graduation lever.
|
|
40572
40832
|
transformDataMcpServers: true,
|
|
40833
|
+
// VENDORED RE-FOLD (as of 2026-08-11, when the base graduated on #6521):
|
|
40834
|
+
// api-inprocess reaches container / Daytona `transform-data` execution
|
|
40835
|
+
// through `TransformSandboxRouter`, which needs the api's `SANDBOX` service
|
|
40836
|
+
// binding and api-resolved Daytona credentials. An export bundle has
|
|
40837
|
+
// neither, and `.claude/rules/runtime.md` forbids in-runtime dispatch
|
|
40838
|
+
// across providers, so the runtime's ONE wired executor would run the
|
|
40839
|
+
// step's container/Python source on whatever JS-only sandbox the export
|
|
40840
|
+
// carries. Graduation lever: a portable provider-routing fulfillment in the
|
|
40841
|
+
// standard export — then flip to false and drop from
|
|
40842
|
+
// {@link VENDORED_EXPORT_REFOLDS}.
|
|
40573
40843
|
unsupportedTransformExecution: true,
|
|
40574
|
-
//
|
|
40844
|
+
// Inherited from the base, which never graduates it.
|
|
40845
|
+
unroutableTransformExecution: true,
|
|
40575
40846
|
customToolExecution: true,
|
|
40576
40847
|
// api-inprocess fold (#6023 leg 1); carried over.
|
|
40577
40848
|
// `promptMcpServers` inherits the base SUPPORTED (`false`). The runtime owns
|
|
@@ -41203,13 +41474,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41203
41474
|
"claude-opus-4": {
|
|
41204
41475
|
"vercel": "anthropic/claude-opus-4"
|
|
41205
41476
|
},
|
|
41206
|
-
"claude-opus-4-1": {
|
|
41207
|
-
"anthropic": "claude-opus-4-1-20250805",
|
|
41208
|
-
"vercel": "anthropic/claude-opus-4.1"
|
|
41209
|
-
},
|
|
41210
|
-
"claude-opus-4-1-20250805": {
|
|
41211
|
-
"anthropic": "claude-opus-4-1-20250805"
|
|
41212
|
-
},
|
|
41213
41477
|
"claude-opus-4-5": {
|
|
41214
41478
|
"anthropic": "claude-opus-4-5-20251101",
|
|
41215
41479
|
"vercel": "anthropic/claude-opus-4.5"
|
|
@@ -41232,9 +41496,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41232
41496
|
"claude-opus-4-8-fast": {
|
|
41233
41497
|
"vercel": "anthropic/claude-opus-4.8-fast"
|
|
41234
41498
|
},
|
|
41235
|
-
"claude-opus-4.1": {
|
|
41236
|
-
"vercel": "anthropic/claude-opus-4.1"
|
|
41237
|
-
},
|
|
41238
41499
|
"claude-opus-4.5": {
|
|
41239
41500
|
"vercel": "anthropic/claude-opus-4.5"
|
|
41240
41501
|
},
|
|
@@ -41299,6 +41560,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41299
41560
|
"deepcogito/cogito-v2-1-671b": {
|
|
41300
41561
|
"togetherai": "togetherai/deepcogito/cogito-v2-1-671b"
|
|
41301
41562
|
},
|
|
41563
|
+
"deepseek-ai/DeepSeek-V4-Flash-0731": {
|
|
41564
|
+
"togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Flash-0731"
|
|
41565
|
+
},
|
|
41302
41566
|
"deepseek-ai/DeepSeek-V4-Pro": {
|
|
41303
41567
|
"togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Pro"
|
|
41304
41568
|
},
|
|
@@ -41306,12 +41570,16 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41306
41570
|
"vercel": "deepseek/deepseek-v4-flash"
|
|
41307
41571
|
},
|
|
41308
41572
|
"deepseek-v4-flash-0731": {
|
|
41573
|
+
"togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Flash-0731",
|
|
41309
41574
|
"vercel": "deepseek/deepseek-v4-flash-0731"
|
|
41310
41575
|
},
|
|
41311
41576
|
"deepseek-v4-pro": {
|
|
41312
41577
|
"togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Pro",
|
|
41313
41578
|
"vercel": "deepseek/deepseek-v4-pro"
|
|
41314
41579
|
},
|
|
41580
|
+
"deepseek-v4-pro-0813": {
|
|
41581
|
+
"vercel": "deepseek/deepseek-v4-pro-0813"
|
|
41582
|
+
},
|
|
41315
41583
|
"devstral-2": {
|
|
41316
41584
|
"vercel": "mistral/devstral-2"
|
|
41317
41585
|
},
|
|
@@ -41739,6 +42007,10 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41739
42007
|
"vercel": "xai/grok-4.5",
|
|
41740
42008
|
"xai": "grok-4.5"
|
|
41741
42009
|
},
|
|
42010
|
+
"grok-4-6": {
|
|
42011
|
+
"vercel": "xai/grok-4.6",
|
|
42012
|
+
"xai": "grok-4.6"
|
|
42013
|
+
},
|
|
41742
42014
|
"grok-4.20-0309-non-reasoning": {
|
|
41743
42015
|
"xai": "grok-4.20-0309-non-reasoning"
|
|
41744
42016
|
},
|
|
@@ -41765,6 +42037,10 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41765
42037
|
"vercel": "xai/grok-4.5",
|
|
41766
42038
|
"xai": "grok-4.5"
|
|
41767
42039
|
},
|
|
42040
|
+
"grok-4.6": {
|
|
42041
|
+
"vercel": "xai/grok-4.6",
|
|
42042
|
+
"xai": "grok-4.6"
|
|
42043
|
+
},
|
|
41768
42044
|
"grok-build-0-1": {
|
|
41769
42045
|
"vercel": "xai/grok-build-0.1",
|
|
41770
42046
|
"xai": "grok-build-0.1"
|
|
@@ -41829,8 +42105,7 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41829
42105
|
"vercel": "moonshotai/kimi-k2-thinking"
|
|
41830
42106
|
},
|
|
41831
42107
|
"kimi-k2-5": {
|
|
41832
|
-
"togetherai": "togetherai/moonshotai/Kimi-K2.5"
|
|
41833
|
-
"vercel": "moonshotai/kimi-k2.5"
|
|
42108
|
+
"togetherai": "togetherai/moonshotai/Kimi-K2.5"
|
|
41834
42109
|
},
|
|
41835
42110
|
"kimi-k2-6": {
|
|
41836
42111
|
"togetherai": "togetherai/moonshotai/Kimi-K2.6",
|
|
@@ -41846,9 +42121,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41846
42121
|
"kimi-k2-thinking": {
|
|
41847
42122
|
"vercel": "moonshotai/kimi-k2-thinking"
|
|
41848
42123
|
},
|
|
41849
|
-
"kimi-k2.5": {
|
|
41850
|
-
"vercel": "moonshotai/kimi-k2.5"
|
|
41851
|
-
},
|
|
41852
42124
|
"kimi-k2.6": {
|
|
41853
42125
|
"vercel": "moonshotai/kimi-k2.6"
|
|
41854
42126
|
},
|
|
@@ -41880,11 +42152,17 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
41880
42152
|
"lfm2-24b-a2b": {
|
|
41881
42153
|
"togetherai": "togetherai/LiquidAI/LFM2-24B-A2B"
|
|
41882
42154
|
},
|
|
41883
|
-
"ling-3-0-flash
|
|
41884
|
-
"vercel": "inclusionai/ling-3.0-flash
|
|
42155
|
+
"ling-3-0-flash": {
|
|
42156
|
+
"vercel": "inclusionai/ling-3.0-flash"
|
|
42157
|
+
},
|
|
42158
|
+
"ling-3-0-tiny-free": {
|
|
42159
|
+
"vercel": "inclusionai/ling-3.0-tiny-free"
|
|
42160
|
+
},
|
|
42161
|
+
"ling-3.0-flash": {
|
|
42162
|
+
"vercel": "inclusionai/ling-3.0-flash"
|
|
41885
42163
|
},
|
|
41886
|
-
"ling-3.0-
|
|
41887
|
-
"vercel": "inclusionai/ling-3.0-
|
|
42164
|
+
"ling-3.0-tiny-free": {
|
|
42165
|
+
"vercel": "inclusionai/ling-3.0-tiny-free"
|
|
41888
42166
|
},
|
|
41889
42167
|
"LiquidAI/LFM2-24B-A2B": {
|
|
41890
42168
|
"togetherai": "togetherai/LiquidAI/LFM2-24B-A2B"
|
|
@@ -42011,12 +42289,30 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
42011
42289
|
"morph-v3-large": {
|
|
42012
42290
|
"vercel": "morph/morph-v3-large"
|
|
42013
42291
|
},
|
|
42292
|
+
"muse-glimmer-30b": {
|
|
42293
|
+
"vercel": "meta/muse-glimmer-30b"
|
|
42294
|
+
},
|
|
42014
42295
|
"muse-spark-1-1": {
|
|
42015
42296
|
"vercel": "meta/muse-spark-1.1"
|
|
42016
42297
|
},
|
|
42298
|
+
"muse-spark-1-2": {
|
|
42299
|
+
"vercel": "meta/muse-spark-1.2"
|
|
42300
|
+
},
|
|
42301
|
+
"muse-spark-1-2-contributor": {
|
|
42302
|
+
"vercel": "meta/muse-spark-1.2-contributor"
|
|
42303
|
+
},
|
|
42017
42304
|
"muse-spark-1.1": {
|
|
42018
42305
|
"vercel": "meta/muse-spark-1.1"
|
|
42019
42306
|
},
|
|
42307
|
+
"muse-spark-1.2": {
|
|
42308
|
+
"vercel": "meta/muse-spark-1.2"
|
|
42309
|
+
},
|
|
42310
|
+
"muse-spark-1.2-contributor": {
|
|
42311
|
+
"vercel": "meta/muse-spark-1.2-contributor"
|
|
42312
|
+
},
|
|
42313
|
+
"namazu": {
|
|
42314
|
+
"vercel": "sakana/namazu"
|
|
42315
|
+
},
|
|
42020
42316
|
"nemotron-3-nano-30b-a3b": {
|
|
42021
42317
|
"vercel": "nvidia/nemotron-3-nano-30b-a3b"
|
|
42022
42318
|
},
|
|
@@ -42158,6 +42454,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
42158
42454
|
"qwen3-7-plus": {
|
|
42159
42455
|
"vercel": "alibaba/qwen3.7-plus"
|
|
42160
42456
|
},
|
|
42457
|
+
"qwen3-8-max": {
|
|
42458
|
+
"vercel": "alibaba/qwen3.8-max"
|
|
42459
|
+
},
|
|
42161
42460
|
"qwen3-coder": {
|
|
42162
42461
|
"vercel": "alibaba/qwen3-coder"
|
|
42163
42462
|
},
|
|
@@ -42246,6 +42545,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
42246
42545
|
"qwen3.7-plus": {
|
|
42247
42546
|
"vercel": "alibaba/qwen3.7-plus"
|
|
42248
42547
|
},
|
|
42548
|
+
"qwen3.8-max": {
|
|
42549
|
+
"vercel": "alibaba/qwen3.8-max"
|
|
42550
|
+
},
|
|
42249
42551
|
"rerank-v3-5": {
|
|
42250
42552
|
"vercel": "cohere/rerank-v3.5"
|
|
42251
42553
|
},
|
|
@@ -42306,6 +42608,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
42306
42608
|
"thinkingmachines/Inkling": {
|
|
42307
42609
|
"togetherai": "togetherai/thinkingmachines/Inkling"
|
|
42308
42610
|
},
|
|
42611
|
+
"transcribe-1": {
|
|
42612
|
+
"vercel": "fish-audio/transcribe-1"
|
|
42613
|
+
},
|
|
42309
42614
|
"trinity-large": {
|
|
42310
42615
|
"vercel": "arcee-ai/trinity-large-thinking"
|
|
42311
42616
|
},
|
|
@@ -45657,7 +45962,10 @@ var DispatchRequestSchema = external_exports.union([
|
|
|
45657
45962
|
var RunFlowOptionsSchema = external_exports.object({
|
|
45658
45963
|
recordId: external_exports.string().optional(),
|
|
45659
45964
|
modelOverride: external_exports.string().optional(),
|
|
45660
|
-
variables: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
45965
|
+
variables: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
45966
|
+
// Opt into making hidden context steps visible in the buffered response and
|
|
45967
|
+
// counted in the terminal counters. /v1/dispatch honors the same field.
|
|
45968
|
+
debugMode: external_exports.boolean().optional()
|
|
45661
45969
|
});
|
|
45662
45970
|
var RuntimeProxyMessageContentSchema = external_exports.union([
|
|
45663
45971
|
external_exports.string(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtypelabs/cli",
|
|
3
|
-
"version": "2.33.
|
|
3
|
+
"version": "2.33.7",
|
|
4
4
|
"description": "Command-line interface for Runtype AI platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"rosie-skills": "0.8.1",
|
|
28
28
|
"yaml": "^2.9.0",
|
|
29
29
|
"@runtypelabs/ink-components": "0.3.6",
|
|
30
|
-
"@runtypelabs/sdk": "7.
|
|
30
|
+
"@runtypelabs/sdk": "7.2.0",
|
|
31
31
|
"@runtypelabs/terminal-animations": "0.2.3"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"tsx": "^4.7.1",
|
|
44
44
|
"typescript": "^6.0.3",
|
|
45
45
|
"vitest": "^4.1.0",
|
|
46
|
-
"@runtypelabs/shared": "3.
|
|
46
|
+
"@runtypelabs/shared": "3.21.0"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=22.12.0"
|