@runtypelabs/cli 2.33.16 → 2.34.1

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 +570 -197
  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-QIBIQJE2.mjs
15133
+ // ../shared/dist/chunk-EQIJXX5F.mjs
15134
15134
  var AGENT_EXECUTION_STATUSES = [
15135
15135
  "queued",
15136
15136
  "running",
@@ -15167,7 +15167,7 @@ var CANONICAL_LOG_COLUMN_SET = {
15167
15167
  };
15168
15168
  var CANONICAL_LOG_COLUMNS = Object.keys(CANONICAL_LOG_COLUMN_SET);
15169
15169
 
15170
- // ../shared/dist/chunk-TM4OWUMO.mjs
15170
+ // ../shared/dist/chunk-2GMXBACL.mjs
15171
15171
  var MODEL_FAMILY_PROVIDER_IDS = {
15172
15172
  "claude-fable-5": {
15173
15173
  "anthropic": "claude-fable-5",
@@ -15272,6 +15272,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15272
15272
  "deepseek-v4-flash-0731": {
15273
15273
  "vercel": "deepseek/deepseek-v4-flash-0731"
15274
15274
  },
15275
+ "deepseek-v4-flash-vision-exp": {
15276
+ "vercel": "deepseek/deepseek-v4-flash-vision-exp"
15277
+ },
15275
15278
  "deepseek-v4-pro": {
15276
15279
  "vercel": "deepseek/deepseek-v4-pro"
15277
15280
  },
@@ -15355,9 +15358,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15355
15358
  "google": "gemini-3.5-flash-lite",
15356
15359
  "vercel": "google/gemini-3.5-flash-lite"
15357
15360
  },
15358
- "gemini-3-5-live-translate": {
15359
- "google": "gemini-3.5-live-translate-preview"
15360
- },
15361
15361
  "gemini-3-6-flash": {
15362
15362
  "google": "gemini-3.6-flash",
15363
15363
  "vercel": "google/gemini-3.6-flash"
@@ -15409,9 +15409,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15409
15409
  "google": "gemini-3.5-flash-lite",
15410
15410
  "vercel": "google/gemini-3.5-flash-lite"
15411
15411
  },
15412
- "gemini-3.5-live-translate-preview": {
15413
- "google": "gemini-3.5-live-translate-preview"
15414
- },
15415
15412
  "gemini-3.6-flash": {
15416
15413
  "google": "gemini-3.6-flash",
15417
15414
  "vercel": "google/gemini-3.6-flash"
@@ -15453,6 +15450,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15453
15450
  "glm-5-2-fast": {
15454
15451
  "vercel": "zai/glm-5.2-fast"
15455
15452
  },
15453
+ "glm-5-3": {
15454
+ "vercel": "zai/glm-5.3"
15455
+ },
15456
15456
  "glm-5.2": {
15457
15457
  "mixlayer": "z-ai/glm-5.2",
15458
15458
  "vercel": "zai/glm-5.2"
@@ -15460,50 +15460,71 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15460
15460
  "glm-5.2-fast": {
15461
15461
  "vercel": "zai/glm-5.2-fast"
15462
15462
  },
15463
+ "glm-5.3": {
15464
+ "vercel": "zai/glm-5.3"
15465
+ },
15463
15466
  "gpt-4-1": {
15464
15467
  "openai": "gpt-4.1",
15465
15468
  "vercel": "openai/gpt-4.1"
15466
15469
  },
15470
+ "gpt-4-1-fast": {
15471
+ "vercel": "openai/gpt-4.1-fast"
15472
+ },
15467
15473
  "gpt-4-1-mini": {
15468
15474
  "openai": "gpt-4.1-mini",
15469
15475
  "vercel": "openai/gpt-4.1-mini"
15470
15476
  },
15477
+ "gpt-4-1-mini-fast": {
15478
+ "vercel": "openai/gpt-4.1-mini-fast"
15479
+ },
15471
15480
  "gpt-4-1-nano": {
15472
15481
  "openai": "gpt-4.1-nano",
15473
15482
  "vercel": "openai/gpt-4.1-nano"
15474
15483
  },
15484
+ "gpt-4-1-nano-fast": {
15485
+ "vercel": "openai/gpt-4.1-nano-fast"
15486
+ },
15475
15487
  "gpt-4.1": {
15476
15488
  "openai": "gpt-4.1",
15477
15489
  "vercel": "openai/gpt-4.1"
15478
15490
  },
15491
+ "gpt-4.1-fast": {
15492
+ "vercel": "openai/gpt-4.1-fast"
15493
+ },
15479
15494
  "gpt-4.1-mini": {
15480
15495
  "openai": "gpt-4.1-mini",
15481
15496
  "vercel": "openai/gpt-4.1-mini"
15482
15497
  },
15498
+ "gpt-4.1-mini-fast": {
15499
+ "vercel": "openai/gpt-4.1-mini-fast"
15500
+ },
15483
15501
  "gpt-4.1-nano": {
15484
15502
  "openai": "gpt-4.1-nano",
15485
15503
  "vercel": "openai/gpt-4.1-nano"
15486
15504
  },
15505
+ "gpt-4.1-nano-fast": {
15506
+ "vercel": "openai/gpt-4.1-nano-fast"
15507
+ },
15487
15508
  "gpt-4o": {
15488
15509
  "openai": "gpt-4o",
15489
15510
  "vercel": "openai/gpt-4o"
15490
15511
  },
15512
+ "gpt-4o-fast": {
15513
+ "vercel": "openai/gpt-4o-fast"
15514
+ },
15491
15515
  "gpt-4o-mini": {
15492
15516
  "openai": "gpt-4o-mini",
15493
15517
  "vercel": "openai/gpt-4o-mini"
15494
15518
  },
15519
+ "gpt-4o-mini-fast": {
15520
+ "vercel": "openai/gpt-4o-mini-fast"
15521
+ },
15495
15522
  "gpt-4o-mini-search": {
15496
15523
  "vercel": "openai/gpt-4o-mini-search-preview"
15497
15524
  },
15498
15525
  "gpt-4o-mini-search-preview": {
15499
15526
  "vercel": "openai/gpt-4o-mini-search-preview"
15500
15527
  },
15501
- "gpt-4o-mini-transcribe": {
15502
- "vercel": "openai/gpt-4o-mini-transcribe"
15503
- },
15504
- "gpt-4o-transcribe": {
15505
- "vercel": "openai/gpt-4o-transcribe"
15506
- },
15507
15528
  "gpt-5": {
15508
15529
  "openai": "gpt-5",
15509
15530
  "vercel": "openai/gpt-5"
@@ -15520,6 +15541,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15520
15541
  "gpt-5-1-codex-mini": {
15521
15542
  "vercel": "openai/gpt-5.1-codex-mini"
15522
15543
  },
15544
+ "gpt-5-1-thinking-fast": {
15545
+ "vercel": "openai/gpt-5.1-thinking-fast"
15546
+ },
15523
15547
  "gpt-5-2": {
15524
15548
  "openai": "gpt-5.2",
15525
15549
  "vercel": "openai/gpt-5.2"
@@ -15527,6 +15551,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15527
15551
  "gpt-5-2-codex": {
15528
15552
  "vercel": "openai/gpt-5.2-codex"
15529
15553
  },
15554
+ "gpt-5-2-fast": {
15555
+ "vercel": "openai/gpt-5.2-fast"
15556
+ },
15530
15557
  "gpt-5-2-pro": {
15531
15558
  "openai": "gpt-5.2-pro",
15532
15559
  "vercel": "openai/gpt-5.2-pro"
@@ -15535,6 +15562,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15535
15562
  "openai": "gpt-5.3-codex",
15536
15563
  "vercel": "openai/gpt-5.3-codex"
15537
15564
  },
15565
+ "gpt-5-3-codex-fast": {
15566
+ "vercel": "openai/gpt-5.3-codex-fast"
15567
+ },
15538
15568
  "gpt-5-3-codex-spark": {
15539
15569
  "openai": "gpt-5.3-codex-spark"
15540
15570
  },
@@ -15542,10 +15572,16 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15542
15572
  "openai": "gpt-5.4",
15543
15573
  "vercel": "openai/gpt-5.4"
15544
15574
  },
15575
+ "gpt-5-4-fast": {
15576
+ "vercel": "openai/gpt-5.4-fast"
15577
+ },
15545
15578
  "gpt-5-4-mini": {
15546
15579
  "openai": "gpt-5.4-mini",
15547
15580
  "vercel": "openai/gpt-5.4-mini"
15548
15581
  },
15582
+ "gpt-5-4-mini-fast": {
15583
+ "vercel": "openai/gpt-5.4-mini-fast"
15584
+ },
15549
15585
  "gpt-5-4-nano": {
15550
15586
  "openai": "gpt-5.4-nano",
15551
15587
  "vercel": "openai/gpt-5.4-nano"
@@ -15558,6 +15594,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15558
15594
  "openai": "gpt-5.5",
15559
15595
  "vercel": "openai/gpt-5.5"
15560
15596
  },
15597
+ "gpt-5-5-fast": {
15598
+ "vercel": "openai/gpt-5.5-fast"
15599
+ },
15561
15600
  "gpt-5-5-pro": {
15562
15601
  "openai": "gpt-5.5-pro",
15563
15602
  "vercel": "openai/gpt-5.5-pro"
@@ -15569,21 +15608,36 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15569
15608
  "openai": "gpt-5.6-luna",
15570
15609
  "vercel": "openai/gpt-5.6-luna"
15571
15610
  },
15611
+ "gpt-5-6-luna-fast": {
15612
+ "vercel": "openai/gpt-5.6-luna-fast"
15613
+ },
15572
15614
  "gpt-5-6-sol": {
15573
15615
  "openai": "gpt-5.6-sol",
15574
15616
  "vercel": "openai/gpt-5.6-sol"
15575
15617
  },
15618
+ "gpt-5-6-sol-fast": {
15619
+ "vercel": "openai/gpt-5.6-sol-fast"
15620
+ },
15576
15621
  "gpt-5-6-terra": {
15577
15622
  "openai": "gpt-5.6-terra",
15578
15623
  "vercel": "openai/gpt-5.6-terra"
15579
15624
  },
15625
+ "gpt-5-6-terra-fast": {
15626
+ "vercel": "openai/gpt-5.6-terra-fast"
15627
+ },
15580
15628
  "gpt-5-codex": {
15581
15629
  "vercel": "openai/gpt-5-codex"
15582
15630
  },
15631
+ "gpt-5-fast": {
15632
+ "vercel": "openai/gpt-5-fast"
15633
+ },
15583
15634
  "gpt-5-mini": {
15584
15635
  "openai": "gpt-5-mini",
15585
15636
  "vercel": "openai/gpt-5-mini"
15586
15637
  },
15638
+ "gpt-5-mini-fast": {
15639
+ "vercel": "openai/gpt-5-mini-fast"
15640
+ },
15587
15641
  "gpt-5-nano": {
15588
15642
  "openai": "gpt-5-nano",
15589
15643
  "vercel": "openai/gpt-5-nano"
@@ -15604,6 +15658,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15604
15658
  "gpt-5.1-codex-mini": {
15605
15659
  "vercel": "openai/gpt-5.1-codex-mini"
15606
15660
  },
15661
+ "gpt-5.1-thinking-fast": {
15662
+ "vercel": "openai/gpt-5.1-thinking-fast"
15663
+ },
15607
15664
  "gpt-5.2": {
15608
15665
  "openai": "gpt-5.2",
15609
15666
  "vercel": "openai/gpt-5.2"
@@ -15611,6 +15668,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15611
15668
  "gpt-5.2-codex": {
15612
15669
  "vercel": "openai/gpt-5.2-codex"
15613
15670
  },
15671
+ "gpt-5.2-fast": {
15672
+ "vercel": "openai/gpt-5.2-fast"
15673
+ },
15614
15674
  "gpt-5.2-pro": {
15615
15675
  "openai": "gpt-5.2-pro",
15616
15676
  "vercel": "openai/gpt-5.2-pro"
@@ -15619,6 +15679,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15619
15679
  "openai": "gpt-5.3-codex",
15620
15680
  "vercel": "openai/gpt-5.3-codex"
15621
15681
  },
15682
+ "gpt-5.3-codex-fast": {
15683
+ "vercel": "openai/gpt-5.3-codex-fast"
15684
+ },
15622
15685
  "gpt-5.3-codex-spark": {
15623
15686
  "openai": "gpt-5.3-codex-spark"
15624
15687
  },
@@ -15626,10 +15689,16 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15626
15689
  "openai": "gpt-5.4",
15627
15690
  "vercel": "openai/gpt-5.4"
15628
15691
  },
15692
+ "gpt-5.4-fast": {
15693
+ "vercel": "openai/gpt-5.4-fast"
15694
+ },
15629
15695
  "gpt-5.4-mini": {
15630
15696
  "openai": "gpt-5.4-mini",
15631
15697
  "vercel": "openai/gpt-5.4-mini"
15632
15698
  },
15699
+ "gpt-5.4-mini-fast": {
15700
+ "vercel": "openai/gpt-5.4-mini-fast"
15701
+ },
15633
15702
  "gpt-5.4-nano": {
15634
15703
  "openai": "gpt-5.4-nano",
15635
15704
  "vercel": "openai/gpt-5.4-nano"
@@ -15642,6 +15711,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15642
15711
  "openai": "gpt-5.5",
15643
15712
  "vercel": "openai/gpt-5.5"
15644
15713
  },
15714
+ "gpt-5.5-fast": {
15715
+ "vercel": "openai/gpt-5.5-fast"
15716
+ },
15645
15717
  "gpt-5.5-pro": {
15646
15718
  "openai": "gpt-5.5-pro",
15647
15719
  "vercel": "openai/gpt-5.5-pro"
@@ -15653,14 +15725,23 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15653
15725
  "openai": "gpt-5.6-luna",
15654
15726
  "vercel": "openai/gpt-5.6-luna"
15655
15727
  },
15728
+ "gpt-5.6-luna-fast": {
15729
+ "vercel": "openai/gpt-5.6-luna-fast"
15730
+ },
15656
15731
  "gpt-5.6-sol": {
15657
15732
  "openai": "gpt-5.6-sol",
15658
15733
  "vercel": "openai/gpt-5.6-sol"
15659
15734
  },
15735
+ "gpt-5.6-sol-fast": {
15736
+ "vercel": "openai/gpt-5.6-sol-fast"
15737
+ },
15660
15738
  "gpt-5.6-terra": {
15661
15739
  "openai": "gpt-5.6-terra",
15662
15740
  "vercel": "openai/gpt-5.6-terra"
15663
15741
  },
15742
+ "gpt-5.6-terra-fast": {
15743
+ "vercel": "openai/gpt-5.6-terra-fast"
15744
+ },
15664
15745
  "gpt-image-1-5": {
15665
15746
  "openai": "gpt-image-1.5"
15666
15747
  },
@@ -15670,9 +15751,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15670
15751
  "gpt-image-1.5": {
15671
15752
  "openai": "gpt-image-1.5"
15672
15753
  },
15673
- "gpt-realtime-whisper": {
15674
- "vercel": "openai/gpt-realtime-whisper"
15675
- },
15676
15754
  "grok-4-20-0309-non-reasoning": {
15677
15755
  "xai": "grok-4.20-0309-non-reasoning"
15678
15756
  },
@@ -15680,27 +15758,27 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15680
15758
  "xai": "grok-4.20-0309-reasoning"
15681
15759
  },
15682
15760
  "grok-4-20-multi-agent": {
15683
- "vercel": "xai/grok-4.20-multi-agent"
15761
+ "vercel": "spacexai/grok-4.20-multi-agent"
15684
15762
  },
15685
15763
  "grok-4-20-multi-agent-0309": {
15686
15764
  "xai": "grok-4.20-multi-agent-0309"
15687
15765
  },
15688
15766
  "grok-4-20-non-reasoning": {
15689
- "vercel": "xai/grok-4.20-non-reasoning"
15767
+ "vercel": "spacexai/grok-4.20-non-reasoning"
15690
15768
  },
15691
15769
  "grok-4-20-reasoning": {
15692
- "vercel": "xai/grok-4.20-reasoning"
15770
+ "vercel": "spacexai/grok-4.20-reasoning"
15693
15771
  },
15694
15772
  "grok-4-3": {
15695
- "vercel": "xai/grok-4.3",
15773
+ "vercel": "spacexai/grok-4.3",
15696
15774
  "xai": "grok-4.3"
15697
15775
  },
15698
15776
  "grok-4-5": {
15699
- "vercel": "xai/grok-4.5",
15777
+ "vercel": "spacexai/grok-4.5",
15700
15778
  "xai": "grok-4.5"
15701
15779
  },
15702
15780
  "grok-4-6": {
15703
- "vercel": "xai/grok-4.6",
15781
+ "vercel": "spacexai/grok-4.6",
15704
15782
  "xai": "grok-4.6"
15705
15783
  },
15706
15784
  "grok-4.20-0309-non-reasoning": {
@@ -15710,54 +15788,57 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15710
15788
  "xai": "grok-4.20-0309-reasoning"
15711
15789
  },
15712
15790
  "grok-4.20-multi-agent": {
15713
- "vercel": "xai/grok-4.20-multi-agent"
15791
+ "vercel": "spacexai/grok-4.20-multi-agent"
15714
15792
  },
15715
15793
  "grok-4.20-multi-agent-0309": {
15716
15794
  "xai": "grok-4.20-multi-agent-0309"
15717
15795
  },
15718
15796
  "grok-4.20-non-reasoning": {
15719
- "vercel": "xai/grok-4.20-non-reasoning"
15797
+ "vercel": "spacexai/grok-4.20-non-reasoning"
15720
15798
  },
15721
15799
  "grok-4.20-reasoning": {
15722
- "vercel": "xai/grok-4.20-reasoning"
15800
+ "vercel": "spacexai/grok-4.20-reasoning"
15723
15801
  },
15724
15802
  "grok-4.3": {
15725
- "vercel": "xai/grok-4.3",
15803
+ "vercel": "spacexai/grok-4.3",
15726
15804
  "xai": "grok-4.3"
15727
15805
  },
15728
15806
  "grok-4.5": {
15729
- "vercel": "xai/grok-4.5",
15807
+ "vercel": "spacexai/grok-4.5",
15730
15808
  "xai": "grok-4.5"
15731
15809
  },
15732
15810
  "grok-4.6": {
15733
- "vercel": "xai/grok-4.6",
15811
+ "vercel": "spacexai/grok-4.6",
15734
15812
  "xai": "grok-4.6"
15735
15813
  },
15736
15814
  "grok-build-0-1": {
15737
- "vercel": "xai/grok-build-0.1",
15815
+ "vercel": "spacexai/grok-build-0.1",
15738
15816
  "xai": "grok-build-0.1"
15739
15817
  },
15740
15818
  "grok-build-0.1": {
15741
- "vercel": "xai/grok-build-0.1",
15819
+ "vercel": "spacexai/grok-build-0.1",
15742
15820
  "xai": "grok-build-0.1"
15743
15821
  },
15744
- "grok-imagine-image": {
15745
- "vercel": "xai/grok-imagine-image"
15746
- },
15747
- "grok-stt": {
15748
- "vercel": "xai/grok-stt"
15749
- },
15750
15822
  "grok-voice-think-fast-1-0": {
15751
- "vercel": "xai/grok-voice-think-fast-1.0"
15823
+ "vercel": "spacexai/grok-voice-think-fast-1.0"
15752
15824
  },
15753
15825
  "grok-voice-think-fast-1.0": {
15754
- "vercel": "xai/grok-voice-think-fast-1.0"
15826
+ "vercel": "spacexai/grok-voice-think-fast-1.0"
15755
15827
  },
15756
15828
  "grok-voice-think-fast-2-0": {
15757
- "vercel": "xai/grok-voice-think-fast-2.0"
15829
+ "vercel": "spacexai/grok-voice-think-fast-2.0"
15758
15830
  },
15759
15831
  "grok-voice-think-fast-2.0": {
15760
- "vercel": "xai/grok-voice-think-fast-2.0"
15832
+ "vercel": "spacexai/grok-voice-think-fast-2.0"
15833
+ },
15834
+ "hy-mt2-lite": {
15835
+ "vercel": "tencent/hy-mt2-lite"
15836
+ },
15837
+ "hy-mt2-plus": {
15838
+ "vercel": "tencent/hy-mt2-plus"
15839
+ },
15840
+ "hy-mt2-pro": {
15841
+ "vercel": "tencent/hy-mt2-pro"
15761
15842
  },
15762
15843
  "hy3": {
15763
15844
  "vercel": "tencent/hy3"
@@ -15837,15 +15918,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15837
15918
  "ling-3-0-flash": {
15838
15919
  "vercel": "inclusionai/ling-3.0-flash"
15839
15920
  },
15840
- "ling-3-0-tiny-free": {
15841
- "vercel": "inclusionai/ling-3.0-tiny-free"
15842
- },
15843
15921
  "ling-3.0-flash": {
15844
15922
  "vercel": "inclusionai/ling-3.0-flash"
15845
15923
  },
15846
- "ling-3.0-tiny-free": {
15847
- "vercel": "inclusionai/ling-3.0-tiny-free"
15848
- },
15849
15924
  "llama-3.1-70b": {
15850
15925
  "vercel": "meta/llama-3.1-70b"
15851
15926
  },
@@ -15966,6 +16041,12 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15966
16041
  "namazu": {
15967
16042
  "vercel": "sakana/namazu"
15968
16043
  },
16044
+ "nemotron-3-5-lightning": {
16045
+ "vercel": "nvidia/nemotron-3.5-lightning"
16046
+ },
16047
+ "nemotron-3-5-lightning-free": {
16048
+ "vercel": "nvidia/nemotron-3.5-lightning-free"
16049
+ },
15969
16050
  "nemotron-3-nano-30b-a3b": {
15970
16051
  "vercel": "nvidia/nemotron-3-nano-30b-a3b"
15971
16052
  },
@@ -15975,6 +16056,12 @@ var MODEL_FAMILY_PROVIDER_IDS = {
15975
16056
  "nemotron-3-ultra-550b-a55b": {
15976
16057
  "vercel": "nvidia/nemotron-3-ultra-550b-a55b"
15977
16058
  },
16059
+ "nemotron-3.5-lightning": {
16060
+ "vercel": "nvidia/nemotron-3.5-lightning"
16061
+ },
16062
+ "nemotron-3.5-lightning-free": {
16063
+ "vercel": "nvidia/nemotron-3.5-lightning-free"
16064
+ },
15978
16065
  "nemotron-nano-12b-v2-vl": {
15979
16066
  "vercel": "nvidia/nemotron-nano-12b-v2-vl"
15980
16067
  },
@@ -16069,6 +16156,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
16069
16156
  "qwen3-8-2-4t-a95b": {
16070
16157
  "vercel": "alibaba/qwen3.8-2.4t-a95b"
16071
16158
  },
16159
+ "qwen3-8-27b": {
16160
+ "vercel": "alibaba/qwen3.8-27b"
16161
+ },
16072
16162
  "qwen3-8-max": {
16073
16163
  "vercel": "alibaba/qwen3.8-max"
16074
16164
  },
@@ -16157,6 +16247,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
16157
16247
  "qwen3.8-2.4t-a95b": {
16158
16248
  "vercel": "alibaba/qwen3.8-2.4t-a95b"
16159
16249
  },
16250
+ "qwen3.8-27b": {
16251
+ "vercel": "alibaba/qwen3.8-27b"
16252
+ },
16160
16253
  "qwen3.8-max": {
16161
16254
  "vercel": "alibaba/qwen3.8-max"
16162
16255
  },
@@ -16214,9 +16307,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
16214
16307
  "text-embedding-ada-002": {
16215
16308
  "openai": "text-embedding-ada-002"
16216
16309
  },
16217
- "transcribe-1": {
16218
- "vercel": "fish-audio/transcribe-1"
16219
- },
16220
16310
  "trinity-large": {
16221
16311
  "vercel": "arcee-ai/trinity-large-thinking"
16222
16312
  },
@@ -16225,9 +16315,6 @@ var MODEL_FAMILY_PROVIDER_IDS = {
16225
16315
  },
16226
16316
  "trinity-mini": {
16227
16317
  "vercel": "arcee-ai/trinity-mini"
16228
- },
16229
- "whisper-1": {
16230
- "vercel": "openai/whisper-1"
16231
16318
  }
16232
16319
  };
16233
16320
  var PLATFORM_KEY_PROVIDER_MAP = {
@@ -16261,15 +16348,24 @@ var MANUAL_PROVIDER_MAP_OVERRIDES = {
16261
16348
  "bedrock": "anthropic.claude-3-5-sonnet-20241022-v2:0"
16262
16349
  },
16263
16350
  // Legacy xAI aliases route to the current successor model IDs.
16351
+ //
16352
+ // The `vercel` values carry the GATEWAY namespace, which the Vercel AI
16353
+ // Gateway renamed `xai/` → `spacexai/` on 2026-08-22. This table is
16354
+ // hand-maintained — `pnpm update-models` never rewrites it — so the rename
16355
+ // does not reach it on its own, and these three families route Vercel-first
16356
+ // (`grok-4-fast` and `grok-4.1-fast-non-reasoning` with `fallback: []`).
16357
+ // A stale `xai/…` target here is a hard model-not-found, not a degrade.
16358
+ // The `xai` values are DIRECT-provider model ids and are unprefixed by
16359
+ // construction, so the rename does not touch them.
16264
16360
  "grok-4": {
16265
- "vercel": "xai/grok-4.3",
16361
+ "vercel": "spacexai/grok-4.3",
16266
16362
  "xai": "grok-4.3"
16267
16363
  },
16268
16364
  "grok-4-fast": {
16269
- "vercel": "xai/grok-4.20-non-reasoning"
16365
+ "vercel": "spacexai/grok-4.20-non-reasoning"
16270
16366
  },
16271
16367
  "grok-4.1-fast-non-reasoning": {
16272
- "vercel": "xai/grok-4.20-non-reasoning"
16368
+ "vercel": "spacexai/grok-4.20-non-reasoning"
16273
16369
  },
16274
16370
  "kimi-k2.6": {
16275
16371
  "workers-ai": "@cf/moonshotai/kimi-k2.6"
@@ -16686,7 +16782,44 @@ var BuiltInToolIdPrefix = {
16686
16782
  PLATFORM: "platform"
16687
16783
  };
16688
16784
 
16689
- // ../shared/dist/chunk-STHRX6ZL.mjs
16785
+ // ../shared/dist/chunk-D5RN66ZS.mjs
16786
+ function sanitizeToolNameForAiSdk(name) {
16787
+ return name.replace(/[^a-zA-Z0-9_]/g, "_").toLowerCase().replace(/_+/g, "_").replace(/^_|_$/g, "");
16788
+ }
16789
+ function toolNamesCollideForAiSdk(left, right) {
16790
+ return sanitizeToolNameForAiSdk(left) === sanitizeToolNameForAiSdk(right);
16791
+ }
16792
+ var BUILTIN_TOOLS_REGISTRY = BUILTIN_TOOLS_LEAN;
16793
+ function formatSystemToolId(tool) {
16794
+ const prefix = tool.idPrefix ?? BuiltInToolIdPrefix.BUILTIN;
16795
+ return `${prefix}:${tool.id}`;
16796
+ }
16797
+ function getAllBuiltInTools(opts) {
16798
+ return BUILTIN_TOOLS_REGISTRY.filter(
16799
+ (tool) => !tool.hidden && !(opts?.hideExperimental && tool.experimental)
16800
+ );
16801
+ }
16802
+ function getBuiltInToolById(toolId) {
16803
+ const cleanId = toolId.replace(/^(builtin|platform):/, "");
16804
+ return BUILTIN_TOOLS_REGISTRY.find(
16805
+ (tool) => tool.id === cleanId || tool.aliases?.includes(cleanId)
16806
+ );
16807
+ }
16808
+ function isToolCompatibleWithModel(toolId, modelId, provider) {
16809
+ const tool = getBuiltInToolById(toolId);
16810
+ if (!tool) return false;
16811
+ const providerKey = provider;
16812
+ if (!tool.providers.includes(providerKey) && !tool.providers.includes(BuiltInToolProvider.MULTI)) {
16813
+ return false;
16814
+ }
16815
+ if (!tool.modelCompatibility || tool.modelCompatibility.length === 0) {
16816
+ return true;
16817
+ }
16818
+ const compatibility = tool.modelCompatibility.find((c2) => c2.provider === providerKey);
16819
+ if (!compatibility) return true;
16820
+ if (compatibility.models.length === 0) return true;
16821
+ return compatibility.models.some((m2) => modelId.includes(m2));
16822
+ }
16690
16823
  var DEFAULT_BEDROCK_REGION = "us-east-1";
16691
16824
  var DEFAULT_VERTEX_LOCATION = "us-central1";
16692
16825
  var PROVIDER_SECRET_SPECS = [
@@ -16795,37 +16928,6 @@ function resolveModelOptionalSettings(model) {
16795
16928
  }
16796
16929
  return [];
16797
16930
  }
16798
- var BUILTIN_TOOLS_REGISTRY = BUILTIN_TOOLS_LEAN;
16799
- function formatSystemToolId(tool) {
16800
- const prefix = tool.idPrefix ?? BuiltInToolIdPrefix.BUILTIN;
16801
- return `${prefix}:${tool.id}`;
16802
- }
16803
- function getAllBuiltInTools(opts) {
16804
- return BUILTIN_TOOLS_REGISTRY.filter(
16805
- (tool) => !tool.hidden && !(opts?.hideExperimental && tool.experimental)
16806
- );
16807
- }
16808
- function getBuiltInToolById(toolId) {
16809
- const cleanId = toolId.replace(/^(builtin|platform):/, "");
16810
- return BUILTIN_TOOLS_REGISTRY.find(
16811
- (tool) => tool.id === cleanId || tool.aliases?.includes(cleanId)
16812
- );
16813
- }
16814
- function isToolCompatibleWithModel(toolId, modelId, provider) {
16815
- const tool = getBuiltInToolById(toolId);
16816
- if (!tool) return false;
16817
- const providerKey = provider;
16818
- if (!tool.providers.includes(providerKey) && !tool.providers.includes(BuiltInToolProvider.MULTI)) {
16819
- return false;
16820
- }
16821
- if (!tool.modelCompatibility || tool.modelCompatibility.length === 0) {
16822
- return true;
16823
- }
16824
- const compatibility = tool.modelCompatibility.find((c2) => c2.provider === providerKey);
16825
- if (!compatibility) return true;
16826
- if (compatibility.models.length === 0) return true;
16827
- return compatibility.models.some((m2) => modelId.includes(m2));
16828
- }
16829
16931
 
16830
16932
  // ../shared/dist/chunk-CZYEGUYG.mjs
16831
16933
  var apiReleaseChannelSchema = external_exports.enum(["staging", "production"]);
@@ -17109,7 +17211,7 @@ var recordCollectionSchemaSchema = external_exports.strictObject({
17109
17211
  additionalProperties: external_exports.boolean().optional()
17110
17212
  }).superRefine((schema, ctx) => addSemanticIssues(schema, ctx));
17111
17213
 
17112
- // ../shared/dist/chunk-YFKHFG7R.mjs
17214
+ // ../shared/dist/chunk-CUYPH2YF.mjs
17113
17215
  var MCPServerCategory = {
17114
17216
  COMMUNICATION: "communication",
17115
17217
  PRODUCTIVITY: "productivity",
@@ -17383,7 +17485,11 @@ var SURFACE_TYPE_METADATA = {
17383
17485
  interactiveUI: "generative",
17384
17486
  inboundMediaSupport: true,
17385
17487
  consumerType: "human",
17386
- approvalCapture: "native-controls",
17488
+ // Client Chat has no authenticated decision rail that can return an
17489
+ // owner-approved result to the visitor's session. The browser must not
17490
+ // approve its own gated tool call, so reachable approvals are rejected
17491
+ // before execution rather than exposed as native controls.
17492
+ approvalCapture: "none",
17387
17493
  reasoningVisibility: "pass_through",
17388
17494
  markdownDialect: "mdx",
17389
17495
  threadModel: "flat",
@@ -17696,7 +17802,7 @@ var SURFACE_TYPE_METADATA = {
17696
17802
  // wrong without imposing a hard truncate that would clip mid-thought.
17697
17803
  maxResponseLength: 1200,
17698
17804
  executionHint: [
17699
- "You are responding via iMessage. Hard rules:",
17805
+ "You are responding via iMessage. Channel defaults:",
17700
17806
  "- Plain text only. No markdown \u2014 no **bold**, no # headings, no - bullets, no `code`, no > quotes, no fenced code blocks.",
17701
17807
  "- 1\u20133 sentences per reply, under 300 characters total when possible.",
17702
17808
  "- Texting tone: conversational, lowercase is fine, contractions welcome.",
@@ -17962,7 +18068,11 @@ var SURFACE_TYPE_METADATA = {
17962
18068
  // @snake-case-ok: surface type identifier
17963
18069
  "hosted-page": {
17964
18070
  description: "White-label hosted page (dotapp): a publisher-branded web surface served from a claimed subdomain that embeds the product for signed-in end users. Dispatch delegates to the product chat endpoint via a co-provisioned client token.",
17965
- useCases: ["white-label customer portals", "branded assistant pages", "publisher-hosted support"],
18071
+ useCases: [
18072
+ "white-label customer portals",
18073
+ "branded assistant pages",
18074
+ "publisher-hosted support"
18075
+ ],
17966
18076
  examples: ["Publisher-hosted support portal", "Branded customer assistant page"],
17967
18077
  // Not in the dashboard picker or MCP create_surface enums — internal /
17968
18078
  // API-only today. Runtime trait lookups still resolve; agent-facing
@@ -19073,6 +19183,117 @@ var GITHUB_INTEGRATION = {
19073
19183
  required: ["owner", "repo", "path"]
19074
19184
  }
19075
19185
  },
19186
+ {
19187
+ name: "list_directory",
19188
+ description: "List files and subdirectories at a repository path. Omit path to list the repository root.",
19189
+ parametersSchema: {
19190
+ type: "object",
19191
+ properties: {
19192
+ owner: {
19193
+ type: "string",
19194
+ description: "Repository owner"
19195
+ },
19196
+ repo: {
19197
+ type: "string",
19198
+ description: "Repository name"
19199
+ },
19200
+ path: {
19201
+ type: "string",
19202
+ description: "Directory path in the repository (default: repository root)"
19203
+ },
19204
+ ref: {
19205
+ type: "string",
19206
+ description: "Branch, tag, or commit SHA (default: repository default branch)"
19207
+ }
19208
+ },
19209
+ required: ["owner", "repo"]
19210
+ }
19211
+ },
19212
+ {
19213
+ name: "get_repository_tree",
19214
+ description: "Get a Git tree for a branch, tag, commit, or tree SHA. Set recursive to true to list the entire repository tree.",
19215
+ parametersSchema: {
19216
+ type: "object",
19217
+ properties: {
19218
+ owner: {
19219
+ type: "string",
19220
+ description: "Repository owner"
19221
+ },
19222
+ repo: {
19223
+ type: "string",
19224
+ description: "Repository name"
19225
+ },
19226
+ ref: {
19227
+ type: "string",
19228
+ description: "Branch, tag, commit SHA, or tree SHA (default: repository default branch)"
19229
+ },
19230
+ recursive: {
19231
+ type: "boolean",
19232
+ description: "Whether to include all nested files and subdirectories (default: false; large repositories may return a truncated result)"
19233
+ }
19234
+ },
19235
+ required: ["owner", "repo"]
19236
+ }
19237
+ },
19238
+ {
19239
+ name: "commit_files",
19240
+ description: "Create one atomic Git commit that writes and/or deletes multiple files, then fast-forward a branch to it. If any operation fails, the branch is not partially updated.",
19241
+ parametersSchema: {
19242
+ type: "object",
19243
+ properties: {
19244
+ owner: {
19245
+ type: "string",
19246
+ description: "Repository owner"
19247
+ },
19248
+ repo: {
19249
+ type: "string",
19250
+ description: "Repository name"
19251
+ },
19252
+ branch: {
19253
+ type: "string",
19254
+ description: "Branch to update"
19255
+ },
19256
+ message: {
19257
+ type: "string",
19258
+ description: "Commit message"
19259
+ },
19260
+ expected_head_sha: {
19261
+ type: "string",
19262
+ description: "Optional optimistic concurrency guard. The commit is rejected if the branch no longer points to this SHA."
19263
+ },
19264
+ changes: {
19265
+ type: "array",
19266
+ description: "File changes included in the commit. Each change must provide either content or delete:true, but not both.",
19267
+ minItems: 1,
19268
+ maxItems: 100,
19269
+ items: {
19270
+ type: "object",
19271
+ properties: {
19272
+ path: {
19273
+ type: "string",
19274
+ description: "Repository-relative file path"
19275
+ },
19276
+ content: {
19277
+ type: "string",
19278
+ description: "Complete UTF-8 file content"
19279
+ },
19280
+ delete: {
19281
+ type: "boolean",
19282
+ description: "Set true to delete the file"
19283
+ },
19284
+ mode: {
19285
+ type: "string",
19286
+ description: "Git file mode (default: 100644). Use 100755 for executables or 120000 for symlinks.",
19287
+ enum: ["100644", "100755", "120000"]
19288
+ }
19289
+ },
19290
+ required: ["path"]
19291
+ }
19292
+ }
19293
+ },
19294
+ required: ["owner", "repo", "branch", "message", "changes"]
19295
+ }
19296
+ },
19076
19297
  {
19077
19298
  name: "search_code",
19078
19299
  description: "Search for code across GitHub repositories",
@@ -20048,7 +20269,7 @@ function resolveFallback(parsed, context, tracking, options = {}) {
20048
20269
  }
20049
20270
  var templateEngine = new SimpleTemplateEngine();
20050
20271
 
20051
- // ../shared/dist/chunk-SOKXZLOQ.mjs
20272
+ // ../shared/dist/chunk-4R2DUEEJ.mjs
20052
20273
  function unwrapVectorSourceTemplate(source) {
20053
20274
  const trimmed2 = source.trim();
20054
20275
  if (!trimmed2.startsWith("{{") || !trimmed2.endsWith("}}")) return source;
@@ -20057,7 +20278,7 @@ function unwrapVectorSourceTemplate(source) {
20057
20278
  return inner;
20058
20279
  }
20059
20280
 
20060
- // ../shared/dist/chunk-M72R4DR4.mjs
20281
+ // ../shared/dist/chunk-V72ZUWGU.mjs
20061
20282
  var jsonPatchOperationSchema = external_exports.object({
20062
20283
  op: external_exports.enum(["add", "remove", "replace", "move", "copy", "test"]),
20063
20284
  /** JSON Pointer (RFC 6901) into the state document. `''` addresses the root. */
@@ -20127,7 +20348,16 @@ var unifiedExecutionStartEventSchema = external_exports.object({
20127
20348
  maxTurns: external_exports.number().optional(),
20128
20349
  totalSteps: external_exports.number().optional(),
20129
20350
  source: external_exports.string().optional(),
20130
- config: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
20351
+ config: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
20352
+ // Present (and `true`) only on the resume leg of a paused agent run: the
20353
+ // runtime agent lane opens EVERY response with `execution_start`, so a
20354
+ // resumed stream re-opens an envelope a prior response already opened
20355
+ // (D-113, ratified — the richer shape wins). Consumers keep their run-level
20356
+ // state (turn counts, spend totals, transcript) across a start that carries
20357
+ // this flag instead of resetting for a new run. Absent on a first leg, on
20358
+ // every flow-lane start, and on durable/reconnect relays, which continue the
20359
+ // persisted sequence without a second start.
20360
+ resumed: external_exports.boolean().optional()
20131
20361
  });
20132
20362
  var unifiedExecutionCompleteEventSchema = external_exports.object({
20133
20363
  ...unifiedBase,
@@ -20642,7 +20872,7 @@ var UNIFIED_SSE_EVENT_TYPES = _unifiedTuple([
20642
20872
  "custom"
20643
20873
  ]);
20644
20874
 
20645
- // ../shared/dist/chunk-RRUEK47V.mjs
20875
+ // ../shared/dist/chunk-FYZWAHYL.mjs
20646
20876
  var mediaAnnotationsSchema = external_exports.object({
20647
20877
  audience: external_exports.array(external_exports.enum(["user", "assistant"])).optional()
20648
20878
  });
@@ -21926,6 +22156,13 @@ function stripTrailingChars(value, char) {
21926
22156
  }
21927
22157
  return end === value.length ? value : value.slice(0, end);
21928
22158
  }
22159
+ var RUNTYPE_SET_STATE_TOOL_NAME = "runtype_set_state";
22160
+ function isReservedRuntypeToolName(name) {
22161
+ return toolNamesCollideForAiSdk(name, RUNTYPE_SET_STATE_TOOL_NAME);
22162
+ }
22163
+ function reservedToolNameMessage(subject, name) {
22164
+ return `${subject} "${name}" collides with the reserved tool name "${RUNTYPE_SET_STATE_TOOL_NAME}" (the agent state write tool). Tool names are lowercased and non-alphanumeric characters become "_" before the model sees them, so every spelling that normalizes to it is reserved with it. "runtype_" is a reserved tool namespace. Rename the tool.`;
22165
+ }
21929
22166
  var configurationStatusSchema = external_exports.enum(["configured", "needs_configuration", "invalid"]);
21930
22167
  var secretDocsUrlSchema = external_exports.url({ protocol: /^https$/ }).max(2048);
21931
22168
  var secretRequirementSourceSchema = external_exports.object({
@@ -25589,6 +25826,39 @@ function validateReservedIdentityVariables(flowSteps, buckets, skipStepIndices)
25589
25826
  }
25590
25827
  }
25591
25828
  }
25829
+ var RESERVED_TOOL_NAME_CODE = "RESERVED_TOOL_NAME";
25830
+ function validateReservedToolNames(flowSteps, buckets) {
25831
+ for (const [stepIndex, step] of flowSteps.entries()) {
25832
+ if (!isObjectRecord(step.config)) continue;
25833
+ const tools = step.config.tools;
25834
+ if (!isObjectRecord(tools)) continue;
25835
+ const runtimeTools = tools.runtimeTools;
25836
+ if (!Array.isArray(runtimeTools)) continue;
25837
+ for (const [toolIndex, tool] of runtimeTools.entries()) {
25838
+ if (!isObjectRecord(tool)) continue;
25839
+ const name = tool.name;
25840
+ if (typeof name !== "string" || !isReservedRuntypeToolName(name)) continue;
25841
+ addIssue(
25842
+ "error",
25843
+ {
25844
+ code: RESERVED_TOOL_NAME_CODE,
25845
+ // Single-sourced with the api's author-time reject and the FPO agent
25846
+ // validator: one author sees this text from whichever lane catches it
25847
+ // first, and three hand-copies drift with nothing comparing them.
25848
+ message: reservedToolNameMessage("Runtime tool", name),
25849
+ path: `flowSteps[${stepIndex}].config.tools.runtimeTools[${toolIndex}].name`,
25850
+ step: { index: stepIndex, name: step.name, type: step.type },
25851
+ details: {
25852
+ name,
25853
+ reservedName: RUNTYPE_SET_STATE_TOOL_NAME,
25854
+ sanitizedName: sanitizeToolNameForAiSdk(name)
25855
+ }
25856
+ },
25857
+ buckets
25858
+ );
25859
+ }
25860
+ }
25861
+ }
25592
25862
  function promptResponseFormatIsNonJson(responseFormat) {
25593
25863
  if (typeof responseFormat !== "string") return true;
25594
25864
  return responseFormat.trim().toLowerCase() !== "json";
@@ -25667,8 +25937,9 @@ function validatePromptSystemPromptVolatility(flowSteps, buckets) {
25667
25937
  }
25668
25938
  }
25669
25939
  var APPROVAL_ENFORCED_ON_ATTENDED_SURFACES_ONLY_CODE = "APPROVAL_ENFORCED_ON_ATTENDED_SURFACES_ONLY";
25670
- var APPROVAL_ATTENDED_SURFACES = ["dispatch", "client-chat", "agent-execute"];
25940
+ var APPROVAL_ATTENDED_SURFACES = ["dispatch", "agent-execute"];
25671
25941
  var APPROVAL_UNATTENDED_SURFACES = [
25942
+ "client-chat",
25672
25943
  "schedule",
25673
25944
  "webhook",
25674
25945
  "batch",
@@ -25677,6 +25948,10 @@ var APPROVAL_UNATTENDED_SURFACES = [
25677
25948
  "mcp",
25678
25949
  "a2a"
25679
25950
  ];
25951
+ var APPROVAL_PREFLIGHT_REJECTED_SURFACES = ["client-chat"];
25952
+ var APPROVAL_LEGACY_FOLD_SURFACES = APPROVAL_UNATTENDED_SURFACES.filter(
25953
+ (surface) => surface !== "client-chat"
25954
+ );
25680
25955
  function validatePromptApprovalSurfaceEnforcement(flowSteps, buckets) {
25681
25956
  for (const [stepIndex, step] of flowSteps.entries()) {
25682
25957
  if (step.enabled === false) continue;
@@ -25686,18 +25961,20 @@ function validatePromptApprovalSurfaceEnforcement(flowSteps, buckets) {
25686
25961
  "warning",
25687
25962
  {
25688
25963
  code: APPROVAL_ENFORCED_ON_ATTENDED_SURFACES_ONLY_CODE,
25689
- message: `Step "${step.name}" arms a human approval gate (config.tools.approval.require), which is enforced only on attended surfaces that can present the prompt and resume the run: interactive dispatch, client chat, and agent execute. On unattended surfaces (${APPROVAL_UNATTENDED_SURFACES.join(", ")}) the flow runs on the legacy engine, which arms an approval gate only from the agent it dispatches and never from a flow step's own tools.approval, so these tools run without waiting for a decision. If they must not run unattended, keep this flow on attended surfaces, or move the approval requirement onto the agent an unattended surface dispatches so the gate travels with it.`,
25964
+ message: `Step "${step.name}" arms a human approval gate (config.tools.approval.require), which is enforced only on attended surfaces that can present the prompt and resume the run: interactive dispatch and agent execute. Client chat rejects approval-gated execution because it has no secure continuation channel back to the visitor. On the other unattended surfaces (${APPROVAL_LEGACY_FOLD_SURFACES.join(", ")}) the flow runs on the legacy engine, which arms an approval gate only from the agent it dispatches and never from a flow step's own tools.approval, so these tools run without waiting for a decision. If they must not run unattended, keep this flow on attended surfaces, or move the approval requirement onto the agent an unattended surface dispatches so the gate travels with it.`,
25690
25965
  path: `flowSteps[${stepIndex}].config.tools.approval`,
25691
25966
  step: { index: stepIndex, name: step.name, type: step.type },
25692
25967
  details: {
25693
25968
  attendedSurfaces: [...APPROVAL_ATTENDED_SURFACES],
25694
- unattendedSurfaces: [...APPROVAL_UNATTENDED_SURFACES]
25969
+ unattendedSurfaces: [...APPROVAL_UNATTENDED_SURFACES],
25970
+ preflightRejectedSurfaces: [...APPROVAL_PREFLIGHT_REJECTED_SURFACES]
25695
25971
  }
25696
25972
  },
25697
25973
  buckets
25698
25974
  );
25699
25975
  }
25700
25976
  }
25977
+ var STORE_VECTOR_MODEL_MISSING_CODE = "STORE_VECTOR_MODEL_MISSING";
25701
25978
  var STORE_VECTOR_SOURCE_MODELLESS_CODE = "STORE_VECTOR_SOURCE_MODELLESS";
25702
25979
  function validateStoreVectorSource(flowSteps, buckets, declaredFlowInputs) {
25703
25980
  const declaredVariables = collectDeclaredFlowInputs(flowSteps, declaredFlowInputs);
@@ -25728,23 +26005,53 @@ function validateStoreVectorSource(flowSteps, buckets, declaredFlowInputs) {
25728
26005
  "warning",
25729
26006
  {
25730
26007
  code: "STORE_VECTOR_SOURCE_UNRESOLVED",
25731
- message: `Vectors source "${rawSource}" references variable "${rootVariable}", but no earlier step declares an output variable "${rootVariable}" (and it is not a flow input). This will fail at runtime with "Could not resolve vectors". Set a prior step's outputVariable to "${rootVariable}" (typically a generate-embedding step), or declare "${rootVariable}" as a flow input.`,
26008
+ message: `Vectors source "${rawSource}" references variable "${rootVariable}", but no earlier step declares an output variable "${rootVariable}" (and it is not a flow input). This will fail at runtime because vectorsSource does not resolve to an embedding. Set a prior step's outputVariable to "${rootVariable}" (typically a generate-embedding step), or declare "${rootVariable}" as a flow input.`,
25732
26009
  path: `flowSteps[${stepIndex}].config.vectorsSource`,
25733
26010
  step: { index: stepIndex, name: step.name, type: step.type },
25734
26011
  details: { vectorsSource: rawSource, rootVariable }
25735
26012
  },
25736
26013
  buckets
25737
26014
  );
26015
+ } else if (config3.inputMode === "batch" && config3.destination === "pgvector") {
26016
+ const itemsField = typeof config3.inputVariable === "string" && config3.inputVariable.trim() ? "inputVariable" : "vectorsSource";
26017
+ const itemsVariable = itemsField === "inputVariable" ? config3.inputVariable.trim() : rootVariable;
26018
+ const itemsProducer = itemsVariable ? producers.get(itemsVariable) : void 0;
26019
+ if (itemsProducer?.type === "transform-data") {
26020
+ const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step, which could never have found a modelless row." : "";
26021
+ addIssue(
26022
+ "recommendation",
26023
+ {
26024
+ code: STORE_VECTOR_SOURCE_MODELLESS_CODE,
26025
+ message: `This pgvector batch store reads its items from "${itemsProducer.name}" (transform-data), whose output shape is script-defined. Each batch item must carry its own non-empty "embedding_model" string: the pgvector destination refuses a modelless item at execution time (a per-item "No embedding model" failure; a modelless row would be invisible to the vector-search step's model-filtered predicate).${searchNote} Stamp embedding_model on every item \u2014 a batch-mode generate-embedding step does this automatically \u2014 or spread each generate-embedding item's envelope when enriching.`,
26026
+ path: `flowSteps[${stepIndex}].config.${itemsField}`,
26027
+ step: { index: stepIndex, name: step.name, type: step.type },
26028
+ details: {
26029
+ vectorsSource: rawSource,
26030
+ inputMode: "batch",
26031
+ itemsField,
26032
+ itemsVariable,
26033
+ producerStepType: itemsProducer.type,
26034
+ producerStepIndex: itemsProducer.index,
26035
+ producerStepName: itemsProducer.name,
26036
+ hasVectorSearchInFlow
26037
+ }
26038
+ },
26039
+ buckets
26040
+ );
26041
+ }
25738
26042
  } else if (producer && config3.inputMode !== "batch" && config3.destination === "pgvector") {
25739
26043
  const dropsEnvelope = producer.type === "generate-embedding" && referencePath === "embedding";
25740
26044
  const isTransform = producer.type === "transform-data";
25741
26045
  if (dropsEnvelope || isTransform) {
25742
- const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step, so the row stored here would not come back from it." : "";
25743
- const message = dropsEnvelope ? `Vectors source "${rawSource}" reads "${referencePath}" off "${producer.name}" (generate-embedding), which extracts only the vector and drops the envelope's model and dimensions. store-vector has no embeddingModel config field, so the embedding_model column stays NULL on a first store and vector search (embedding_model = $model) never matches NULL \u2014 the row is stored but unfindable.${searchNote} Reference the whole output variable ("${rootVariable}") so the model and dimensions travel with the vector.` : `Vectors source "${rawSource}" comes from "${producer.name}" (transform-data), whose output shape is script-defined. store-vector has no embeddingModel config field: unless the script preserves the generate-embedding envelope's "model" string and numeric "dimensions", the embedding_model column stays NULL on a first store and vector search (embedding_model = $model) never matches NULL. Fabricating BOTH keys with unrelated values (e.g. the LLM model that produced the text) is worse \u2014 it passes the model-carrier check and overwrites a previously-correct embedding_model.${searchNote} Spread the whole generate-embedding envelope when enriching (e.g. { ...embeddingOutput, ...extras }), or feed store-vector from the generate-embedding output directly.`;
26046
+ const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step, which could never have found the row a modelless store would have written." : "";
26047
+ const eh = config3.errorHandling;
26048
+ const swallowsOnContinue = eh === "continue" || eh === "default" || isObjectRecord(eh) && (eh.onError === "continue" || eh.onError === "default");
26049
+ const executionOutcome = swallowsOnContinue ? `has its store refused and swallowed at execution time (your errorHandling: 'continue' substitutes the default value; nothing is stored)` : `fails at execution time`;
26050
+ const message = dropsEnvelope ? `Vectors source "${rawSource}" reads "${referencePath}" off "${producer.name}" (generate-embedding), which extracts only the vector and drops the envelope's model and dimensions. store-vector has no embeddingModel config field, and the pgvector destination requires the embedding model (the embedding_model column is part of the vector-search step's model-filtered predicate, and the label must describe the stored vector), so this step ${executionOutcome} instead of storing a row model-filtered vector search could never find.${searchNote} Reference the whole output variable ("${rootVariable}") so the model and dimensions travel with the vector.` : `Vectors source "${rawSource}" comes from "${producer.name}" (transform-data), whose output shape is script-defined. store-vector has no embeddingModel config field: unless the script preserves the generate-embedding envelope's "model" string and numeric "dimensions", the pgvector destination refuses the store at execution time (a modelless row would be invisible to the vector-search step's model-filtered predicate). Fabricating BOTH keys with unrelated values (e.g. the LLM model that produced the text) is worse \u2014 it passes the model-carrier check and overwrites a previously-correct embedding_model.${searchNote} Spread the whole generate-embedding envelope when enriching (e.g. { ...embeddingOutput, ...extras }), or feed store-vector from the generate-embedding output directly.`;
25744
26051
  addIssue(
25745
- "recommendation",
26052
+ dropsEnvelope ? "error" : "recommendation",
25746
26053
  {
25747
- code: STORE_VECTOR_SOURCE_MODELLESS_CODE,
26054
+ code: dropsEnvelope ? STORE_VECTOR_MODEL_MISSING_CODE : STORE_VECTOR_SOURCE_MODELLESS_CODE,
25748
26055
  message,
25749
26056
  path: `flowSteps[${stepIndex}].config.vectorsSource`,
25750
26057
  step: { index: stepIndex, name: step.name, type: step.type },
@@ -26853,6 +27160,7 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
26853
27160
  deps.declaredFlowInputs
26854
27161
  );
26855
27162
  validateReservedIdentityVariables(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
27163
+ validateReservedToolNames(flowData.flowSteps, buckets);
26856
27164
  validateUpsertRecordSourceShape(flowData.flowSteps, buckets);
26857
27165
  validateStoreVectorSource(flowData.flowSteps, buckets, deps.declaredFlowInputs);
26858
27166
  validateConditionExpressions(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
@@ -26904,6 +27212,39 @@ var SERIALIZED_HELPERS_SOURCE = `
26904
27212
  // Transform helper functions generated from the canonical portable factory.
26905
27213
  const helpers = (${createPortableHelpers.toString()})(${parseHTMLWithRegex.toString()})
26906
27214
  `.trim();
27215
+ function extractSecretReferences(template) {
27216
+ const keys = /* @__PURE__ */ new Set();
27217
+ let match;
27218
+ const regex = new RegExp(SECRET_REF_PATTERN.source, "g");
27219
+ while ((match = regex.exec(template)) !== null) {
27220
+ const key = match[1];
27221
+ if (key) keys.add(key);
27222
+ }
27223
+ return Array.from(keys);
27224
+ }
27225
+ function extractSecretReferencesFromAnyValue(value, maxDepth = 10) {
27226
+ const keys = /* @__PURE__ */ new Set();
27227
+ walk(value, 0);
27228
+ return Array.from(keys);
27229
+ function walk(v2, depth) {
27230
+ if (depth > maxDepth) return;
27231
+ if (typeof v2 === "string") {
27232
+ for (const key of extractSecretReferences(v2)) keys.add(key);
27233
+ return;
27234
+ }
27235
+ if (Array.isArray(v2)) {
27236
+ for (const item of v2) walk(item, depth + 1);
27237
+ return;
27238
+ }
27239
+ if (v2 && typeof v2 === "object") {
27240
+ for (const inner of Object.values(v2)) {
27241
+ walk(inner, depth + 1);
27242
+ }
27243
+ }
27244
+ }
27245
+ }
27246
+ var STORE_ASSET_MAX_BYTES = 25 * 1024 * 1024;
27247
+ var STORE_ASSET_MAX_BASE64_LENGTH = Math.ceil(STORE_ASSET_MAX_BYTES * (4 / 3)) + 16;
26907
27248
  var EMBEDDING_COST_PER_1K_TOKENS = Object.freeze({
26908
27249
  "text-embedding-3-small": 2e-5,
26909
27250
  // $0.02 per 1M tokens
@@ -27083,6 +27424,8 @@ var runtimeArtifactManifestSchema = external_exports.object({
27083
27424
  })
27084
27425
  });
27085
27426
  var KNOWN_FLOW_STEP_TYPES = new Set(FLOW_STEP_TYPES);
27427
+ var DURABLE_STEP_TYPES = ["wait-until", "crawl"];
27428
+ var DURABLE_STEP_TYPE_SET = new Set(DURABLE_STEP_TYPES);
27086
27429
  var API_INPROCESS_CAPABILITY_MATRIX = {
27087
27430
  target: "api-inprocess",
27088
27431
  // Bumped 2026-08-05.3: graduates `conditionalNestedExecuteAgentStep` to
@@ -27325,7 +27668,7 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
27325
27668
  unmaterializedPromptToolRefs: false
27326
27669
  }
27327
27670
  };
27328
- var DURABLE_HOSTED_STEP_TYPES = /* @__PURE__ */ new Set(["wait-until", "crawl"]);
27671
+ var DURABLE_HOSTED_STEP_TYPES = new Set(DURABLE_STEP_TYPES);
27329
27672
  var API_DURABLE_HOSTED_CAPABILITY_MATRIX = {
27330
27673
  ...API_INPROCESS_CAPABILITY_MATRIX,
27331
27674
  unsupportedStepTypes: API_INPROCESS_CAPABILITY_MATRIX.unsupportedStepTypes.filter(
@@ -28646,37 +28989,6 @@ var identityProofSchema = external_exports.object({
28646
28989
  }).describe(
28647
28990
  "Customer-native auth proof for the Identity Exchange. When present and the surface has a matching integration, the verified tenant/end-user replace any body-asserted tenant/endUser (which are never trusted for web-embedded callers). When Identity Exchange admission is disabled for the caller, the proof is accepted but ignored and confers no trust."
28648
28991
  );
28649
- function extractSecretReferences(template) {
28650
- const keys = /* @__PURE__ */ new Set();
28651
- let match;
28652
- const regex = new RegExp(SECRET_REF_PATTERN.source, "g");
28653
- while ((match = regex.exec(template)) !== null) {
28654
- const key = match[1];
28655
- if (key) keys.add(key);
28656
- }
28657
- return Array.from(keys);
28658
- }
28659
- function extractSecretReferencesFromAnyValue(value, maxDepth = 10) {
28660
- const keys = /* @__PURE__ */ new Set();
28661
- walk(value, 0);
28662
- return Array.from(keys);
28663
- function walk(v2, depth) {
28664
- if (depth > maxDepth) return;
28665
- if (typeof v2 === "string") {
28666
- for (const key of extractSecretReferences(v2)) keys.add(key);
28667
- return;
28668
- }
28669
- if (Array.isArray(v2)) {
28670
- for (const item of v2) walk(item, depth + 1);
28671
- return;
28672
- }
28673
- if (v2 && typeof v2 === "object") {
28674
- for (const inner of Object.values(v2)) {
28675
- walk(inner, depth + 1);
28676
- }
28677
- }
28678
- }
28679
- }
28680
28992
  var ACCOUNT_QUERY_PARAM = "account";
28681
28993
  function buildDashboardUrl(opts) {
28682
28994
  const base = stripTrailingChars(opts.baseUrl, "/");
@@ -28884,7 +29196,10 @@ var agentExternalConfigSchema = external_exports.object({
28884
29196
  auth: external_exports.record(external_exports.string(), external_exports.any()).optional(),
28885
29197
  timeout: external_exports.number().positive().optional(),
28886
29198
  retryCount: external_exports.number().int().nonnegative().optional(),
28887
- skillOrchestration: external_exports.boolean().optional()
29199
+ // Canonical enum plus the historical boolean input. The ensure path
29200
+ // normalizes booleans before persistence, so newly converged rows never
29201
+ // perpetuate the legacy representation.
29202
+ skillOrchestration: external_exports.union([external_exports.enum(["delegate", "managed"]), external_exports.boolean()]).optional()
28888
29203
  });
28889
29204
  var agentClaudeManagedConfigSchema = external_exports.object({
28890
29205
  setupMode: external_exports.enum(["create", "connect"]).optional(),
@@ -29485,7 +29800,11 @@ function mergeResults(...results) {
29485
29800
  merged.valid = merged.errors.length === 0;
29486
29801
  return merged;
29487
29802
  }
29488
- var NAMESPACE_VARIABLE_CODES = new Set(NAMESPACE_VARIABLE_REFERENCE_CODES);
29803
+ var FORWARDED_CORE_CODES = /* @__PURE__ */ new Set([
29804
+ ...NAMESPACE_VARIABLE_REFERENCE_CODES,
29805
+ RESERVED_TOOL_NAME_CODE,
29806
+ STORE_VECTOR_MODEL_MISSING_CODE
29807
+ ]);
29489
29808
  function validateFlowDefinition(flow, capIndex, context) {
29490
29809
  const result = emptyResult();
29491
29810
  const base = `capabilities[${capIndex}].flow`;
@@ -29546,19 +29865,19 @@ function validateFlowDefinition(flow, capIndex, context) {
29546
29865
  }
29547
29866
  }
29548
29867
  }
29549
- appendNamespaceVariableIssues(flow, base, result);
29868
+ appendForwardedCoreIssues(flow, base, result);
29550
29869
  return finalize2(result);
29551
29870
  }
29552
29871
  function reprefixCorePath(corePath, base) {
29553
29872
  if (!corePath) return `${base}.steps`;
29554
29873
  return corePath.replace(/^flowSteps\[/, `${base}.steps[`);
29555
29874
  }
29556
- function appendNamespaceVariableIssues(flow, base, result) {
29875
+ function appendForwardedCoreIssues(flow, base, result) {
29557
29876
  const parsed = parseCreateFlowValidationInput({ name: flow.name, flowSteps: flow.steps });
29558
29877
  if (!parsed.success) return;
29559
29878
  const coreResult = validateFlowStructure(parsed.data);
29560
29879
  const push = (issue2, severity) => {
29561
- if (!NAMESPACE_VARIABLE_CODES.has(issue2.code)) return;
29880
+ if (!FORWARDED_CORE_CODES.has(issue2.code)) return;
29562
29881
  const bucket = severity === "error" ? result.errors : result.warnings;
29563
29882
  bucket.push(createIssue(severity, issue2.code, issue2.message, reprefixCorePath(issue2.path, base)));
29564
29883
  };
@@ -29569,6 +29888,14 @@ function finalize2(r) {
29569
29888
  r.valid = r.errors.length === 0;
29570
29889
  return r;
29571
29890
  }
29891
+ function reservedToolNameIssue(name, path20) {
29892
+ return createIssue(
29893
+ "error",
29894
+ RESERVED_TOOL_NAME_CODE,
29895
+ reservedToolNameMessage("Runtime tool", name),
29896
+ path20
29897
+ );
29898
+ }
29572
29899
  function validateAgentDefinition(agent, capIndex) {
29573
29900
  const result = emptyResult();
29574
29901
  const base = `capabilities[${capIndex}].agent`;
@@ -29627,6 +29954,10 @@ function validateFlatAgent(agent, base, result) {
29627
29954
  result.errors.push(
29628
29955
  createIssue("error", "RUNTIME_TOOL_NAME_EMPTY", "Runtime tool name is required", `${base}.toolsConfig.runtimeTools[${i}].name`)
29629
29956
  );
29957
+ } else if (isReservedRuntypeToolName(tool.name)) {
29958
+ result.errors.push(
29959
+ reservedToolNameIssue(tool.name, `${base}.toolsConfig.runtimeTools[${i}].name`)
29960
+ );
29630
29961
  }
29631
29962
  if (tool.toolType === "flow" && (!tool.config?.steps || !Array.isArray(tool.config.steps) || tool.config.steps.length === 0)) {
29632
29963
  result.warnings.push(
@@ -29656,6 +29987,10 @@ function validateNestedAgent(agent, base, result) {
29656
29987
  result.errors.push(
29657
29988
  createIssue("error", "RUNTIME_TOOL_NAME_EMPTY", "Runtime tool name is required", `${base}.config.tools.runtimeTools[${i}].name`)
29658
29989
  );
29990
+ } else if (isReservedRuntypeToolName(tool.name)) {
29991
+ result.errors.push(
29992
+ reservedToolNameIssue(tool.name, `${base}.config.tools.runtimeTools[${i}].name`)
29993
+ );
29659
29994
  }
29660
29995
  if (tool.toolType === "flow" && (!tool.config?.steps || !Array.isArray(tool.config.steps) || tool.config.steps.length === 0)) {
29661
29996
  result.warnings.push(
@@ -30819,9 +31154,9 @@ var RecordInputSchema = external_exports.object({
30819
31154
  id: external_exports.string().min(1).optional(),
30820
31155
  name: external_exports.string().min(1).optional(),
30821
31156
  type: external_exports.string().min(1).optional(),
30822
- // First-class owner field. Stored as `metadata.ownerId` and queryable via
30823
- // the `?ownerId=` conversations list filter; a top-level value overrides
30824
- // any `metadata.ownerId`.
31157
+ // First-class owner field. Persisted to the dedicated indexed `owner_id`
31158
+ // column (#3395) and queryable via the `?ownerId=` filter on the
31159
+ // conversations AND records list endpoints.
30825
31160
  ownerId: external_exports.string().min(1).optional(),
30826
31161
  metadata: external_exports.record(external_exports.string(), external_exports.any()).optional()
30827
31162
  }).refine((data) => data.id || data.name && data.type, {
@@ -31129,16 +31464,17 @@ var DispatchRequestEnvelopeSchema = external_exports.object({
31129
31464
  debugMode: external_exports.boolean().optional().default(false),
31130
31465
  loggingPolicy: external_exports.enum(["default", "on", "off"]).optional(),
31131
31466
  useRuntimePackage: external_exports.boolean().optional().describe(
31132
- "For FLOW dispatches this compatibility field is accepted but ignored: eligible flows always use the @runtypelabs/runtime lane, while ineligible flows still fold to legacy silently. Agent dispatches still require an explicit `true` and remain subject to their separate runtime-agent rollout gate."
31467
+ "Compatibility execution-lane OPT-OUT. For FLOW dispatches the field is accepted but ignored: eligible flows always use the @runtypelabs/runtime lane, while ineligible flows still fold to legacy silently. For AGENT dispatches, an eligible agent now uses the @runtypelabs/runtime lane by DEFAULT when this field is omitted; only an explicit `false` forces the legacy engine. Definitions the runtime lane cannot execute faithfully still fold to legacy on their own."
31133
31468
  ),
31134
31469
  /** Route prompt model calls through an attached dashboard browser. */
31135
31470
  localInference: LocalInferenceSelectionSchema.optional(),
31136
31471
  /**
31137
31472
  * Resume a checkpointed agent-loop execution from its latest (or a
31138
- * specific) iteration-boundary snapshot. Runtime-path only: requires
31139
- * `useRuntimePackage: true` and an `agent` input — the legacy engine
31140
- * has no checkpoint hook, so sending this without the runtime path is
31141
- * rejected (400) rather than silently starting a fresh conversation.
31473
+ * specific) iteration-boundary snapshot. Runtime-path only: requires a
31474
+ * runtime-eligible `agent` input and no `useRuntimePackage: false`
31475
+ * opt-out — the legacy engine has no checkpoint hook, so sending this
31476
+ * without the runtime path is rejected (400) rather than silently
31477
+ * starting a fresh conversation.
31142
31478
  * `executionId` is the handle carried on every agent SSE event of the
31143
31479
  * original run. Per the runtime resume contract, `messages` on this
31144
31480
  * request are APPENDED after the snapshot's conversation history —
@@ -31207,12 +31543,12 @@ var DispatchRequestSchema = external_exports.union([
31207
31543
  DispatchRequestEnvelopeSchema.extend({ agent: AgentInputSchema })
31208
31544
  ]).superRefine((data, ctx) => {
31209
31545
  if (!data.options.localInference) return;
31210
- const runtimeLaneDisabled = data.agent != null && data.options.useRuntimePackage !== true;
31546
+ const runtimeLaneDisabled = data.agent != null && data.options.useRuntimePackage === false;
31211
31547
  if (runtimeLaneDisabled) {
31212
31548
  ctx.addIssue({
31213
31549
  code: "custom",
31214
31550
  path: ["options", "useRuntimePackage"],
31215
- message: data.agent != null ? "Local agent inference requires useRuntimePackage to be enabled" : "Local flow inference cannot use the legacy engine"
31551
+ message: data.agent != null ? "Local agent inference cannot use the legacy engine; remove useRuntimePackage: false" : "Local flow inference cannot use the legacy engine"
31216
31552
  });
31217
31553
  }
31218
31554
  if (data.options.modelOverride) {
@@ -31274,7 +31610,8 @@ var RuntimeProxyMessageSchema = external_exports.object({
31274
31610
  var RuntimeProxyToolSchema = external_exports.object({
31275
31611
  name: external_exports.string().min(1),
31276
31612
  description: external_exports.string(),
31277
- parametersSchema: external_exports.record(external_exports.string(), external_exports.unknown())
31613
+ parametersSchema: external_exports.record(external_exports.string(), external_exports.unknown()),
31614
+ builtinNameCompatibility: external_exports.object({ canonicalToolId: external_exports.string(), legacyModelName: external_exports.string() }).optional()
31278
31615
  });
31279
31616
  var RuntimeProxyProviderToolSchema = external_exports.object({
31280
31617
  id: external_exports.string().min(1),
@@ -31390,7 +31727,11 @@ var RuntimeStoredRecordSchema = external_exports.object({
31390
31727
  metadataLabels: external_exports.record(external_exports.string(), external_exports.string()).nullable().optional(),
31391
31728
  schemaValid: external_exports.boolean().nullable().optional(),
31392
31729
  messages: external_exports.array(external_exports.object({ role: external_exports.string(), content: external_exports.string() })).nullable().optional(),
31393
- productSurfaceId: external_exports.string().nullable().optional()
31730
+ productSurfaceId: external_exports.string().nullable().optional(),
31731
+ // First-class owner key (#3395) — part of the same projection as the public
31732
+ // GET /v1/records response (recordResponseColumns), which surfaces the column
31733
+ // value. Optional for api/runtime version skew, like the columns above.
31734
+ ownerId: external_exports.string().nullable().optional()
31394
31735
  });
31395
31736
  var FILTER_FIELD_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$/;
31396
31737
  var runtimeRecordFilterConditionSchema = external_exports.object({
@@ -31916,6 +32257,7 @@ var appRoutingDocSchema = external_exports.object({
31916
32257
  });
31917
32258
  var DEFAULT_STEP_TIMEOUT_MS = 5 * 60 * 1e3;
31918
32259
  var DEFAULT_FLOW_TIMEOUT_MS = 15 * 60 * 1e3;
32260
+ var DEFAULT_AGENT_WALL_CLOCK_TIMEOUT_MS = 5 * 60 * 1e3;
31919
32261
 
31920
32262
  // src/config/env.ts
31921
32263
  function getApiUrl() {
@@ -33900,10 +34242,24 @@ function renderMessageContentWithImages(content, protocol) {
33900
34242
  }
33901
34243
 
33902
34244
  // src/commands/records.ts
34245
+ function resolveOwnerIdUpdate(options) {
34246
+ if (options.clearOwner && options.ownerId !== void 0) {
34247
+ throw new Error("--owner-id and --clear-owner are mutually exclusive");
34248
+ }
34249
+ if (options.clearOwner) return { ownerId: null };
34250
+ if (options.ownerId === void 0) return void 0;
34251
+ if (options.ownerId.trim() === "") {
34252
+ throw new Error("--owner-id cannot be empty; use --clear-owner to remove the owner");
34253
+ }
34254
+ return { ownerId: options.ownerId };
34255
+ }
33903
34256
  function printRecordDetail(data, imageProtocol) {
33904
34257
  console.log(` ID: ${data.id}`);
33905
34258
  console.log(` Name: ${data.name}`);
33906
34259
  console.log(` Type: ${data.type}`);
34260
+ if (data.ownerId) {
34261
+ console.log(` Owner: ${data.ownerId}`);
34262
+ }
33907
34263
  if (data.metadata) {
33908
34264
  console.log(` Metadata: ${JSON.stringify(data.metadata, null, 2)}`);
33909
34265
  }
@@ -33929,13 +34285,14 @@ Messages (${messages.length}):`));
33929
34285
  }
33930
34286
  }
33931
34287
  var recordsCommand = new Command3("records").description("Manage records");
33932
- recordsCommand.command("list").description("List all records").option("--type <type>", "Filter by record type").option("--limit <n>", "Limit number of results", "20").option("--cursor <cursor>", "Pagination cursor for the next page").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
34288
+ recordsCommand.command("list").description("List all records").option("--type <type>", "Filter by record type").option("--owner-id <id>", "Filter by owner key (the indexed owner_id column)").option("--limit <n>", "Limit number of results", "20").option("--cursor <cursor>", "Pagination cursor for the next page").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
33933
34289
  async (options) => {
33934
34290
  const apiKey = await ensureAuth();
33935
34291
  if (!apiKey) return;
33936
34292
  const client = createCliClient(apiKey);
33937
34293
  const params = { limit: options.limit };
33938
34294
  if (options.type) params.type = options.type;
34295
+ if (options.ownerId) params.ownerId = options.ownerId;
33939
34296
  if (options.cursor) params.cursor = options.cursor;
33940
34297
  if (!isTTY(options) || options.json) {
33941
34298
  try {
@@ -34047,6 +34404,7 @@ recordsCommand.command("get <id>").description("Get record details").option("--j
34047
34404
  { label: "ID", value: record2.id, color: "green" },
34048
34405
  { label: "Name", value: record2.name },
34049
34406
  { label: "Type", value: record2.type },
34407
+ { label: "Owner", value: record2.ownerId ?? null },
34050
34408
  {
34051
34409
  label: "Metadata",
34052
34410
  value: record2.metadata ? JSON.stringify(record2.metadata) : null
@@ -34191,7 +34549,7 @@ recordsCommand.command("costs <id>").description("Get aggregated cost breakdown
34191
34549
  const { waitUntilExit } = render3(React3.createElement(App));
34192
34550
  await waitUntilExit();
34193
34551
  });
34194
- recordsCommand.command("create").description("Create a new record").requiredOption("-n, --name <name>", "Record name").requiredOption("-t, --type <type>", "Record type").option("-m, --metadata <json>", "Metadata as JSON string").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
34552
+ recordsCommand.command("create").description("Create a new record").requiredOption("-n, --name <name>", "Record name").requiredOption("-t, --type <type>", "Record type").option("-m, --metadata <json>", "Metadata as JSON string").option("--owner-id <id>", "Owner key for the record (the indexed owner_id column)").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
34195
34553
  async (options) => {
34196
34554
  const apiKey = await ensureAuth();
34197
34555
  if (!apiKey) return;
@@ -34205,11 +34563,13 @@ recordsCommand.command("create").description("Create a new record").requiredOpti
34205
34563
  process.exit(1);
34206
34564
  }
34207
34565
  }
34566
+ const ownerFields = options.ownerId !== void 0 ? { ownerId: options.ownerId } : {};
34208
34567
  if (!isTTY(options) || options.json) {
34209
34568
  try {
34210
34569
  const data = await client.post("/records", {
34211
34570
  name: options.name,
34212
34571
  type: options.type,
34572
+ ...ownerFields,
34213
34573
  metadata
34214
34574
  });
34215
34575
  if (options.json) {
@@ -34235,6 +34595,7 @@ recordsCommand.command("create").description("Create a new record").requiredOpti
34235
34595
  client.post("/records", {
34236
34596
  name: options.name,
34237
34597
  type: options.type,
34598
+ ...ownerFields,
34238
34599
  metadata
34239
34600
  }).then((data) => {
34240
34601
  setResult(data);
@@ -34323,7 +34684,7 @@ recordsCommand.command("delete <id>").description("Delete a record").option("--t
34323
34684
  const { waitUntilExit } = render3(React3.createElement(App));
34324
34685
  await waitUntilExit();
34325
34686
  });
34326
- recordsCommand.command("update <id>").description("Update a record (name, type, and/or metadata)").option("-n, --name <name>", "New record name").option("-t, --type <type>", "New record type").option("-m, --metadata <json>", "Metadata as JSON string").option("--from-file <path>", "Read the full update payload from a JSON file").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
34687
+ recordsCommand.command("update <id>").description("Update a record (name, type, and/or metadata)").option("-n, --name <name>", "New record name").option("-t, --type <type>", "New record type").option("-m, --metadata <json>", "Metadata as JSON string").option("--owner-id <id>", "Reassign the owner key (the indexed owner_id column)").option("--clear-owner", "Clear the owner key (sends an explicit null)").option("--from-file <path>", "Read the full update payload from a JSON file").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(
34327
34688
  async (id, options) => {
34328
34689
  const apiKey = await ensureAuth();
34329
34690
  if (!apiKey) return;
@@ -34342,9 +34703,18 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
34342
34703
  process.exit(1);
34343
34704
  }
34344
34705
  }
34706
+ try {
34707
+ const ownerUpdate = resolveOwnerIdUpdate(options);
34708
+ if (ownerUpdate) body.ownerId = ownerUpdate.ownerId;
34709
+ } catch (error51) {
34710
+ console.error(chalk6.red(error51 instanceof Error ? error51.message : String(error51)));
34711
+ process.exit(1);
34712
+ }
34345
34713
  if (Object.keys(body).length === 0) {
34346
34714
  console.error(
34347
- chalk6.red("Error: provide at least one of --name, --type, --metadata, or --from-file")
34715
+ chalk6.red(
34716
+ "Error: provide at least one of --name, --type, --metadata, --owner-id, --clear-owner, or --from-file"
34717
+ )
34348
34718
  );
34349
34719
  process.exit(1);
34350
34720
  }
@@ -34359,6 +34729,7 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
34359
34729
  console.log(` ID: ${chalk6.green(data.id)}`);
34360
34730
  console.log(` Name: ${data.name}`);
34361
34731
  console.log(` Type: ${data.type}`);
34732
+ console.log(` Owner: ${data.ownerId ?? "(none)"}`);
34362
34733
  if (data.metadata) {
34363
34734
  console.log(` Metadata: ${JSON.stringify(data.metadata)}`);
34364
34735
  }
@@ -34384,6 +34755,7 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
34384
34755
  { label: "ID", value: data.id, color: "green" },
34385
34756
  { label: "Name", value: data.name },
34386
34757
  { label: "Type", value: data.type },
34758
+ { label: "Owner", value: data.ownerId ?? null },
34387
34759
  {
34388
34760
  label: "Metadata",
34389
34761
  value: data.metadata ? JSON.stringify(data.metadata) : null,
@@ -34561,48 +34933,49 @@ recordsCommand.command("bulk-edit").description("Bulk edit record metadata (payl
34561
34933
  const { waitUntilExit } = render3(React3.createElement(App));
34562
34934
  await waitUntilExit();
34563
34935
  });
34564
- recordsCommand.command("export").description("Export records to a file").option("--type <type>", "Filter by record type").option("--limit <n>", "Maximum records to export", "100").option("-o, --output <file>", "Output file path").option("--format <format>", "Export format (json, csv)", "json").action(async (options) => {
34565
- const apiKey = await ensureAuth();
34566
- if (!apiKey) return;
34567
- console.log(chalk6.gray("Exporting records..."));
34568
- try {
34569
- const client = createCliClient(apiKey);
34570
- const params = { limit: options.limit };
34571
- if (options.type) params.type = options.type;
34572
- const data = await client.get("/records", params);
34573
- const records = data.data ?? [];
34574
- if (records.length === 0) {
34575
- console.log(chalk6.yellow("No records to export"));
34576
- return;
34577
- }
34578
- let content;
34579
- if (options.format === "csv") {
34580
- const headers = ["id", "name", "type", "metadata"];
34581
- const rows = records.map((r) => [
34582
- r.id,
34583
- r.name,
34584
- r.type,
34585
- r.metadata ? JSON.stringify(r.metadata) : ""
34586
- ]);
34587
- content = [headers.join(","), ...rows.map((r) => r.map(csvEscape).join(","))].join("\n");
34588
- } else {
34589
- content = JSON.stringify(records, null, 2);
34936
+ recordsCommand.command("export").description("Export records to a file").option("--type <type>", "Filter by record type").option("--owner-id <id>", "Filter by owner key (the indexed owner_id column)").option("--limit <n>", "Maximum records to export", "100").option("-o, --output <file>", "Output file path").option("--format <format>", "Export format (json, csv)", "json").action(
34937
+ async (options) => {
34938
+ const apiKey = await ensureAuth();
34939
+ if (!apiKey) return;
34940
+ console.log(chalk6.gray("Exporting records..."));
34941
+ try {
34942
+ const client = createCliClient(apiKey);
34943
+ const params = { limit: options.limit };
34944
+ if (options.type) params.type = options.type;
34945
+ if (options.ownerId) params.ownerId = options.ownerId;
34946
+ const data = await client.get("/records", params);
34947
+ const records = data.data ?? [];
34948
+ if (records.length === 0) {
34949
+ console.log(chalk6.yellow("No records to export"));
34950
+ return;
34951
+ }
34952
+ let content;
34953
+ if (options.format === "csv") {
34954
+ const headers = ["id", "name", "type", "ownerId", "metadata"];
34955
+ const rows = records.map((r) => [
34956
+ r.id,
34957
+ r.name,
34958
+ r.type,
34959
+ r.ownerId ?? "",
34960
+ r.metadata ? JSON.stringify(r.metadata) : ""
34961
+ ]);
34962
+ content = [headers.join(","), ...rows.map((r) => r.map(csvEscape).join(","))].join("\n");
34963
+ } else {
34964
+ content = JSON.stringify(records, null, 2);
34965
+ }
34966
+ const filename = options.output || `records-export-${Date.now()}.${options.format === "csv" ? "csv" : "json"}`;
34967
+ writeFileSync(filename, content);
34968
+ console.log(chalk6.green(`Exported ${records.length} records to ${filename}`));
34969
+ } catch (error51) {
34970
+ const message = error51 instanceof Error ? error51.message : "Unknown error";
34971
+ console.error(chalk6.red(`Failed to export records: ${message}`));
34972
+ process.exit(1);
34590
34973
  }
34591
- const filename = options.output || `records-export-${Date.now()}.${options.format === "csv" ? "csv" : "json"}`;
34592
- writeFileSync(filename, content);
34593
- console.log(chalk6.green(`Exported ${records.length} records to ${filename}`));
34594
- } catch (error51) {
34595
- const message = error51 instanceof Error ? error51.message : "Unknown error";
34596
- console.error(chalk6.red(`Failed to export records: ${message}`));
34597
- process.exit(1);
34598
34974
  }
34599
- });
34975
+ );
34600
34976
  recordsCommand.command("typegen").description(
34601
34977
  "Generate TypeScript types for your schematized record collections. Writes a .d.ts that augments the @runtypelabs/sdk RecordCollections map so client.records.from(slug) types record metadata. Commit the file and re-run this in CI, diffing against the committed copy (e.g. `runtype records typegen -o runtype-records.d.ts && git diff --exit-code runtype-records.d.ts`), to catch collection-schema drift."
34602
- ).option(
34603
- "-o, --output <file>",
34604
- "Write the declarations to a file (default: print to stdout)"
34605
- ).action(async (options) => {
34978
+ ).option("-o, --output <file>", "Write the declarations to a file (default: print to stdout)").action(async (options) => {
34606
34979
  const apiKey = await ensureAuth();
34607
34980
  if (!apiKey) return;
34608
34981
  const client = createCliClient(apiKey);
@@ -39061,11 +39434,11 @@ Messages (${messages.length}):`));
39061
39434
  }
39062
39435
  }
39063
39436
  var conversationsCommand = new Command16("conversations").description("Manage conversations");
39064
- conversationsCommand.command("list").description("List your conversations").option("--limit <n>", "Limit results (defaults to the API page size)").option("--cursor <cursor>", "Pagination cursor for the next page").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(async (options) => {
39437
+ conversationsCommand.command("list").description("List your conversations").option("--owner-id <id>", "Filter by owner key (the indexed owner_id column)").option("--limit <n>", "Limit results (defaults to the API page size)").option("--cursor <cursor>", "Pagination cursor for the next page").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(async (options) => {
39065
39438
  const apiKey = await ensureAuth();
39066
39439
  if (!apiKey) return;
39067
39440
  const client = createCliClient(apiKey);
39068
- const params = buildListParams(options);
39441
+ const params = buildListParams(options, { ownerId: options.ownerId });
39069
39442
  if (!isTTY(options) || options.json) {
39070
39443
  try {
39071
39444
  const data = await client.get("/conversations", params);