@runtypelabs/cli 2.33.4 → 2.33.6

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 +273 -45
  2. package/package.json +4 -4
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-MATCHJ7V.mjs
33173
+ // ../shared/dist/chunk-ENAGUPHC.mjs
33174
33174
  function getNestedValue(obj, path20) {
33175
33175
  let normalizedPath = path20;
33176
33176
  normalizedPath = normalizedPath.replace(/^\$\.?/, "");
@@ -33227,6 +33227,15 @@ var SYSTEM_VARIABLES = /* @__PURE__ */ new Set([
33227
33227
  // it as undeclared and the executors don't report it as "unresolved" before
33228
33228
  // injection runs.
33229
33229
  "_tools",
33230
+ // Multi-tenancy identity vars. `createContextVariables` populates both
33231
+ // spread-conditionally (`_endUser` for the individual human, `_tenant` for the
33232
+ // customer org between `_user` and `_endUser`), and the dispatch schema
33233
+ // documents them — but they were missing here, so `{{_endUser.email}}` /
33234
+ // `{{_tenant.id}}` validated as UNDECLARED_VARIABLE_REFERENCE with a
33235
+ // remediation ("declare it as a flow input") that is impossible: the `inputs`
33236
+ // schema rejects keys starting with `_`.
33237
+ "_endUser",
33238
+ "_tenant",
33230
33239
  ...MESSAGE_VARIABLES
33231
33240
  ]);
33232
33241
  var SECRET_REF_PATTERN = /\{\{secret:([A-Z][A-Z0-9_]*[A-Z0-9])\}\}/g;
@@ -33561,7 +33570,7 @@ function resolveFallback(parsed, context, tracking, options = {}) {
33561
33570
  }
33562
33571
  var templateEngine = new SimpleTemplateEngine();
33563
33572
 
33564
- // ../shared/dist/chunk-DRH45QS6.mjs
33573
+ // ../shared/dist/chunk-YF37CWRH.mjs
33565
33574
  var jsonPatchOperationSchema = external_exports.object({
33566
33575
  op: external_exports.enum(["add", "remove", "replace", "move", "copy", "test"]),
33567
33576
  /** JSON Pointer (RFC 6901) into the state document. `''` addresses the root. */
@@ -33652,6 +33661,12 @@ var unifiedExecutionCompleteEventSchema = external_exports.object({
33652
33661
  totalSteps: external_exports.number().optional(),
33653
33662
  successfulSteps: external_exports.number().optional(),
33654
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(),
33655
33670
  // Inline Claude Managed create dispatches return the reusable Anthropic
33656
33671
  // agent id on the terminal frame so callers can connect on a later turn.
33657
33672
  claudeManagedAgentId: external_exports.string().optional(),
@@ -34012,9 +34027,16 @@ var unifiedAwaitEventSchema = external_exports.object({
34012
34027
  awaitedAt: external_exports.string().optional(),
34013
34028
  origin: external_exports.enum(["webmcp", "sdk"]).optional(),
34014
34029
  pageOrigin: external_exports.string().optional(),
34015
- // Present when `awaitReason === 'mcp_elicitation'`: a user-configured MCP
34016
- // 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.
34017
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(),
34018
34040
  // Discriminates an AUTO-RESUMING durable pause (`crawl_pending` /
34019
34041
  // `durable_poll`, resumed server-side by the crawl / wait-until Workflow;
34020
34042
  // `detached`, a Claude Managed watch-budget detach — the stream ends but
@@ -34024,7 +34046,8 @@ var unifiedAwaitEventSchema = external_exports.object({
34024
34046
  // render a "resume" prompt for a pause that resumes itself. Mirrors the
34025
34047
  // JSON `pausedReason` discriminator (execution-pipeline.ts); the
34026
34048
  // server-resumed pauses carry `crawlId` / `stepId` instead of the tool
34027
- // 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.
34028
34051
  awaitReason: external_exports.string().optional(),
34029
34052
  crawlId: external_exports.string().optional(),
34030
34053
  stepId: external_exports.string().optional()
@@ -35531,6 +35554,11 @@ var recordFilterSchema = external_exports.object({
35531
35554
  type: external_exports.string().min(1).max(255),
35532
35555
  where: external_exports.union([recordFilterConditionSchema, recordFilterGroupSchema]).optional()
35533
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" });
35534
35562
  var contextFallbackSchema = external_exports.union([
35535
35563
  external_exports.object({ type: external_exports.literal("retry"), delay: external_exports.number().optional() }),
35536
35564
  external_exports.object({
@@ -39284,6 +39312,149 @@ function validateListRecordsArrayAccess(flowSteps, buckets) {
39284
39312
  }
39285
39313
  }
39286
39314
  }
39315
+ var FETCH_CLASS_SWALLOWING_FEED_CODE = "FETCH_CLASS_SWALLOWING_FEED";
39316
+ var FETCH_CLASS_SWALLOWING_STEP_TYPES = /* @__PURE__ */ new Set(["fetch-url", "api-call", "crawl", "search"]);
39317
+ function errorHandlingIsUnset(errorHandling) {
39318
+ if (errorHandling === void 0 || errorHandling === null) return true;
39319
+ return isObjectRecord(errorHandling) && !errorHandling.onError;
39320
+ }
39321
+ var MAX_TEMPLATE_INTERPOLATION_SCAN_DEPTH = 16;
39322
+ function stripNonCodeScriptText(script, interpolationDepth = 0) {
39323
+ let out = "";
39324
+ let i = 0;
39325
+ while (i < script.length) {
39326
+ const ch = script[i];
39327
+ const next = script[i + 1];
39328
+ if (ch === "/" && next === "/") {
39329
+ while (i < script.length && script[i] !== "\n") i++;
39330
+ continue;
39331
+ }
39332
+ if (ch === "/" && next === "*") {
39333
+ i += 2;
39334
+ while (i < script.length && !(script[i] === "*" && script[i + 1] === "/")) i++;
39335
+ i += 2;
39336
+ continue;
39337
+ }
39338
+ if (ch === "'" || ch === '"') {
39339
+ const quote = ch;
39340
+ i++;
39341
+ while (i < script.length && script[i] !== quote) {
39342
+ i += script[i] === "\\" ? 2 : 1;
39343
+ }
39344
+ i++;
39345
+ out += " ";
39346
+ continue;
39347
+ }
39348
+ if (ch === "`") {
39349
+ i++;
39350
+ while (i < script.length && script[i] !== "`") {
39351
+ if (script[i] === "\\") {
39352
+ i += 2;
39353
+ continue;
39354
+ }
39355
+ if (script[i] === "$" && script[i + 1] === "{") {
39356
+ i += 2;
39357
+ const start = i;
39358
+ let depth = 1;
39359
+ while (i < script.length && depth > 0) {
39360
+ if (script[i] === "{") depth++;
39361
+ else if (script[i] === "}") {
39362
+ depth--;
39363
+ if (depth === 0) break;
39364
+ }
39365
+ i++;
39366
+ }
39367
+ out += interpolationDepth < MAX_TEMPLATE_INTERPOLATION_SCAN_DEPTH ? ` ${stripNonCodeScriptText(script.slice(start, i), interpolationDepth + 1)} ` : " ";
39368
+ i++;
39369
+ continue;
39370
+ }
39371
+ i++;
39372
+ }
39373
+ i++;
39374
+ out += " ";
39375
+ continue;
39376
+ }
39377
+ out += ch;
39378
+ i++;
39379
+ }
39380
+ return out;
39381
+ }
39382
+ function validateFetchClassSwallowingFeed(flowSteps, buckets) {
39383
+ const swallowingFetchOutputs = /* @__PURE__ */ new Map();
39384
+ const consumerPath = (step, stepIndex) => step.type === "upsert-record" ? `flowSteps[${stepIndex}].config.sourceVariable` : `flowSteps[${stepIndex}].config.script`;
39385
+ const findConsumedOrigin = (step, config3) => {
39386
+ if (step.type === "upsert-record") {
39387
+ const inputMode = typeof config3.inputMode === "string" ? config3.inputMode : "single";
39388
+ const sourceVariable = typeof config3.sourceVariable === "string" ? config3.sourceVariable : "";
39389
+ if (inputMode === "batch" || !sourceVariable) return null;
39390
+ const origin = swallowingFetchOutputs.get(sourceVariable);
39391
+ return origin ? { outputVariable: sourceVariable, origin } : null;
39392
+ }
39393
+ if (step.type === "transform-data") {
39394
+ const script = typeof config3.script === "string" ? config3.script : "";
39395
+ if (!script) return null;
39396
+ const inputMode = config3.inputMode === "variable" ? "variable" : "code";
39397
+ if (inputMode === "variable") {
39398
+ for (const { variable } of extractVariableReferences(config3)) {
39399
+ const classification = classifyVariableReference(variable);
39400
+ if (classification.namespace !== "plain" && classification.namespace !== "flow") continue;
39401
+ const root = classification.baseName.split(".")[0] || "";
39402
+ const origin = swallowingFetchOutputs.get(root);
39403
+ if (origin) return { outputVariable: root, origin };
39404
+ }
39405
+ return null;
39406
+ }
39407
+ if (swallowingFetchOutputs.size === 0) return null;
39408
+ const codeText = stripNonCodeScriptText(script);
39409
+ for (const [fetchVar, origin] of swallowingFetchOutputs) {
39410
+ const escaped = fetchVar.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
39411
+ if (new RegExp(`(?<![.$\\w])${escaped}(?![$\\w])`).test(codeText)) {
39412
+ return { outputVariable: fetchVar, origin };
39413
+ }
39414
+ }
39415
+ return null;
39416
+ }
39417
+ return null;
39418
+ };
39419
+ for (const [stepIndex, step] of flowSteps.entries()) {
39420
+ if (step.enabled === false) continue;
39421
+ if (!isObjectRecord(step.config)) continue;
39422
+ const config3 = step.config;
39423
+ if (step.type === "upsert-record" || step.type === "transform-data") {
39424
+ const consumed = findConsumedOrigin(step, config3);
39425
+ if (consumed) {
39426
+ addIssue(
39427
+ "warning",
39428
+ {
39429
+ code: FETCH_CLASS_SWALLOWING_FEED_CODE,
39430
+ 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.`,
39431
+ path: consumerPath(step, stepIndex),
39432
+ step: { index: stepIndex, name: step.name, type: step.type },
39433
+ details: {
39434
+ fetchStepIndex: consumed.origin.index,
39435
+ fetchStepName: consumed.origin.name,
39436
+ fetchStepType: consumed.origin.type,
39437
+ outputVariable: consumed.outputVariable
39438
+ }
39439
+ },
39440
+ buckets
39441
+ );
39442
+ }
39443
+ }
39444
+ const outputVar = getStepOutputVariable(step);
39445
+ if (outputVar) {
39446
+ if (FETCH_CLASS_SWALLOWING_STEP_TYPES.has(step.type) && errorHandlingIsUnset(config3.errorHandling)) {
39447
+ swallowingFetchOutputs.set(outputVar, {
39448
+ index: stepIndex,
39449
+ name: step.name,
39450
+ type: step.type
39451
+ });
39452
+ } else {
39453
+ swallowingFetchOutputs.delete(outputVar);
39454
+ }
39455
+ }
39456
+ }
39457
+ }
39287
39458
  function validateDeprecatedStepTypes(flowSteps, buckets) {
39288
39459
  for (const [stepIndex, step] of flowSteps.entries()) {
39289
39460
  if (step.type !== "retrieve-record") continue;
@@ -39888,6 +40059,7 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
39888
40059
  validateConditionExpressions(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
39889
40060
  validateToolCallStrategyMultiStep(flowData.flowSteps, buckets);
39890
40061
  validateListRecordsArrayAccess(flowData.flowSteps, buckets);
40062
+ validateFetchClassSwallowingFeed(flowData.flowSteps, buckets);
39891
40063
  validateWaitUntilPollBudget(flowData.flowSteps, buckets);
39892
40064
  validateDeprecatedStepTypes(flowData.flowSteps, buckets);
39893
40065
  validatePromptSystemPromptVolatility(flowData.flowSteps, buckets);
@@ -40092,11 +40264,16 @@ var PROVIDER_SECRET_SPECS = [
40092
40264
  },
40093
40265
  {
40094
40266
  providerId: "mixlayer",
40095
- // Matches open-weight models Mixlayer hosts (Qwen 3.5 family, Kimi) plus
40096
- // explicit prefixes. Does NOT match closed Alibaba models (qwen3.5-flash/plus)
40097
- // which route through Vercel Gateway. See mixlayer-executor.ts for the
40098
- // canonical predicate mirrored here.
40099
- 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),
40267
+ // Matches open-weight models Mixlayer hosts (Qwen 3.5 family, Kimi, GLM)
40268
+ // plus explicit prefixes. Does NOT match closed Alibaba models
40269
+ // (qwen3.5-flash/plus) which route through Vercel Gateway. See
40270
+ // mixlayer-executor.ts for the canonical predicate mirrored here.
40271
+ //
40272
+ // `z-ai/` is Mixlayer's vendor namespace for Zhipu's GLM listings
40273
+ // (`z-ai/glm-5.2`). It is NOT the Vercel Gateway spelling of the same
40274
+ // model, which is `zai/glm-5.2` (no hyphen) and must keep routing to the
40275
+ // gateway — hence the exact `z-ai/` prefix rather than a looser match.
40276
+ 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),
40100
40277
  secretNames: ["MIXLAYER_API_KEY"]
40101
40278
  },
40102
40279
  {
@@ -40384,14 +40561,16 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
40384
40561
  // flow lane to legacy for the common case — the opposite of runtime-primary.
40385
40562
  // The runtime lane already carries Layer-1 resilience natively
40386
40563
  // (`withModelCallResilience`: TTFT + idle watchdog + bounded same-model
40387
- // retry — packages/runtime prompt-executor.ts), so the residual delta is
40388
- // narrow: on a retryable platform-key failure that survives Layer 1 with no
40389
- // partial output, the runtime surfaces the step error where legacy would
40390
- // additionally swap upstream/model. That is an availability nicety, not a
40391
- // semantic difference — and unlike the folds above it cannot silently
40392
- // produce a WRONG result. `hasImplicitPlatformFallbackCandidate` is still
40393
- // computed for decision attribution. Rollback lever: flip this bit to `true`
40394
- // (plus its test) to restore the fold.
40564
+ // retry — packages/runtime prompt-executor.ts), and since the fallback-chain
40565
+ // port it ALSO synthesizes the implicit chain itself: on a retryable
40566
+ // platform-key failure that survives Layer 1 with no partial output, the
40567
+ // runtime flow engine runs the SAME shared gate and chain builder as legacy
40568
+ // (`shouldSynthesizePlatformDefaultFallback` / `getPlatformDefaultStallFallback`,
40569
+ // applied in packages/runtime flow-engine.ts) and swaps upstream/model too —
40570
+ // so the residual delta the original rationale described is closed.
40571
+ // `hasImplicitPlatformFallbackCandidate` is still computed for decision
40572
+ // attribution. Rollback lever: flip this bit to `true` (plus its test) to
40573
+ // restore the fold.
40395
40574
  implicitPlatformFallback: false,
40396
40575
  // §A1 parity-audit BRIDGE fold: a prompt step's `toolIds` carrying a
40397
40576
  // reference class the runtime lane can neither materialize at export nor
@@ -40405,7 +40584,7 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
40405
40584
  }
40406
40585
  };
40407
40586
  var DURABLE_HOSTED_STEP_TYPES = /* @__PURE__ */ new Set(["wait-until", "crawl"]);
40408
- var API_DURABLE_RESUME_CAPABILITY_MATRIX = {
40587
+ var API_DURABLE_HOSTED_CAPABILITY_MATRIX = {
40409
40588
  ...API_INPROCESS_CAPABILITY_MATRIX,
40410
40589
  unsupportedStepTypes: API_INPROCESS_CAPABILITY_MATRIX.unsupportedStepTypes.filter(
40411
40590
  (stepType) => !DURABLE_HOSTED_STEP_TYPES.has(stepType)
@@ -40440,11 +40619,17 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
40440
40619
  "wait-until",
40441
40620
  "crawl",
40442
40621
  // ── Hosted-service / DB-backed record & email steps (BYOC §7.2). A
40443
- // self-contained container has no hosted RecordStore / EmailSender; the
40444
- // Hosted endpoints are PROPOSED, not built, and S0 shows send-email /
40445
- // record steps fail in BOTH default and wired configs (no Bundled mode).
40446
- // Graduation lever: build the Hosted endpoints OR ship a Bundled
40447
- // RecordStore/EmailSender in the standard export — then remove.
40622
+ // self-contained container has no hosted RecordStore / EmailSender, and S0
40623
+ // shows send-email / record steps fail in BOTH default and wired configs
40624
+ // (no Bundled mode). The Hosted ENDPOINTS themselves are now built and
40625
+ // mounted (`/v1/runtime/email`, `/v1/runtime/records`, `/v1/runtime/search`)
40626
+ // and the runtime ships `HostedEmailSender` against them — so that half of
40627
+ // the original graduation lever is met. What is still missing is the
40628
+ // fulfillment: the standard export wires no EmailSender / RecordStore (the
40629
+ // runtime falls back to its NoOp sender), and a Hosted client needs a
40630
+ // customer-supplied Runtype API key an export does not carry. Graduation
40631
+ // lever: wire a Hosted or Bundled RecordStore/EmailSender into the standard
40632
+ // export — then remove.
40448
40633
  "send-email",
40449
40634
  "upsert-record",
40450
40635
  "update-record",
@@ -41186,13 +41371,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41186
41371
  "claude-opus-4": {
41187
41372
  "vercel": "anthropic/claude-opus-4"
41188
41373
  },
41189
- "claude-opus-4-1": {
41190
- "anthropic": "claude-opus-4-1-20250805",
41191
- "vercel": "anthropic/claude-opus-4.1"
41192
- },
41193
- "claude-opus-4-1-20250805": {
41194
- "anthropic": "claude-opus-4-1-20250805"
41195
- },
41196
41374
  "claude-opus-4-5": {
41197
41375
  "anthropic": "claude-opus-4-5-20251101",
41198
41376
  "vercel": "anthropic/claude-opus-4.5"
@@ -41215,9 +41393,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41215
41393
  "claude-opus-4-8-fast": {
41216
41394
  "vercel": "anthropic/claude-opus-4.8-fast"
41217
41395
  },
41218
- "claude-opus-4.1": {
41219
- "vercel": "anthropic/claude-opus-4.1"
41220
- },
41221
41396
  "claude-opus-4.5": {
41222
41397
  "vercel": "anthropic/claude-opus-4.5"
41223
41398
  },
@@ -41282,6 +41457,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41282
41457
  "deepcogito/cogito-v2-1-671b": {
41283
41458
  "togetherai": "togetherai/deepcogito/cogito-v2-1-671b"
41284
41459
  },
41460
+ "deepseek-ai/DeepSeek-V4-Flash-0731": {
41461
+ "togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Flash-0731"
41462
+ },
41285
41463
  "deepseek-ai/DeepSeek-V4-Pro": {
41286
41464
  "togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Pro"
41287
41465
  },
@@ -41289,6 +41467,7 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41289
41467
  "vercel": "deepseek/deepseek-v4-flash"
41290
41468
  },
41291
41469
  "deepseek-v4-flash-0731": {
41470
+ "togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Flash-0731",
41292
41471
  "vercel": "deepseek/deepseek-v4-flash-0731"
41293
41472
  },
41294
41473
  "deepseek-v4-pro": {
@@ -41812,8 +41991,7 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41812
41991
  "vercel": "moonshotai/kimi-k2-thinking"
41813
41992
  },
41814
41993
  "kimi-k2-5": {
41815
- "togetherai": "togetherai/moonshotai/Kimi-K2.5",
41816
- "vercel": "moonshotai/kimi-k2.5"
41994
+ "togetherai": "togetherai/moonshotai/Kimi-K2.5"
41817
41995
  },
41818
41996
  "kimi-k2-6": {
41819
41997
  "togetherai": "togetherai/moonshotai/Kimi-K2.6",
@@ -41829,9 +42007,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41829
42007
  "kimi-k2-thinking": {
41830
42008
  "vercel": "moonshotai/kimi-k2-thinking"
41831
42009
  },
41832
- "kimi-k2.5": {
41833
- "vercel": "moonshotai/kimi-k2.5"
41834
- },
41835
42010
  "kimi-k2.6": {
41836
42011
  "vercel": "moonshotai/kimi-k2.6"
41837
42012
  },
@@ -41863,11 +42038,17 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41863
42038
  "lfm2-24b-a2b": {
41864
42039
  "togetherai": "togetherai/LiquidAI/LFM2-24B-A2B"
41865
42040
  },
41866
- "ling-3-0-flash-free": {
41867
- "vercel": "inclusionai/ling-3.0-flash-free"
42041
+ "ling-3-0-flash": {
42042
+ "vercel": "inclusionai/ling-3.0-flash"
41868
42043
  },
41869
- "ling-3.0-flash-free": {
41870
- "vercel": "inclusionai/ling-3.0-flash-free"
42044
+ "ling-3-0-tiny-free": {
42045
+ "vercel": "inclusionai/ling-3.0-tiny-free"
42046
+ },
42047
+ "ling-3.0-flash": {
42048
+ "vercel": "inclusionai/ling-3.0-flash"
42049
+ },
42050
+ "ling-3.0-tiny-free": {
42051
+ "vercel": "inclusionai/ling-3.0-tiny-free"
41871
42052
  },
41872
42053
  "LiquidAI/LFM2-24B-A2B": {
41873
42054
  "togetherai": "togetherai/LiquidAI/LFM2-24B-A2B"
@@ -41994,12 +42175,30 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41994
42175
  "morph-v3-large": {
41995
42176
  "vercel": "morph/morph-v3-large"
41996
42177
  },
42178
+ "muse-glimmer-30b": {
42179
+ "vercel": "meta/muse-glimmer-30b"
42180
+ },
41997
42181
  "muse-spark-1-1": {
41998
42182
  "vercel": "meta/muse-spark-1.1"
41999
42183
  },
42184
+ "muse-spark-1-2": {
42185
+ "vercel": "meta/muse-spark-1.2"
42186
+ },
42187
+ "muse-spark-1-2-contributor": {
42188
+ "vercel": "meta/muse-spark-1.2-contributor"
42189
+ },
42000
42190
  "muse-spark-1.1": {
42001
42191
  "vercel": "meta/muse-spark-1.1"
42002
42192
  },
42193
+ "muse-spark-1.2": {
42194
+ "vercel": "meta/muse-spark-1.2"
42195
+ },
42196
+ "muse-spark-1.2-contributor": {
42197
+ "vercel": "meta/muse-spark-1.2-contributor"
42198
+ },
42199
+ "namazu": {
42200
+ "vercel": "sakana/namazu"
42201
+ },
42003
42202
  "nemotron-3-nano-30b-a3b": {
42004
42203
  "vercel": "nvidia/nemotron-3-nano-30b-a3b"
42005
42204
  },
@@ -42141,6 +42340,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
42141
42340
  "qwen3-7-plus": {
42142
42341
  "vercel": "alibaba/qwen3.7-plus"
42143
42342
  },
42343
+ "qwen3-8-max": {
42344
+ "vercel": "alibaba/qwen3.8-max"
42345
+ },
42144
42346
  "qwen3-coder": {
42145
42347
  "vercel": "alibaba/qwen3-coder"
42146
42348
  },
@@ -42229,6 +42431,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
42229
42431
  "qwen3.7-plus": {
42230
42432
  "vercel": "alibaba/qwen3.7-plus"
42231
42433
  },
42434
+ "qwen3.8-max": {
42435
+ "vercel": "alibaba/qwen3.8-max"
42436
+ },
42232
42437
  "rerank-v3-5": {
42233
42438
  "vercel": "cohere/rerank-v3.5"
42234
42439
  },
@@ -42289,6 +42494,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
42289
42494
  "thinkingmachines/Inkling": {
42290
42495
  "togetherai": "togetherai/thinkingmachines/Inkling"
42291
42496
  },
42497
+ "transcribe-1": {
42498
+ "vercel": "fish-audio/transcribe-1"
42499
+ },
42292
42500
  "trinity-large": {
42293
42501
  "vercel": "arcee-ai/trinity-large-thinking"
42294
42502
  },
@@ -45087,10 +45295,27 @@ var credentialProxyConfigSchema = external_exports.object({
45087
45295
  });
45088
45296
  var LOCAL_INFERENCE_PROTOCOL_VERSION = 1;
45089
45297
  var LocalInferenceSurfaceSchema = external_exports.enum(["playground", "flows", "agents"]);
45298
+ var LocalModelCapabilitiesSchema = external_exports.object({
45299
+ streaming: external_exports.boolean(),
45300
+ structuredOutput: external_exports.enum(["none", "json", "json_schema"]),
45301
+ tools: external_exports.enum(["none", "single", "parallel"]),
45302
+ vision: external_exports.boolean(),
45303
+ maxContextTokens: external_exports.number().int().positive().optional(),
45304
+ maxOutputTokens: external_exports.number().int().positive().optional(),
45305
+ supportedSampling: external_exports.array(external_exports.enum(["temperature", "top_p", "seed"])).optional()
45306
+ });
45307
+ var LocalInferenceModelSnapshotSchema = external_exports.object({
45308
+ backend: external_exports.literal("ollama"),
45309
+ model: external_exports.string().trim().min(1).max(256),
45310
+ capabilities: LocalModelCapabilitiesSchema,
45311
+ capabilityRevision: external_exports.string().regex(/^sha256:[0-9a-f]{64}$/)
45312
+ });
45090
45313
  var LocalInferenceSelectionSchema = external_exports.object({
45091
45314
  sessionId: external_exports.string().uuid(),
45092
45315
  model: external_exports.string().trim().min(1).max(256),
45093
45316
  backend: external_exports.literal("ollama"),
45317
+ /** Optional only for protocol-v1 dashboards during the rolling upgrade. */
45318
+ capabilityRevision: external_exports.string().regex(/^sha256:[0-9a-f]{64}$/).optional(),
45094
45319
  /**
45095
45320
  * Dashboard surface that created the session. Optional during the rolling
45096
45321
  * upgrade from protocol v1 clients; new clients always send it.
@@ -45623,7 +45848,10 @@ var DispatchRequestSchema = external_exports.union([
45623
45848
  var RunFlowOptionsSchema = external_exports.object({
45624
45849
  recordId: external_exports.string().optional(),
45625
45850
  modelOverride: external_exports.string().optional(),
45626
- variables: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
45851
+ variables: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
45852
+ // Opt into making hidden context steps visible in the buffered response and
45853
+ // counted in the terminal counters. /v1/dispatch honors the same field.
45854
+ debugMode: external_exports.boolean().optional()
45627
45855
  });
45628
45856
  var RuntimeProxyMessageContentSchema = external_exports.union([
45629
45857
  external_exports.string(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "2.33.4",
3
+ "version": "2.33.6",
4
4
  "description": "Command-line interface for Runtype AI platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,9 +26,9 @@
26
26
  "react": "^19.2.8",
27
27
  "rosie-skills": "0.8.1",
28
28
  "yaml": "^2.9.0",
29
- "@runtypelabs/sdk": "6.6.3",
29
+ "@runtypelabs/ink-components": "0.3.6",
30
30
  "@runtypelabs/terminal-animations": "0.2.3",
31
- "@runtypelabs/ink-components": "0.3.6"
31
+ "@runtypelabs/sdk": "7.1.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@modelcontextprotocol/server": "2.0.0",
@@ -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.18.0"
46
+ "@runtypelabs/shared": "3.20.0"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=22.12.0"