@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.
Files changed (2) hide show
  1. package/dist/index.js +344 -36
  2. 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-ZS5WVN6Q.mjs
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-XCUZAGPM.mjs
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-DRH45QS6.mjs
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 `awaitReason === 'mcp_elicitation'`: a user-configured MCP
34025
- // server elicited input mid-tool-call. Server-controlled, display-only.
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. UX context; never a control signal.
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) plus
40105
- // explicit prefixes. Does NOT match closed Alibaba models (qwen3.5-flash/plus)
40106
- // which route through Vercel Gateway. See mixlayer-executor.ts for the
40107
- // canonical predicate mirrored here.
40108
- matches: (m2) => m2.startsWith("mixlayer/") || m2.startsWith("modelsocket/") || m2.startsWith("qwen/") || m2.startsWith("kimi-") || m2.includes("/kimi-") || /(?:^|\/)qwen3[.-]5-\d+b(?:-a\d+b)?$/i.test(m2),
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-08.1",
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
- unsupportedTransformExecution: true,
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 API_DURABLE_RESUME_CAPABILITY_MATRIX = {
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-08.1",
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
- // api-inprocess fold (G5); carried over.
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-free": {
41884
- "vercel": "inclusionai/ling-3.0-flash-free"
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-flash-free": {
41887
- "vercel": "inclusionai/ling-3.0-flash-free"
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.5",
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.0.0",
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.19.0"
46
+ "@runtypelabs/shared": "3.21.0"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=22.12.0"