@runtypelabs/cli 2.33.6 → 2.33.8

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 +132 -18
  2. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -15351,7 +15351,7 @@ var recordCollectionSchemaSchema = external_exports.strictObject({
15351
15351
  additionalProperties: external_exports.boolean().optional()
15352
15352
  }).superRefine((schema, ctx) => addSemanticIssues(schema, ctx));
15353
15353
 
15354
- // ../shared/dist/chunk-M7MDPQ5F.mjs
15354
+ // ../shared/dist/chunk-4QUV4KXF.mjs
15355
15355
  var MCPServerCategory = {
15356
15356
  COMMUNICATION: "communication",
15357
15357
  PRODUCTIVITY: "productivity",
@@ -15771,7 +15771,7 @@ var SURFACE_TYPE_METADATA = {
15771
15771
  interactiveUI: "forms",
15772
15772
  inboundMediaSupport: true,
15773
15773
  consumerType: "human",
15774
- approvalAnswerable: false,
15774
+ approvalAnswerable: true,
15775
15775
  reasoningVisibility: "always_strip",
15776
15776
  markdownDialect: "mrkdwn",
15777
15777
  threadModel: "threaded",
@@ -15926,7 +15926,7 @@ var SURFACE_TYPE_METADATA = {
15926
15926
  interactiveUI: "buttons",
15927
15927
  inboundMediaSupport: true,
15928
15928
  consumerType: "human",
15929
- approvalAnswerable: false,
15929
+ approvalAnswerable: true,
15930
15930
  reasoningVisibility: "always_strip",
15931
15931
  markdownDialect: "html",
15932
15932
  threadModel: "flat",
@@ -15948,6 +15948,9 @@ var SURFACE_TYPE_METADATA = {
15948
15948
  interactiveUI: "none",
15949
15949
  inboundMediaSupport: false,
15950
15950
  consumerType: "human",
15951
+ // Generic/internal messaging has no concrete provider interaction on
15952
+ // which a human can answer. Slack and Telegram declare their own
15953
+ // attended status and Agent Loop-only advisory overlay separately.
15951
15954
  approvalAnswerable: false,
15952
15955
  reasoningVisibility: "always_strip",
15953
15956
  markdownDialect: "none",
@@ -38455,6 +38458,33 @@ function sanitizeCodeToolIdentifier(name) {
38455
38458
  if (/^[0-9]/.test(safe)) safe = "_" + safe;
38456
38459
  return safe;
38457
38460
  }
38461
+ var DEFAULT_SANDBOX_PROVIDER = "cloudflare-worker";
38462
+ var SANDBOX_PROVIDER_LANGUAGES = Object.assign(
38463
+ /* @__PURE__ */ Object.create(null),
38464
+ {
38465
+ quickjs: ["javascript"],
38466
+ "cloudflare-worker": ["javascript"],
38467
+ "runtype-sandbox": ["javascript", "typescript", "python"],
38468
+ "cloudflare-sandbox": ["javascript", "typescript", "python"],
38469
+ daytona: ["javascript", "typescript", "python"]
38470
+ }
38471
+ );
38472
+ function resolveSandboxProvider(provider) {
38473
+ return typeof provider === "string" ? provider : DEFAULT_SANDBOX_PROVIDER;
38474
+ }
38475
+ function lookupLanguages(provider) {
38476
+ const resolved = resolveSandboxProvider(provider);
38477
+ if (!Object.prototype.hasOwnProperty.call(SANDBOX_PROVIDER_LANGUAGES, resolved)) return void 0;
38478
+ const languages = SANDBOX_PROVIDER_LANGUAGES[resolved];
38479
+ return Array.isArray(languages) ? languages : void 0;
38480
+ }
38481
+ function isJsOnlySandboxProvider(provider) {
38482
+ const languages = lookupLanguages(provider);
38483
+ return languages !== void 0 && languages.length === 1 && languages[0] === "javascript";
38484
+ }
38485
+ function supportsCodeModeToolPool(provider) {
38486
+ return resolveSandboxProvider(provider) === "cloudflare-worker";
38487
+ }
38458
38488
  function snakeToCamel(str) {
38459
38489
  return str.replace(/_([a-z])/g, (_2, letter) => letter.toUpperCase());
38460
38490
  }
@@ -38569,6 +38599,42 @@ function validateSandboxNetworkAccess(config3, stepIndex, stepRef, buckets) {
38569
38599
  buckets
38570
38600
  );
38571
38601
  }
38602
+ function validateTransformLanguageProviderPair(config3, stepIndex, stepRef, buckets) {
38603
+ const language = typeof config3.language === "string" ? config3.language : void 0;
38604
+ if (!language || language === "javascript") return;
38605
+ const provider = resolveSandboxProvider(config3.sandboxProvider);
38606
+ if (!isJsOnlySandboxProvider(provider)) return;
38607
+ addIssue(
38608
+ "warning",
38609
+ {
38610
+ code: "TRANSFORM_LANGUAGE_PROVIDER_MISMATCH",
38611
+ 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".`,
38612
+ path: `flowSteps[${stepIndex}].config.language`,
38613
+ step: stepRef,
38614
+ details: { language, sandboxProvider: provider }
38615
+ },
38616
+ buckets
38617
+ );
38618
+ }
38619
+ function validateTransformToolPoolProvider(config3, stepIndex, stepRef, buckets) {
38620
+ const tools = isObjectRecord(config3.tools) ? config3.tools : void 0;
38621
+ if (!tools) return;
38622
+ 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);
38623
+ if (poolSize === 0) return;
38624
+ const provider = resolveSandboxProvider(config3.sandboxProvider);
38625
+ if (supportsCodeModeToolPool(provider)) return;
38626
+ addIssue(
38627
+ "warning",
38628
+ {
38629
+ code: "TRANSFORM_POOL_TOOLS_ON_CONTAINER_PROVIDER",
38630
+ 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.`,
38631
+ path: `flowSteps[${stepIndex}].config.tools`,
38632
+ step: stepRef,
38633
+ details: { sandboxProvider: provider, poolSize }
38634
+ },
38635
+ buckets
38636
+ );
38637
+ }
38572
38638
  function validateCodeToolNameCollisions(toolNames, stepRef, code, preSeededCount = 0) {
38573
38639
  const seen = /* @__PURE__ */ new Map();
38574
38640
  for (const [i, tool] of toolNames.entries()) {
@@ -39997,6 +40063,8 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
39997
40063
  const sandboxProvider = config3.sandboxProvider || "cloudflare-worker";
39998
40064
  const resolvedProvider = sandboxProvider === "cloudflare-sandbox" ? "runtype-sandbox" : sandboxProvider;
39999
40065
  validateSandboxNetworkAccess(config3, stepIndex, stepRef, buckets);
40066
+ validateTransformLanguageProviderPair(config3, stepIndex, stepRef, buckets);
40067
+ validateTransformToolPoolProvider(config3, stepIndex, stepRef, buckets);
40000
40068
  if (resolvedProvider === "runtype-sandbox" && !config3.language) {
40001
40069
  addIssue(
40002
40070
  "warning",
@@ -40456,7 +40524,7 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
40456
40524
  // `vendored-export` (it rides the same host `CodeModeExecutor` seam as
40457
40525
  // `transformDataCodeModeTools`) — see {@link VENDORED_EXPORT_REFOLDS}.
40458
40526
  // Rollback lever: revert the bit to `true` (plus its test).
40459
- version: "2026-08-08.1",
40527
+ version: "2026-08-11.1",
40460
40528
  unsupportedStepTypes: ["wait-until", "crawl"],
40461
40529
  unsupportedFeatures: {
40462
40530
  approvalSteps: true,
@@ -40515,7 +40583,34 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
40515
40583
  // decision attribution but no longer folds.
40516
40584
  // Rollback lever: revert this bit to `true` (plus its test).
40517
40585
  transformDataMcpServers: false,
40518
- unsupportedTransformExecution: true,
40586
+ // SUPPORTED as of 2026-08-11 (#6521): `TransformSandboxRouter`
40587
+ // (`apps/api/src/lib/runtime/transform-sandbox-router.ts`) selects a
40588
+ // concrete executor per `execute()` call from the step's own
40589
+ // `sandboxProvider`, so a container-backed or Daytona `transform-data` step
40590
+ // now has a faithful runtime-lane execution. The api owns the router (it
40591
+ // holds the SANDBOX binding and the Daytona credentials), which is why the
40592
+ // `vendored-export` matrix RE-FOLDS this bit rather than inheriting the
40593
+ // graduation — see {@link VENDORED_EXPORT_REFOLDS}.
40594
+ //
40595
+ // The fold does NOT disappear: `transformDataHasUnsupportedExecution`
40596
+ // (`apps/api/src/lib/runtime/flow-eligibility-facts.ts`) narrowed to the
40597
+ // shapes the router still throws on — an unroutable provider, and a non-JS
40598
+ // `language` on a JS-only provider (which legacy runs as JavaScript
40599
+ // because it never forwards `language` to those branches). Both would
40600
+ // otherwise land as `success: true` with a null output, since
40601
+ // `transform-data` default-continues.
40602
+ //
40603
+ // Rollback lever: flip this bit back to `true` (plus its test). That
40604
+ // re-folds every container/Daytona transform to legacy without touching
40605
+ // the router or the narrowed predicate.
40606
+ unsupportedTransformExecution: false,
40607
+ // NOT graduated, and not graduating with its sibling: these are the shapes
40608
+ // the router THROWS on, which `transform-data`'s default-continue turns
40609
+ // into `success: true` + null rather than a visible failure. Keeping this
40610
+ // bit `true` is what stops the graduation above from being a silent data
40611
+ // bug for `python` + `cloudflare-worker` (which legacy runs as JavaScript
40612
+ // today). See {@link FlowEligibilityFacts.hasUnroutableTransformExecution}.
40613
+ unroutableTransformExecution: true,
40519
40614
  // #6023 leg 1 (2026-08-05): a custom runtime tool requesting code_mode / a
40520
40615
  // non-JS language / a container-backed sandbox provider has no runtime-lane
40521
40616
  // port — `runCustom` ignores all three and silently misexecutes as JS. Same
@@ -40609,7 +40704,7 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
40609
40704
  // Bumped 2026-08-08.1: `transformDataMcpServers` graduated on the base and
40610
40705
  // becomes the fourth documented re-fold here — the discovered tools still
40611
40706
  // need the host `CodeModeExecutor` to be bound as sandbox callables.
40612
- version: "2026-08-08.1",
40707
+ version: "2026-08-11.1",
40613
40708
  unsupportedStepTypes: [
40614
40709
  // ── Carried over from api-inprocess: durable-host-only step types. A
40615
40710
  // self-contained container has no durable host (BYOC §3.3 / S0 — the
@@ -40738,8 +40833,19 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
40738
40833
  // `CodeModeExecutor` seam as the sibling bit above — discovery itself is
40739
40834
  // portable, the BINDING is not. Same graduation lever.
40740
40835
  transformDataMcpServers: true,
40836
+ // VENDORED RE-FOLD (as of 2026-08-11, when the base graduated on #6521):
40837
+ // api-inprocess reaches container / Daytona `transform-data` execution
40838
+ // through `TransformSandboxRouter`, which needs the api's `SANDBOX` service
40839
+ // binding and api-resolved Daytona credentials. An export bundle has
40840
+ // neither, and `.claude/rules/runtime.md` forbids in-runtime dispatch
40841
+ // across providers, so the runtime's ONE wired executor would run the
40842
+ // step's container/Python source on whatever JS-only sandbox the export
40843
+ // carries. Graduation lever: a portable provider-routing fulfillment in the
40844
+ // standard export — then flip to false and drop from
40845
+ // {@link VENDORED_EXPORT_REFOLDS}.
40741
40846
  unsupportedTransformExecution: true,
40742
- // api-inprocess fold (G5); carried over.
40847
+ // Inherited from the base, which never graduates it.
40848
+ unroutableTransformExecution: true,
40743
40849
  customToolExecution: true,
40744
40850
  // api-inprocess fold (#6023 leg 1); carried over.
40745
40851
  // `promptMcpServers` inherits the base SUPPORTED (`false`). The runtime owns
@@ -41330,11 +41436,9 @@ var userProfileFeaturesSchema = external_exports.object({
41330
41436
  // ungated: they already require per-agent `config.voice.enabled` opt-in,
41331
41437
  // which production users can only set once this flag exposes the UI.
41332
41438
  enableVoice: external_exports.boolean(),
41333
- // Gates the workspace-model arms of the dashboard signup / switcher UI
41334
- // (docs/features/planning/2026-07-07-workspace-model-migration.md). Driven by
41335
- // the `enable-workspace-model` boolean flag (fail-closed in production until a
41336
- // rule enables it). When false the dashboard renders byte-identical to today
41337
- // (personal sentinel, personal/team chooser, personal Schematic identify).
41439
+ // Workspace model is permanently enabled post-migration — the API always
41440
+ // returns `true`. Kept on the wire (rather than dropped) for compatibility
41441
+ // with deployed SPA bundles and the published SDK that still read this field.
41338
41442
  enableWorkspaceModel: external_exports.boolean(),
41339
41443
  // Gates the End users subview in Settings → Usage. Driven by the
41340
41444
  // `enable-end-user-usage-analytics` Flagship rollout flag.
@@ -41344,12 +41448,11 @@ var userProfileFeaturesSchema = external_exports.object({
41344
41448
  // boolean flag (fail-closed in production until a rule enables it; non-prod
41345
41449
  // defaults on). The whole /v1/oauth-clients surface 404s when this is off.
41346
41450
  enableSelfServeOauthClients: external_exports.boolean(),
41347
- // Durable server-side workspace migration state. `workspaceModelReady`
41348
- // means the user's workspace pointer is set. `workspaceModelEligible` means
41349
- // the user belongs to the new-signup auto-provision cohort; when true while
41350
- // ready is false, provisioning is pending/retryable. These deliberately do
41351
- // not collapse into the raw rollout flag above, so flag rollback and
41352
- // already-migrated users remain distinguishable.
41451
+ // Durable server-side workspace migration state. `workspaceModelReady` means
41452
+ // the user's workspace pointer is set. `workspaceModelEligible` is a
41453
+ // compatibility constant that is always `true` now that the eligibility
41454
+ // marker column has been dropped. Both are kept on the wire for compatibility
41455
+ // with deployed SPA bundles and the published SDK.
41353
41456
  workspaceModelReady: external_exports.boolean(),
41354
41457
  workspaceModelEligible: external_exports.boolean()
41355
41458
  });
@@ -41474,6 +41577,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41474
41577
  "togetherai": "togetherai/deepseek-ai/DeepSeek-V4-Pro",
41475
41578
  "vercel": "deepseek/deepseek-v4-pro"
41476
41579
  },
41580
+ "deepseek-v4-pro-0813": {
41581
+ "vercel": "deepseek/deepseek-v4-pro-0813"
41582
+ },
41477
41583
  "devstral-2": {
41478
41584
  "vercel": "mistral/devstral-2"
41479
41585
  },
@@ -41901,6 +42007,10 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41901
42007
  "vercel": "xai/grok-4.5",
41902
42008
  "xai": "grok-4.5"
41903
42009
  },
42010
+ "grok-4-6": {
42011
+ "vercel": "xai/grok-4.6",
42012
+ "xai": "grok-4.6"
42013
+ },
41904
42014
  "grok-4.20-0309-non-reasoning": {
41905
42015
  "xai": "grok-4.20-0309-non-reasoning"
41906
42016
  },
@@ -41927,6 +42037,10 @@ var MODEL_FAMILY_PROVIDER_IDS = {
41927
42037
  "vercel": "xai/grok-4.5",
41928
42038
  "xai": "grok-4.5"
41929
42039
  },
42040
+ "grok-4.6": {
42041
+ "vercel": "xai/grok-4.6",
42042
+ "xai": "grok-4.6"
42043
+ },
41930
42044
  "grok-build-0-1": {
41931
42045
  "vercel": "xai/grok-build-0.1",
41932
42046
  "xai": "grok-build-0.1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "2.33.6",
3
+ "version": "2.33.8",
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": "7.2.1",
29
30
  "@runtypelabs/ink-components": "0.3.6",
30
- "@runtypelabs/terminal-animations": "0.2.3",
31
- "@runtypelabs/sdk": "7.1.0"
31
+ "@runtypelabs/terminal-animations": "0.2.3"
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.20.0"
46
+ "@runtypelabs/shared": "3.21.1"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=22.12.0"