@runtypelabs/cli 2.33.10 → 2.33.11

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 +170 -36
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -15130,7 +15130,7 @@ function date4(params) {
15130
15130
  // ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
15131
15131
  config(en_default());
15132
15132
 
15133
- // ../shared/dist/chunk-2I6N7MAS.mjs
15133
+ // ../shared/dist/chunk-KMIBIAMG.mjs
15134
15134
  var AGENT_EXECUTION_STATUSES = [
15135
15135
  "queued",
15136
15136
  "running",
@@ -15148,7 +15148,7 @@ var RUNTYPE_LEGACY_ATTRIBUTE_ALIASES = {
15148
15148
  [RUNTYPE_TURN_INDEX]: ["runtype.agent.turnIndex"]
15149
15149
  };
15150
15150
 
15151
- // ../shared/dist/chunk-ZVLLZDS7.mjs
15151
+ // ../shared/dist/chunk-BB6EPGHC.mjs
15152
15152
  var DEFAULT_BEDROCK_REGION = "us-east-1";
15153
15153
  var DEFAULT_VERTEX_LOCATION = "us-central1";
15154
15154
  var PROVIDER_SECRET_SPECS = [
@@ -16534,6 +16534,29 @@ var MANUAL_PROVIDER_MAP_OVERRIDES = {
16534
16534
  "mixlayer": "z-ai/glm-5.2",
16535
16535
  "vercel": "zai/glm-5.2"
16536
16536
  },
16537
+ // DeepSeek V4 Pro: Cloudflare only publishes the date-pinned build, so every
16538
+ // id form's Workers AI id carries the `-0813` suffix.
16539
+ //
16540
+ // The two bare families merge over a generated map that already supplies their
16541
+ // `vercel` id, so only the Workers AI id needs declaring. The two SLASH forms
16542
+ // have no generated entry at all, so their `vercel` id must be declared
16543
+ // explicitly: `getDefaultProviderMapping` would otherwise synthesize
16544
+ // `deepseek/deepseek/deepseek-v4-pro` (it prepends the inferred creator to the
16545
+ // whole id), sending the fallback rung to a listing that does not exist.
16546
+ "deepseek-v4-pro": {
16547
+ "workers-ai": "@cf/deepseek-ai/deepseek-v4-pro-0813"
16548
+ },
16549
+ "deepseek-v4-pro-0813": {
16550
+ "workers-ai": "@cf/deepseek-ai/deepseek-v4-pro-0813"
16551
+ },
16552
+ "deepseek/deepseek-v4-pro": {
16553
+ "workers-ai": "@cf/deepseek-ai/deepseek-v4-pro-0813",
16554
+ "vercel": "deepseek/deepseek-v4-pro"
16555
+ },
16556
+ "deepseek/deepseek-v4-pro-0813": {
16557
+ "workers-ai": "@cf/deepseek-ai/deepseek-v4-pro-0813",
16558
+ "vercel": "deepseek/deepseek-v4-pro-0813"
16559
+ },
16537
16560
  // MiniMax M2.7: Vercel's gateway-form id.
16538
16561
  "minimax-m2.7": {
16539
16562
  "vercel": "minimax/minimax-m2.7"
@@ -35366,7 +35389,7 @@ function resolveFallback(parsed, context, tracking, options = {}) {
35366
35389
  }
35367
35390
  var templateEngine = new SimpleTemplateEngine();
35368
35391
 
35369
- // ../shared/dist/chunk-XKOLWBNC.mjs
35392
+ // ../shared/dist/chunk-K74FEBL5.mjs
35370
35393
  var jsonPatchOperationSchema = external_exports.object({
35371
35394
  op: external_exports.enum(["add", "remove", "replace", "move", "copy", "test"]),
35372
35395
  /** JSON Pointer (RFC 6901) into the state document. `''` addresses the root. */
@@ -35627,7 +35650,9 @@ var unifiedMediaCompleteEventSchema = external_exports.object({
35627
35650
  });
35628
35651
  var unifiedArtifactStartEventSchema = external_exports.object({
35629
35652
  type: external_exports.literal("artifact_start"),
35630
- id: external_exports.string(),
35653
+ // Non-empty by contract: an id-less artifact frame cannot be correlated
35654
+ // or closed by a consumer (parity finding H24).
35655
+ id: external_exports.string().min(1),
35631
35656
  artifactType: external_exports.enum(["markdown", "component"]),
35632
35657
  title: external_exports.string().optional(),
35633
35658
  component: external_exports.string().optional(),
@@ -35643,14 +35668,18 @@ var unifiedArtifactStartEventSchema = external_exports.object({
35643
35668
  });
35644
35669
  var unifiedArtifactDeltaEventSchema = external_exports.object({
35645
35670
  type: external_exports.literal("artifact_delta"),
35646
- id: external_exports.string(),
35671
+ // Non-empty by contract: an id-less artifact frame cannot be correlated
35672
+ // or closed by a consumer (parity finding H24).
35673
+ id: external_exports.string().min(1),
35647
35674
  delta: external_exports.string(),
35648
35675
  executionId: external_exports.string().optional(),
35649
35676
  seq: external_exports.number().optional()
35650
35677
  });
35651
35678
  var unifiedArtifactUpdateEventSchema = external_exports.object({
35652
35679
  type: external_exports.literal("artifact_update"),
35653
- id: external_exports.string(),
35680
+ // Non-empty by contract: an id-less artifact frame cannot be correlated
35681
+ // or closed by a consumer (parity finding H24).
35682
+ id: external_exports.string().min(1),
35654
35683
  component: external_exports.string(),
35655
35684
  props: external_exports.record(external_exports.string(), external_exports.unknown()),
35656
35685
  executionId: external_exports.string().optional(),
@@ -35658,7 +35687,9 @@ var unifiedArtifactUpdateEventSchema = external_exports.object({
35658
35687
  });
35659
35688
  var unifiedArtifactCompleteEventSchema = external_exports.object({
35660
35689
  type: external_exports.literal("artifact_complete"),
35661
- id: external_exports.string(),
35690
+ // Non-empty by contract: an id-less artifact frame cannot be correlated
35691
+ // or closed by a consumer (parity finding H24).
35692
+ id: external_exports.string().min(1),
35662
35693
  executionId: external_exports.string().optional(),
35663
35694
  seq: external_exports.number().optional()
35664
35695
  });
@@ -35942,7 +35973,7 @@ var UNIFIED_SSE_EVENT_TYPES = _unifiedTuple([
35942
35973
  "custom"
35943
35974
  ]);
35944
35975
 
35945
- // ../shared/dist/chunk-H7KYB7QQ.mjs
35976
+ // ../shared/dist/chunk-P77RRB4I.mjs
35946
35977
  var mediaAnnotationsSchema = external_exports.object({
35947
35978
  audience: external_exports.array(external_exports.enum(["user", "assistant"])).optional()
35948
35979
  });
@@ -41703,11 +41734,37 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
41703
41734
  );
41704
41735
  }
41705
41736
  const idToStepIndexes = /* @__PURE__ */ new Map();
41737
+ const collectStepId = (id, topLevelIndex) => {
41738
+ if (typeof id !== "string" || id.length === 0) return;
41739
+ const existing = idToStepIndexes.get(id) || [];
41740
+ existing.push(topLevelIndex);
41741
+ idToStepIndexes.set(id, existing);
41742
+ };
41743
+ const walkNestedStepIds = (node, topLevelIndex, depth) => {
41744
+ if (!isObjectRecord(node)) return;
41745
+ if (node.type !== "conditional" || !isObjectRecord(node.config)) return;
41746
+ if (depth >= MAX_CONDITIONAL_NESTING_DEPTH) return;
41747
+ const config3 = node.config;
41748
+ const visit = (nested) => {
41749
+ if (!isObjectRecord(nested)) return;
41750
+ collectStepId(nested.id, topLevelIndex);
41751
+ walkNestedStepIds(nested, topLevelIndex, depth + 1);
41752
+ };
41753
+ if (Array.isArray(config3.branches)) {
41754
+ for (const branch of config3.branches) {
41755
+ if (!isObjectRecord(branch) || !Array.isArray(branch.steps)) continue;
41756
+ for (const nested of branch.steps) visit(nested);
41757
+ }
41758
+ }
41759
+ for (const key of CONDITIONAL_BRANCH_STEP_KEYS) {
41760
+ const arr = config3[key];
41761
+ if (!Array.isArray(arr)) continue;
41762
+ for (const nested of arr) visit(nested);
41763
+ }
41764
+ };
41706
41765
  for (const [index, step] of flowData.flowSteps.entries()) {
41707
- if (typeof step.id !== "string" || step.id.length === 0) continue;
41708
- const existing = idToStepIndexes.get(step.id) || [];
41709
- existing.push(index);
41710
- idToStepIndexes.set(step.id, existing);
41766
+ collectStepId(step.id, index);
41767
+ walkNestedStepIds(step, index, 0);
41711
41768
  }
41712
41769
  for (const [id, indexes] of idToStepIndexes.entries()) {
41713
41770
  if (indexes.length <= 1) continue;
@@ -42196,11 +42253,42 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
42196
42253
  // `vendored-export` (it rides the same host `CodeModeExecutor` seam as
42197
42254
  // `transformDataCodeModeTools`) — see {@link VENDORED_EXPORT_REFOLDS}.
42198
42255
  // Rollback lever: revert the bit to `true` (plus its test).
42199
- version: "2026-08-11.1",
42256
+ // Bumped 2026-08-14.1: graduates `approvalSteps` (the `fold-approval-steps`
42257
+ // item). The runtime flow lane now ARMS a prompt step's own
42258
+ // `config.tools.approval` (`stepAuthoredApprovalPolicy` +
42259
+ // `resolveSeamApprovalConfig` in `packages/runtime/src/engine/flow-engine.ts`)
42260
+ // and PAUSES on it (`flow-stream.ts` -> `approval_start` + an
42261
+ // `approval-paused` outcome -> `saveRuntimeApprovalPauseState` ->
42262
+ // `runRuntimeFlowContinuation`). The `hasApprovalSteps` FACT is still computed
42263
+ // for decision attribution AND for the SURFACE gate that replaced this bit: a
42264
+ // host that cannot answer an approval prompt does not declare
42265
+ // `approvalPauseHosting` and folds with `ineligible:surface-approval-pause`
42266
+ // (`playground-flow-dispatch.ts`). Rollback lever: revert this bit to `true`
42267
+ // (plus its tests) — the surface gate is independent and can stay.
42268
+ // Bumped 2026-08-16.1: graduates `batchInputMode` (the `fold-batch-input-mode`
42269
+ // item, D-095). The fold rested on a mis-stated premise: its comment described
42270
+ // batch EXECUTION (#6091 — the record-batch surface, which has no cross-record
42271
+ // conversational context and routes through its own eligibility probe), but the
42272
+ // FACT fires on STEP-level `config.inputMode === 'batch'`, a field that exists
42273
+ // on exactly three step schemas (`generate-embedding`, `store-vector`,
42274
+ // `upsert-record`) and never on a prompt step. All three runtime executors
42275
+ // already implement the batch branch
42276
+ // (`packages/runtime/src/engine/context-steps/{generate-embedding,store-vector,
42277
+ // upsert-record}.ts`), and `apps/api/src/lib/flow-execution/` has ZERO
42278
+ // `inputMode` references — so the bit folded a capability the runtime lane
42279
+ // already had. The `hasBatchInputMode` FACT stays computed for decision
42280
+ // attribution. Rollback lever: revert this bit to `true` (plus its tests).
42281
+ version: "2026-08-16.1",
42200
42282
  unsupportedStepTypes: ["wait-until", "crawl"],
42201
42283
  unsupportedFeatures: {
42202
- approvalSteps: true,
42203
- batchInputMode: true,
42284
+ approvalSteps: false,
42285
+ // SUPPORTED as of 2026-08-16.1 (D-095): step-level `inputMode: 'batch'` on
42286
+ // `generate-embedding` / `store-vector` / `upsert-record` runs on the
42287
+ // runtime flow lane through each executor's own batch branch — the same
42288
+ // per-item fan-out, chunking, and summary shape the api executors produce.
42289
+ // `hasBatchInputMode` stays computed for decision attribution.
42290
+ // Rollback lever: revert this bit to `true` (plus its tests).
42291
+ batchInputMode: false,
42204
42292
  claudeManagedAgent: true,
42205
42293
  inexpressibleVectorStep: true,
42206
42294
  unresolvableAgentRef: true,
@@ -42376,7 +42464,18 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
42376
42464
  // Bumped 2026-08-08.1: `transformDataMcpServers` graduated on the base and
42377
42465
  // becomes the fourth documented re-fold here — the discovered tools still
42378
42466
  // need the host `CodeModeExecutor` to be bound as sandbox callables.
42379
- version: "2026-08-11.1",
42467
+ // Bumped 2026-08-14.1: `approvalSteps` graduated on the base and becomes a
42468
+ // documented re-fold here — the ENGINE half is portable, the api-owned
42469
+ // approval-resume PLANE is not.
42470
+ // Bumped 2026-08-16.1: `batchInputMode` graduated on the base and is INHERITED
42471
+ // here rather than re-folded — the batch branches are pure engine (per-item
42472
+ // fan-out over the SAME `RecordStore` / `VectorStore` / `EmbeddingProvider`
42473
+ // seams single mode already uses; no host executor is involved), so a
42474
+ // container that runs the step at all runs its batch branch. The bit is also
42475
+ // inert on this matrix by construction: `inputMode` exists on exactly
42476
+ // `generate-embedding` / `store-vector` / `upsert-record`, and all three are
42477
+ // already in `unsupportedStepTypes` below, so the step-type fold fires first.
42478
+ version: "2026-08-16.1",
42380
42479
  unsupportedStepTypes: [
42381
42480
  // ── Carried over from api-inprocess: durable-host-only step types. A
42382
42481
  // self-contained container has no durable host (BYOC §3.3 / S0 — the
@@ -42408,6 +42507,23 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
42408
42507
  // customer-wired VectorStore / EmbeddingProvider can host these; the
42409
42508
  // container ships neither. Graduation lever: bundle a pgvector
42410
42509
  // VectorStore + a provider-backed EmbeddingProvider in the export.
42510
+ //
42511
+ // TRIPWIRE for whoever pulls that lever (D-095 item 3, 2026-08-16): the
42512
+ // `inexpressibleVectorStepIds` FACT is target-SHARED, and it narrowed to
42513
+ // admit record-coupled `vector-search` onto the api lane. That narrowing is
42514
+ // inert HERE only because the step type is folded on this line — remove the
42515
+ // line and a record/pgvector search becomes eligible for a container that
42516
+ // has no `records` table. A bundled generic pgvector index is NOT that
42517
+ // fulfilment. Graduating `vector-search` therefore also owes either a
42518
+ // vendored re-fold bit (the {@link VENDORED_EXPORT_REFOLDS} pattern) or a
42519
+ // container-side `records` fulfilment.
42520
+ //
42521
+ // This tripwire is EXECUTABLE, not just prose: the "folds a record-coupled
42522
+ // vector-search even though api-inprocess now admits it" case in
42523
+ // `runtime-eligibility.test.ts` fails if this entry is removed. The
42524
+ // full-surface test below cannot catch it — it iterates
42525
+ // `unsupportedStepTypes` itself, so a deleted entry simply stops being
42526
+ // asserted.
42411
42527
  "generate-embedding",
42412
42528
  "vector-search",
42413
42529
  "store-vector",
@@ -42442,14 +42558,37 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
42442
42558
  // which are strictly stricter.
42443
42559
  unsupportedFeatures: {
42444
42560
  ...API_INPROCESS_CAPABILITY_MATRIX.unsupportedFeatures,
42561
+ // VENDORED RE-FOLD (2026-08-14.1, no longer carried over): api-inprocess
42562
+ // graduated `approvalSteps` because the API host owns the approval-resume
42563
+ // plane (`ApprovalResumeStore` + KV `ResumeState` + the `/approve`
42564
+ // continuation leg). A self-contained container wires none of it and the
42565
+ // runtime's default `ApprovalResumeStore` is the fail-closed NoOp, so an
42566
+ // armed gate pauses into a prompt nobody can answer. See
42567
+ // {@link VENDORED_EXPORT_REFOLDS} for the graduation lever.
42445
42568
  approvalSteps: true,
42446
- // api-inprocess fold; the runtime flow engine derives no approval config. Graduation: port the approval rail.
42447
- batchInputMode: true,
42448
- // api-inprocess fold; batch has no conversational context (BYOC §3.2).
42569
+ // `batchInputMode` INHERITS the base SUPPORTED (`false`) as of 2026-08-16.1
42570
+ // (D-095) and is deliberately NOT restated as a literal — the 2026-08-06.3
42571
+ // re-decision pass exists because a restated literal went stale when its
42572
+ // base graduated. Two independent reasons it is not a re-fold: (1) the batch
42573
+ // branches are ENGINE-owned — a per-item loop over the same `RecordStore` /
42574
+ // `VectorStore` / `EmbeddingProvider` seams single mode uses, with no host
42575
+ // executor seam of the `CodeModeExecutor` / `ManagedFetchExecutor` /
42576
+ // `TransformSandboxRouter` kind {@link VENDORED_EXPORT_REFOLDS} exists for;
42577
+ // (2) it cannot change a decision here anyway, since `inputMode` exists only
42578
+ // on `generate-embedding` / `store-vector` / `upsert-record` and all three
42579
+ // are folded by `unsupportedStepTypes` above.
42449
42580
  claudeManagedAgent: true,
42450
42581
  // api-inprocess fold; exported execute-agent rejects claude_managed/external (BYOC §3.6, D-030/D-031).
42582
+ // api-inprocess fold; no vector seam in a self-contained container. The BIT
42583
+ // is unchanged by D-095 item 3, but the FACT feeding it narrowed on
42584
+ // 2026-08-16 to admit record-coupled `vector-search`. Re-fold check
42585
+ // performed and recorded rather than assumed: no re-fold entry is added,
42586
+ // because `vector-search` / `store-vector` are already in
42587
+ // `unsupportedStepTypes` above, so the step-type fold fires first and the
42588
+ // narrowing cannot change a decision on this target. Same reasoning
42589
+ // `batchInputMode` carries. The tripwire guarding that argument sits on the
42590
+ // step-type entries themselves.
42451
42591
  inexpressibleVectorStep: true,
42452
- // api-inprocess fold; no vector seam in a self-contained container.
42453
42592
  unresolvableAgentRef: true,
42454
42593
  // api-inprocess fold; execute-agent resolves only against the embedded registry (ADR 0014).
42455
42594
  // Nested-prompt dispatch is ENGINE-owned and works identically in a
@@ -43047,11 +43186,6 @@ var userProfileFeaturesSchema = external_exports.object({
43047
43186
  // this staging-only experiment in production. The command hands off to the
43048
43187
  // standalone Runtown app rather than mounting it inside the dashboard.
43049
43188
  enableRuntown: external_exports.boolean(),
43050
- // Gates the dashboard skill "Security scan" affordance (the
43051
- // `POST /v1/skills/scan` verdict UI). Driven by the `enable-skill-scanner`
43052
- // boolean flag (fail-closed until a rule enables it). The scan ROUTE stays
43053
- // reachable; this only hides the UI while the scanner rollout completes.
43054
- enableSkillScanner: external_exports.boolean(),
43055
43189
  // Gates the Massive Web Render surfaces in the dashboard (Settings
43056
43190
  // integration card + the fetch-url step's Massive mode option). Driven by
43057
43191
  // the `enable-massive-web-render` boolean flag (fail-closed in production
@@ -45654,6 +45788,17 @@ var credentialProxyConfigSchema = external_exports.object({
45654
45788
  injectionConfig: external_exports.record(external_exports.string(), external_exports.unknown()).default({}),
45655
45789
  envVarName: external_exports.string().optional()
45656
45790
  });
45791
+ var CANONICAL_LOG_COLUMN_SET = {
45792
+ // @snake-case-ok-start: R2 SQL / Iceberg column naming convention
45793
+ event_id: true,
45794
+ retention_class: true,
45795
+ retention_key: true,
45796
+ canonicalized_at: true,
45797
+ source_ingest_id: true,
45798
+ source_ingest_ts: true
45799
+ // @snake-case-ok-end
45800
+ };
45801
+ var CANONICAL_LOG_COLUMNS = Object.keys(CANONICAL_LOG_COLUMN_SET);
45657
45802
  var LOCAL_INFERENCE_PROTOCOL_VERSION = 1;
45658
45803
  var LocalInferenceSurfaceSchema = external_exports.enum(["playground", "flows", "agents"]);
45659
45804
  var LocalModelCapabilitiesSchema = external_exports.object({
@@ -46888,17 +47033,6 @@ var appRoutingDocSchema = external_exports.object({
46888
47033
  }).optional(),
46889
47034
  updatedAt: external_exports.string()
46890
47035
  });
46891
- var SKILL_SCAN_HARD_BLOCK_CATEGORIES = [
46892
- "credential_exfiltration",
46893
- "prompt_injection",
46894
- "mcp_tool_poisoning",
46895
- "data_exfiltration",
46896
- "privilege_escalation"
46897
- ];
46898
- function normalizeCategoryToken(value) {
46899
- return value.toLowerCase().replace(/[^a-z0-9]/g, "");
46900
- }
46901
- var HARD_BLOCK_NEEDLES = SKILL_SCAN_HARD_BLOCK_CATEGORIES.map(normalizeCategoryToken);
46902
47036
  var DEFAULT_STEP_TIMEOUT_MS = 5 * 60 * 1e3;
46903
47037
  var DEFAULT_FLOW_TIMEOUT_MS = 15 * 60 * 1e3;
46904
47038
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "2.33.10",
3
+ "version": "2.33.11",
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.3.1",
30
+ "@runtypelabs/sdk": "8.0.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.24.0"
46
+ "@runtypelabs/shared": "3.25.0"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=22.12.0"