@runtypelabs/cli 2.33.16 → 2.34.0
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.
- package/dist/index.js +443 -192
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -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-
|
|
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": "
|
|
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": "
|
|
15767
|
+
"vercel": "spacexai/grok-4.20-non-reasoning"
|
|
15690
15768
|
},
|
|
15691
15769
|
"grok-4-20-reasoning": {
|
|
15692
|
-
"vercel": "
|
|
15770
|
+
"vercel": "spacexai/grok-4.20-reasoning"
|
|
15693
15771
|
},
|
|
15694
15772
|
"grok-4-3": {
|
|
15695
|
-
"vercel": "
|
|
15773
|
+
"vercel": "spacexai/grok-4.3",
|
|
15696
15774
|
"xai": "grok-4.3"
|
|
15697
15775
|
},
|
|
15698
15776
|
"grok-4-5": {
|
|
15699
|
-
"vercel": "
|
|
15777
|
+
"vercel": "spacexai/grok-4.5",
|
|
15700
15778
|
"xai": "grok-4.5"
|
|
15701
15779
|
},
|
|
15702
15780
|
"grok-4-6": {
|
|
15703
|
-
"vercel": "
|
|
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": "
|
|
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": "
|
|
15797
|
+
"vercel": "spacexai/grok-4.20-non-reasoning"
|
|
15720
15798
|
},
|
|
15721
15799
|
"grok-4.20-reasoning": {
|
|
15722
|
-
"vercel": "
|
|
15800
|
+
"vercel": "spacexai/grok-4.20-reasoning"
|
|
15723
15801
|
},
|
|
15724
15802
|
"grok-4.3": {
|
|
15725
|
-
"vercel": "
|
|
15803
|
+
"vercel": "spacexai/grok-4.3",
|
|
15726
15804
|
"xai": "grok-4.3"
|
|
15727
15805
|
},
|
|
15728
15806
|
"grok-4.5": {
|
|
15729
|
-
"vercel": "
|
|
15807
|
+
"vercel": "spacexai/grok-4.5",
|
|
15730
15808
|
"xai": "grok-4.5"
|
|
15731
15809
|
},
|
|
15732
15810
|
"grok-4.6": {
|
|
15733
|
-
"vercel": "
|
|
15811
|
+
"vercel": "spacexai/grok-4.6",
|
|
15734
15812
|
"xai": "grok-4.6"
|
|
15735
15813
|
},
|
|
15736
15814
|
"grok-build-0-1": {
|
|
15737
|
-
"vercel": "
|
|
15815
|
+
"vercel": "spacexai/grok-build-0.1",
|
|
15738
15816
|
"xai": "grok-build-0.1"
|
|
15739
15817
|
},
|
|
15740
15818
|
"grok-build-0.1": {
|
|
15741
|
-
"vercel": "
|
|
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": "
|
|
15823
|
+
"vercel": "spacexai/grok-voice-think-fast-1.0"
|
|
15752
15824
|
},
|
|
15753
15825
|
"grok-voice-think-fast-1.0": {
|
|
15754
|
-
"vercel": "
|
|
15826
|
+
"vercel": "spacexai/grok-voice-think-fast-1.0"
|
|
15755
15827
|
},
|
|
15756
15828
|
"grok-voice-think-fast-2-0": {
|
|
15757
|
-
"vercel": "
|
|
15829
|
+
"vercel": "spacexai/grok-voice-think-fast-2.0"
|
|
15758
15830
|
},
|
|
15759
15831
|
"grok-voice-think-fast-2.0": {
|
|
15760
|
-
"vercel": "
|
|
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": "
|
|
16361
|
+
"vercel": "spacexai/grok-4.3",
|
|
16266
16362
|
"xai": "grok-4.3"
|
|
16267
16363
|
},
|
|
16268
16364
|
"grok-4-fast": {
|
|
16269
|
-
"vercel": "
|
|
16365
|
+
"vercel": "spacexai/grok-4.20-non-reasoning"
|
|
16270
16366
|
},
|
|
16271
16367
|
"grok-4.1-fast-non-reasoning": {
|
|
16272
|
-
"vercel": "
|
|
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-
|
|
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-
|
|
17214
|
+
// ../shared/dist/chunk-PFWPHO6A.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
|
-
|
|
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.
|
|
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: [
|
|
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
|
|
@@ -20048,7 +20158,7 @@ function resolveFallback(parsed, context, tracking, options = {}) {
|
|
|
20048
20158
|
}
|
|
20049
20159
|
var templateEngine = new SimpleTemplateEngine();
|
|
20050
20160
|
|
|
20051
|
-
// ../shared/dist/chunk-
|
|
20161
|
+
// ../shared/dist/chunk-4R2DUEEJ.mjs
|
|
20052
20162
|
function unwrapVectorSourceTemplate(source) {
|
|
20053
20163
|
const trimmed2 = source.trim();
|
|
20054
20164
|
if (!trimmed2.startsWith("{{") || !trimmed2.endsWith("}}")) return source;
|
|
@@ -21926,6 +22036,13 @@ function stripTrailingChars(value, char) {
|
|
|
21926
22036
|
}
|
|
21927
22037
|
return end === value.length ? value : value.slice(0, end);
|
|
21928
22038
|
}
|
|
22039
|
+
var RUNTYPE_SET_STATE_TOOL_NAME = "runtype_set_state";
|
|
22040
|
+
function isReservedRuntypeToolName(name) {
|
|
22041
|
+
return toolNamesCollideForAiSdk(name, RUNTYPE_SET_STATE_TOOL_NAME);
|
|
22042
|
+
}
|
|
22043
|
+
function reservedToolNameMessage(subject, name) {
|
|
22044
|
+
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.`;
|
|
22045
|
+
}
|
|
21929
22046
|
var configurationStatusSchema = external_exports.enum(["configured", "needs_configuration", "invalid"]);
|
|
21930
22047
|
var secretDocsUrlSchema = external_exports.url({ protocol: /^https$/ }).max(2048);
|
|
21931
22048
|
var secretRequirementSourceSchema = external_exports.object({
|
|
@@ -25589,6 +25706,39 @@ function validateReservedIdentityVariables(flowSteps, buckets, skipStepIndices)
|
|
|
25589
25706
|
}
|
|
25590
25707
|
}
|
|
25591
25708
|
}
|
|
25709
|
+
var RESERVED_TOOL_NAME_CODE = "RESERVED_TOOL_NAME";
|
|
25710
|
+
function validateReservedToolNames(flowSteps, buckets) {
|
|
25711
|
+
for (const [stepIndex, step] of flowSteps.entries()) {
|
|
25712
|
+
if (!isObjectRecord(step.config)) continue;
|
|
25713
|
+
const tools = step.config.tools;
|
|
25714
|
+
if (!isObjectRecord(tools)) continue;
|
|
25715
|
+
const runtimeTools = tools.runtimeTools;
|
|
25716
|
+
if (!Array.isArray(runtimeTools)) continue;
|
|
25717
|
+
for (const [toolIndex, tool] of runtimeTools.entries()) {
|
|
25718
|
+
if (!isObjectRecord(tool)) continue;
|
|
25719
|
+
const name = tool.name;
|
|
25720
|
+
if (typeof name !== "string" || !isReservedRuntypeToolName(name)) continue;
|
|
25721
|
+
addIssue(
|
|
25722
|
+
"error",
|
|
25723
|
+
{
|
|
25724
|
+
code: RESERVED_TOOL_NAME_CODE,
|
|
25725
|
+
// Single-sourced with the api's author-time reject and the FPO agent
|
|
25726
|
+
// validator: one author sees this text from whichever lane catches it
|
|
25727
|
+
// first, and three hand-copies drift with nothing comparing them.
|
|
25728
|
+
message: reservedToolNameMessage("Runtime tool", name),
|
|
25729
|
+
path: `flowSteps[${stepIndex}].config.tools.runtimeTools[${toolIndex}].name`,
|
|
25730
|
+
step: { index: stepIndex, name: step.name, type: step.type },
|
|
25731
|
+
details: {
|
|
25732
|
+
name,
|
|
25733
|
+
reservedName: RUNTYPE_SET_STATE_TOOL_NAME,
|
|
25734
|
+
sanitizedName: sanitizeToolNameForAiSdk(name)
|
|
25735
|
+
}
|
|
25736
|
+
},
|
|
25737
|
+
buckets
|
|
25738
|
+
);
|
|
25739
|
+
}
|
|
25740
|
+
}
|
|
25741
|
+
}
|
|
25592
25742
|
function promptResponseFormatIsNonJson(responseFormat) {
|
|
25593
25743
|
if (typeof responseFormat !== "string") return true;
|
|
25594
25744
|
return responseFormat.trim().toLowerCase() !== "json";
|
|
@@ -25667,8 +25817,9 @@ function validatePromptSystemPromptVolatility(flowSteps, buckets) {
|
|
|
25667
25817
|
}
|
|
25668
25818
|
}
|
|
25669
25819
|
var APPROVAL_ENFORCED_ON_ATTENDED_SURFACES_ONLY_CODE = "APPROVAL_ENFORCED_ON_ATTENDED_SURFACES_ONLY";
|
|
25670
|
-
var APPROVAL_ATTENDED_SURFACES = ["dispatch", "
|
|
25820
|
+
var APPROVAL_ATTENDED_SURFACES = ["dispatch", "agent-execute"];
|
|
25671
25821
|
var APPROVAL_UNATTENDED_SURFACES = [
|
|
25822
|
+
"client-chat",
|
|
25672
25823
|
"schedule",
|
|
25673
25824
|
"webhook",
|
|
25674
25825
|
"batch",
|
|
@@ -25677,6 +25828,10 @@ var APPROVAL_UNATTENDED_SURFACES = [
|
|
|
25677
25828
|
"mcp",
|
|
25678
25829
|
"a2a"
|
|
25679
25830
|
];
|
|
25831
|
+
var APPROVAL_PREFLIGHT_REJECTED_SURFACES = ["client-chat"];
|
|
25832
|
+
var APPROVAL_LEGACY_FOLD_SURFACES = APPROVAL_UNATTENDED_SURFACES.filter(
|
|
25833
|
+
(surface) => surface !== "client-chat"
|
|
25834
|
+
);
|
|
25680
25835
|
function validatePromptApprovalSurfaceEnforcement(flowSteps, buckets) {
|
|
25681
25836
|
for (const [stepIndex, step] of flowSteps.entries()) {
|
|
25682
25837
|
if (step.enabled === false) continue;
|
|
@@ -25686,18 +25841,20 @@ function validatePromptApprovalSurfaceEnforcement(flowSteps, buckets) {
|
|
|
25686
25841
|
"warning",
|
|
25687
25842
|
{
|
|
25688
25843
|
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
|
|
25844
|
+
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
25845
|
path: `flowSteps[${stepIndex}].config.tools.approval`,
|
|
25691
25846
|
step: { index: stepIndex, name: step.name, type: step.type },
|
|
25692
25847
|
details: {
|
|
25693
25848
|
attendedSurfaces: [...APPROVAL_ATTENDED_SURFACES],
|
|
25694
|
-
unattendedSurfaces: [...APPROVAL_UNATTENDED_SURFACES]
|
|
25849
|
+
unattendedSurfaces: [...APPROVAL_UNATTENDED_SURFACES],
|
|
25850
|
+
preflightRejectedSurfaces: [...APPROVAL_PREFLIGHT_REJECTED_SURFACES]
|
|
25695
25851
|
}
|
|
25696
25852
|
},
|
|
25697
25853
|
buckets
|
|
25698
25854
|
);
|
|
25699
25855
|
}
|
|
25700
25856
|
}
|
|
25857
|
+
var STORE_VECTOR_MODEL_MISSING_CODE = "STORE_VECTOR_MODEL_MISSING";
|
|
25701
25858
|
var STORE_VECTOR_SOURCE_MODELLESS_CODE = "STORE_VECTOR_SOURCE_MODELLESS";
|
|
25702
25859
|
function validateStoreVectorSource(flowSteps, buckets, declaredFlowInputs) {
|
|
25703
25860
|
const declaredVariables = collectDeclaredFlowInputs(flowSteps, declaredFlowInputs);
|
|
@@ -25728,23 +25885,53 @@ function validateStoreVectorSource(flowSteps, buckets, declaredFlowInputs) {
|
|
|
25728
25885
|
"warning",
|
|
25729
25886
|
{
|
|
25730
25887
|
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
|
|
25888
|
+
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
25889
|
path: `flowSteps[${stepIndex}].config.vectorsSource`,
|
|
25733
25890
|
step: { index: stepIndex, name: step.name, type: step.type },
|
|
25734
25891
|
details: { vectorsSource: rawSource, rootVariable }
|
|
25735
25892
|
},
|
|
25736
25893
|
buckets
|
|
25737
25894
|
);
|
|
25895
|
+
} else if (config3.inputMode === "batch" && config3.destination === "pgvector") {
|
|
25896
|
+
const itemsField = typeof config3.inputVariable === "string" && config3.inputVariable.trim() ? "inputVariable" : "vectorsSource";
|
|
25897
|
+
const itemsVariable = itemsField === "inputVariable" ? config3.inputVariable.trim() : rootVariable;
|
|
25898
|
+
const itemsProducer = itemsVariable ? producers.get(itemsVariable) : void 0;
|
|
25899
|
+
if (itemsProducer?.type === "transform-data") {
|
|
25900
|
+
const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step, which could never have found a modelless row." : "";
|
|
25901
|
+
addIssue(
|
|
25902
|
+
"recommendation",
|
|
25903
|
+
{
|
|
25904
|
+
code: STORE_VECTOR_SOURCE_MODELLESS_CODE,
|
|
25905
|
+
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.`,
|
|
25906
|
+
path: `flowSteps[${stepIndex}].config.${itemsField}`,
|
|
25907
|
+
step: { index: stepIndex, name: step.name, type: step.type },
|
|
25908
|
+
details: {
|
|
25909
|
+
vectorsSource: rawSource,
|
|
25910
|
+
inputMode: "batch",
|
|
25911
|
+
itemsField,
|
|
25912
|
+
itemsVariable,
|
|
25913
|
+
producerStepType: itemsProducer.type,
|
|
25914
|
+
producerStepIndex: itemsProducer.index,
|
|
25915
|
+
producerStepName: itemsProducer.name,
|
|
25916
|
+
hasVectorSearchInFlow
|
|
25917
|
+
}
|
|
25918
|
+
},
|
|
25919
|
+
buckets
|
|
25920
|
+
);
|
|
25921
|
+
}
|
|
25738
25922
|
} else if (producer && config3.inputMode !== "batch" && config3.destination === "pgvector") {
|
|
25739
25923
|
const dropsEnvelope = producer.type === "generate-embedding" && referencePath === "embedding";
|
|
25740
25924
|
const isTransform = producer.type === "transform-data";
|
|
25741
25925
|
if (dropsEnvelope || isTransform) {
|
|
25742
|
-
const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step,
|
|
25743
|
-
const
|
|
25926
|
+
const searchNote = hasVectorSearchInFlow ? " This flow also runs a vector-search step, which could never have found the row a modelless store would have written." : "";
|
|
25927
|
+
const eh = config3.errorHandling;
|
|
25928
|
+
const swallowsOnContinue = eh === "continue" || eh === "default" || isObjectRecord(eh) && (eh.onError === "continue" || eh.onError === "default");
|
|
25929
|
+
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`;
|
|
25930
|
+
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
25931
|
addIssue(
|
|
25745
|
-
"recommendation",
|
|
25932
|
+
dropsEnvelope ? "error" : "recommendation",
|
|
25746
25933
|
{
|
|
25747
|
-
code: STORE_VECTOR_SOURCE_MODELLESS_CODE,
|
|
25934
|
+
code: dropsEnvelope ? STORE_VECTOR_MODEL_MISSING_CODE : STORE_VECTOR_SOURCE_MODELLESS_CODE,
|
|
25748
25935
|
message,
|
|
25749
25936
|
path: `flowSteps[${stepIndex}].config.vectorsSource`,
|
|
25750
25937
|
step: { index: stepIndex, name: step.name, type: step.type },
|
|
@@ -26853,6 +27040,7 @@ function collectFlowStructureIssues(flowData, deps, buckets) {
|
|
|
26853
27040
|
deps.declaredFlowInputs
|
|
26854
27041
|
);
|
|
26855
27042
|
validateReservedIdentityVariables(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
|
|
27043
|
+
validateReservedToolNames(flowData.flowSteps, buckets);
|
|
26856
27044
|
validateUpsertRecordSourceShape(flowData.flowSteps, buckets);
|
|
26857
27045
|
validateStoreVectorSource(flowData.flowSteps, buckets, deps.declaredFlowInputs);
|
|
26858
27046
|
validateConditionExpressions(flowData.flowSteps, buckets, conditionalStepsExceedingDepth);
|
|
@@ -26904,6 +27092,39 @@ var SERIALIZED_HELPERS_SOURCE = `
|
|
|
26904
27092
|
// Transform helper functions generated from the canonical portable factory.
|
|
26905
27093
|
const helpers = (${createPortableHelpers.toString()})(${parseHTMLWithRegex.toString()})
|
|
26906
27094
|
`.trim();
|
|
27095
|
+
function extractSecretReferences(template) {
|
|
27096
|
+
const keys = /* @__PURE__ */ new Set();
|
|
27097
|
+
let match;
|
|
27098
|
+
const regex = new RegExp(SECRET_REF_PATTERN.source, "g");
|
|
27099
|
+
while ((match = regex.exec(template)) !== null) {
|
|
27100
|
+
const key = match[1];
|
|
27101
|
+
if (key) keys.add(key);
|
|
27102
|
+
}
|
|
27103
|
+
return Array.from(keys);
|
|
27104
|
+
}
|
|
27105
|
+
function extractSecretReferencesFromAnyValue(value, maxDepth = 10) {
|
|
27106
|
+
const keys = /* @__PURE__ */ new Set();
|
|
27107
|
+
walk(value, 0);
|
|
27108
|
+
return Array.from(keys);
|
|
27109
|
+
function walk(v2, depth) {
|
|
27110
|
+
if (depth > maxDepth) return;
|
|
27111
|
+
if (typeof v2 === "string") {
|
|
27112
|
+
for (const key of extractSecretReferences(v2)) keys.add(key);
|
|
27113
|
+
return;
|
|
27114
|
+
}
|
|
27115
|
+
if (Array.isArray(v2)) {
|
|
27116
|
+
for (const item of v2) walk(item, depth + 1);
|
|
27117
|
+
return;
|
|
27118
|
+
}
|
|
27119
|
+
if (v2 && typeof v2 === "object") {
|
|
27120
|
+
for (const inner of Object.values(v2)) {
|
|
27121
|
+
walk(inner, depth + 1);
|
|
27122
|
+
}
|
|
27123
|
+
}
|
|
27124
|
+
}
|
|
27125
|
+
}
|
|
27126
|
+
var STORE_ASSET_MAX_BYTES = 25 * 1024 * 1024;
|
|
27127
|
+
var STORE_ASSET_MAX_BASE64_LENGTH = Math.ceil(STORE_ASSET_MAX_BYTES * (4 / 3)) + 16;
|
|
26907
27128
|
var EMBEDDING_COST_PER_1K_TOKENS = Object.freeze({
|
|
26908
27129
|
"text-embedding-3-small": 2e-5,
|
|
26909
27130
|
// $0.02 per 1M tokens
|
|
@@ -28646,37 +28867,6 @@ var identityProofSchema = external_exports.object({
|
|
|
28646
28867
|
}).describe(
|
|
28647
28868
|
"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
28869
|
);
|
|
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
28870
|
var ACCOUNT_QUERY_PARAM = "account";
|
|
28681
28871
|
function buildDashboardUrl(opts) {
|
|
28682
28872
|
const base = stripTrailingChars(opts.baseUrl, "/");
|
|
@@ -28884,7 +29074,10 @@ var agentExternalConfigSchema = external_exports.object({
|
|
|
28884
29074
|
auth: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
28885
29075
|
timeout: external_exports.number().positive().optional(),
|
|
28886
29076
|
retryCount: external_exports.number().int().nonnegative().optional(),
|
|
28887
|
-
|
|
29077
|
+
// Canonical enum plus the historical boolean input. The ensure path
|
|
29078
|
+
// normalizes booleans before persistence, so newly converged rows never
|
|
29079
|
+
// perpetuate the legacy representation.
|
|
29080
|
+
skillOrchestration: external_exports.union([external_exports.enum(["delegate", "managed"]), external_exports.boolean()]).optional()
|
|
28888
29081
|
});
|
|
28889
29082
|
var agentClaudeManagedConfigSchema = external_exports.object({
|
|
28890
29083
|
setupMode: external_exports.enum(["create", "connect"]).optional(),
|
|
@@ -29485,7 +29678,11 @@ function mergeResults(...results) {
|
|
|
29485
29678
|
merged.valid = merged.errors.length === 0;
|
|
29486
29679
|
return merged;
|
|
29487
29680
|
}
|
|
29488
|
-
var
|
|
29681
|
+
var FORWARDED_CORE_CODES = /* @__PURE__ */ new Set([
|
|
29682
|
+
...NAMESPACE_VARIABLE_REFERENCE_CODES,
|
|
29683
|
+
RESERVED_TOOL_NAME_CODE,
|
|
29684
|
+
STORE_VECTOR_MODEL_MISSING_CODE
|
|
29685
|
+
]);
|
|
29489
29686
|
function validateFlowDefinition(flow, capIndex, context) {
|
|
29490
29687
|
const result = emptyResult();
|
|
29491
29688
|
const base = `capabilities[${capIndex}].flow`;
|
|
@@ -29546,19 +29743,19 @@ function validateFlowDefinition(flow, capIndex, context) {
|
|
|
29546
29743
|
}
|
|
29547
29744
|
}
|
|
29548
29745
|
}
|
|
29549
|
-
|
|
29746
|
+
appendForwardedCoreIssues(flow, base, result);
|
|
29550
29747
|
return finalize2(result);
|
|
29551
29748
|
}
|
|
29552
29749
|
function reprefixCorePath(corePath, base) {
|
|
29553
29750
|
if (!corePath) return `${base}.steps`;
|
|
29554
29751
|
return corePath.replace(/^flowSteps\[/, `${base}.steps[`);
|
|
29555
29752
|
}
|
|
29556
|
-
function
|
|
29753
|
+
function appendForwardedCoreIssues(flow, base, result) {
|
|
29557
29754
|
const parsed = parseCreateFlowValidationInput({ name: flow.name, flowSteps: flow.steps });
|
|
29558
29755
|
if (!parsed.success) return;
|
|
29559
29756
|
const coreResult = validateFlowStructure(parsed.data);
|
|
29560
29757
|
const push = (issue2, severity) => {
|
|
29561
|
-
if (!
|
|
29758
|
+
if (!FORWARDED_CORE_CODES.has(issue2.code)) return;
|
|
29562
29759
|
const bucket = severity === "error" ? result.errors : result.warnings;
|
|
29563
29760
|
bucket.push(createIssue(severity, issue2.code, issue2.message, reprefixCorePath(issue2.path, base)));
|
|
29564
29761
|
};
|
|
@@ -29569,6 +29766,14 @@ function finalize2(r) {
|
|
|
29569
29766
|
r.valid = r.errors.length === 0;
|
|
29570
29767
|
return r;
|
|
29571
29768
|
}
|
|
29769
|
+
function reservedToolNameIssue(name, path20) {
|
|
29770
|
+
return createIssue(
|
|
29771
|
+
"error",
|
|
29772
|
+
RESERVED_TOOL_NAME_CODE,
|
|
29773
|
+
reservedToolNameMessage("Runtime tool", name),
|
|
29774
|
+
path20
|
|
29775
|
+
);
|
|
29776
|
+
}
|
|
29572
29777
|
function validateAgentDefinition(agent, capIndex) {
|
|
29573
29778
|
const result = emptyResult();
|
|
29574
29779
|
const base = `capabilities[${capIndex}].agent`;
|
|
@@ -29627,6 +29832,10 @@ function validateFlatAgent(agent, base, result) {
|
|
|
29627
29832
|
result.errors.push(
|
|
29628
29833
|
createIssue("error", "RUNTIME_TOOL_NAME_EMPTY", "Runtime tool name is required", `${base}.toolsConfig.runtimeTools[${i}].name`)
|
|
29629
29834
|
);
|
|
29835
|
+
} else if (isReservedRuntypeToolName(tool.name)) {
|
|
29836
|
+
result.errors.push(
|
|
29837
|
+
reservedToolNameIssue(tool.name, `${base}.toolsConfig.runtimeTools[${i}].name`)
|
|
29838
|
+
);
|
|
29630
29839
|
}
|
|
29631
29840
|
if (tool.toolType === "flow" && (!tool.config?.steps || !Array.isArray(tool.config.steps) || tool.config.steps.length === 0)) {
|
|
29632
29841
|
result.warnings.push(
|
|
@@ -29656,6 +29865,10 @@ function validateNestedAgent(agent, base, result) {
|
|
|
29656
29865
|
result.errors.push(
|
|
29657
29866
|
createIssue("error", "RUNTIME_TOOL_NAME_EMPTY", "Runtime tool name is required", `${base}.config.tools.runtimeTools[${i}].name`)
|
|
29658
29867
|
);
|
|
29868
|
+
} else if (isReservedRuntypeToolName(tool.name)) {
|
|
29869
|
+
result.errors.push(
|
|
29870
|
+
reservedToolNameIssue(tool.name, `${base}.config.tools.runtimeTools[${i}].name`)
|
|
29871
|
+
);
|
|
29659
29872
|
}
|
|
29660
29873
|
if (tool.toolType === "flow" && (!tool.config?.steps || !Array.isArray(tool.config.steps) || tool.config.steps.length === 0)) {
|
|
29661
29874
|
result.warnings.push(
|
|
@@ -30819,9 +31032,9 @@ var RecordInputSchema = external_exports.object({
|
|
|
30819
31032
|
id: external_exports.string().min(1).optional(),
|
|
30820
31033
|
name: external_exports.string().min(1).optional(),
|
|
30821
31034
|
type: external_exports.string().min(1).optional(),
|
|
30822
|
-
// First-class owner field.
|
|
30823
|
-
// the `?ownerId=`
|
|
30824
|
-
//
|
|
31035
|
+
// First-class owner field. Persisted to the dedicated indexed `owner_id`
|
|
31036
|
+
// column (#3395) and queryable via the `?ownerId=` filter on the
|
|
31037
|
+
// conversations AND records list endpoints.
|
|
30825
31038
|
ownerId: external_exports.string().min(1).optional(),
|
|
30826
31039
|
metadata: external_exports.record(external_exports.string(), external_exports.any()).optional()
|
|
30827
31040
|
}).refine((data) => data.id || data.name && data.type, {
|
|
@@ -31129,16 +31342,17 @@ var DispatchRequestEnvelopeSchema = external_exports.object({
|
|
|
31129
31342
|
debugMode: external_exports.boolean().optional().default(false),
|
|
31130
31343
|
loggingPolicy: external_exports.enum(["default", "on", "off"]).optional(),
|
|
31131
31344
|
useRuntimePackage: external_exports.boolean().optional().describe(
|
|
31132
|
-
"For FLOW dispatches
|
|
31345
|
+
"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
31346
|
),
|
|
31134
31347
|
/** Route prompt model calls through an attached dashboard browser. */
|
|
31135
31348
|
localInference: LocalInferenceSelectionSchema.optional(),
|
|
31136
31349
|
/**
|
|
31137
31350
|
* Resume a checkpointed agent-loop execution from its latest (or a
|
|
31138
|
-
* specific) iteration-boundary snapshot. Runtime-path only: requires
|
|
31139
|
-
*
|
|
31140
|
-
* has no checkpoint hook, so sending this
|
|
31141
|
-
* rejected (400) rather than silently
|
|
31351
|
+
* specific) iteration-boundary snapshot. Runtime-path only: requires a
|
|
31352
|
+
* runtime-eligible `agent` input and no `useRuntimePackage: false`
|
|
31353
|
+
* opt-out — the legacy engine has no checkpoint hook, so sending this
|
|
31354
|
+
* without the runtime path is rejected (400) rather than silently
|
|
31355
|
+
* starting a fresh conversation.
|
|
31142
31356
|
* `executionId` is the handle carried on every agent SSE event of the
|
|
31143
31357
|
* original run. Per the runtime resume contract, `messages` on this
|
|
31144
31358
|
* request are APPENDED after the snapshot's conversation history —
|
|
@@ -31207,12 +31421,12 @@ var DispatchRequestSchema = external_exports.union([
|
|
|
31207
31421
|
DispatchRequestEnvelopeSchema.extend({ agent: AgentInputSchema })
|
|
31208
31422
|
]).superRefine((data, ctx) => {
|
|
31209
31423
|
if (!data.options.localInference) return;
|
|
31210
|
-
const runtimeLaneDisabled = data.agent != null && data.options.useRuntimePackage
|
|
31424
|
+
const runtimeLaneDisabled = data.agent != null && data.options.useRuntimePackage === false;
|
|
31211
31425
|
if (runtimeLaneDisabled) {
|
|
31212
31426
|
ctx.addIssue({
|
|
31213
31427
|
code: "custom",
|
|
31214
31428
|
path: ["options", "useRuntimePackage"],
|
|
31215
|
-
message: data.agent != null ? "Local agent inference
|
|
31429
|
+
message: data.agent != null ? "Local agent inference cannot use the legacy engine; remove useRuntimePackage: false" : "Local flow inference cannot use the legacy engine"
|
|
31216
31430
|
});
|
|
31217
31431
|
}
|
|
31218
31432
|
if (data.options.modelOverride) {
|
|
@@ -31274,7 +31488,8 @@ var RuntimeProxyMessageSchema = external_exports.object({
|
|
|
31274
31488
|
var RuntimeProxyToolSchema = external_exports.object({
|
|
31275
31489
|
name: external_exports.string().min(1),
|
|
31276
31490
|
description: external_exports.string(),
|
|
31277
|
-
parametersSchema: external_exports.record(external_exports.string(), external_exports.unknown())
|
|
31491
|
+
parametersSchema: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
31492
|
+
builtinNameCompatibility: external_exports.object({ canonicalToolId: external_exports.string(), legacyModelName: external_exports.string() }).optional()
|
|
31278
31493
|
});
|
|
31279
31494
|
var RuntimeProxyProviderToolSchema = external_exports.object({
|
|
31280
31495
|
id: external_exports.string().min(1),
|
|
@@ -31390,7 +31605,11 @@ var RuntimeStoredRecordSchema = external_exports.object({
|
|
|
31390
31605
|
metadataLabels: external_exports.record(external_exports.string(), external_exports.string()).nullable().optional(),
|
|
31391
31606
|
schemaValid: external_exports.boolean().nullable().optional(),
|
|
31392
31607
|
messages: external_exports.array(external_exports.object({ role: external_exports.string(), content: external_exports.string() })).nullable().optional(),
|
|
31393
|
-
productSurfaceId: external_exports.string().nullable().optional()
|
|
31608
|
+
productSurfaceId: external_exports.string().nullable().optional(),
|
|
31609
|
+
// First-class owner key (#3395) — part of the same projection as the public
|
|
31610
|
+
// GET /v1/records response (recordResponseColumns), which surfaces the column
|
|
31611
|
+
// value. Optional for api/runtime version skew, like the columns above.
|
|
31612
|
+
ownerId: external_exports.string().nullable().optional()
|
|
31394
31613
|
});
|
|
31395
31614
|
var FILTER_FIELD_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$/;
|
|
31396
31615
|
var runtimeRecordFilterConditionSchema = external_exports.object({
|
|
@@ -31916,6 +32135,7 @@ var appRoutingDocSchema = external_exports.object({
|
|
|
31916
32135
|
});
|
|
31917
32136
|
var DEFAULT_STEP_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
31918
32137
|
var DEFAULT_FLOW_TIMEOUT_MS = 15 * 60 * 1e3;
|
|
32138
|
+
var DEFAULT_AGENT_WALL_CLOCK_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
31919
32139
|
|
|
31920
32140
|
// src/config/env.ts
|
|
31921
32141
|
function getApiUrl() {
|
|
@@ -33900,10 +34120,24 @@ function renderMessageContentWithImages(content, protocol) {
|
|
|
33900
34120
|
}
|
|
33901
34121
|
|
|
33902
34122
|
// src/commands/records.ts
|
|
34123
|
+
function resolveOwnerIdUpdate(options) {
|
|
34124
|
+
if (options.clearOwner && options.ownerId !== void 0) {
|
|
34125
|
+
throw new Error("--owner-id and --clear-owner are mutually exclusive");
|
|
34126
|
+
}
|
|
34127
|
+
if (options.clearOwner) return { ownerId: null };
|
|
34128
|
+
if (options.ownerId === void 0) return void 0;
|
|
34129
|
+
if (options.ownerId.trim() === "") {
|
|
34130
|
+
throw new Error("--owner-id cannot be empty; use --clear-owner to remove the owner");
|
|
34131
|
+
}
|
|
34132
|
+
return { ownerId: options.ownerId };
|
|
34133
|
+
}
|
|
33903
34134
|
function printRecordDetail(data, imageProtocol) {
|
|
33904
34135
|
console.log(` ID: ${data.id}`);
|
|
33905
34136
|
console.log(` Name: ${data.name}`);
|
|
33906
34137
|
console.log(` Type: ${data.type}`);
|
|
34138
|
+
if (data.ownerId) {
|
|
34139
|
+
console.log(` Owner: ${data.ownerId}`);
|
|
34140
|
+
}
|
|
33907
34141
|
if (data.metadata) {
|
|
33908
34142
|
console.log(` Metadata: ${JSON.stringify(data.metadata, null, 2)}`);
|
|
33909
34143
|
}
|
|
@@ -33929,13 +34163,14 @@ Messages (${messages.length}):`));
|
|
|
33929
34163
|
}
|
|
33930
34164
|
}
|
|
33931
34165
|
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(
|
|
34166
|
+
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
34167
|
async (options) => {
|
|
33934
34168
|
const apiKey = await ensureAuth();
|
|
33935
34169
|
if (!apiKey) return;
|
|
33936
34170
|
const client = createCliClient(apiKey);
|
|
33937
34171
|
const params = { limit: options.limit };
|
|
33938
34172
|
if (options.type) params.type = options.type;
|
|
34173
|
+
if (options.ownerId) params.ownerId = options.ownerId;
|
|
33939
34174
|
if (options.cursor) params.cursor = options.cursor;
|
|
33940
34175
|
if (!isTTY(options) || options.json) {
|
|
33941
34176
|
try {
|
|
@@ -34047,6 +34282,7 @@ recordsCommand.command("get <id>").description("Get record details").option("--j
|
|
|
34047
34282
|
{ label: "ID", value: record2.id, color: "green" },
|
|
34048
34283
|
{ label: "Name", value: record2.name },
|
|
34049
34284
|
{ label: "Type", value: record2.type },
|
|
34285
|
+
{ label: "Owner", value: record2.ownerId ?? null },
|
|
34050
34286
|
{
|
|
34051
34287
|
label: "Metadata",
|
|
34052
34288
|
value: record2.metadata ? JSON.stringify(record2.metadata) : null
|
|
@@ -34191,7 +34427,7 @@ recordsCommand.command("costs <id>").description("Get aggregated cost breakdown
|
|
|
34191
34427
|
const { waitUntilExit } = render3(React3.createElement(App));
|
|
34192
34428
|
await waitUntilExit();
|
|
34193
34429
|
});
|
|
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(
|
|
34430
|
+
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
34431
|
async (options) => {
|
|
34196
34432
|
const apiKey = await ensureAuth();
|
|
34197
34433
|
if (!apiKey) return;
|
|
@@ -34205,11 +34441,13 @@ recordsCommand.command("create").description("Create a new record").requiredOpti
|
|
|
34205
34441
|
process.exit(1);
|
|
34206
34442
|
}
|
|
34207
34443
|
}
|
|
34444
|
+
const ownerFields = options.ownerId !== void 0 ? { ownerId: options.ownerId } : {};
|
|
34208
34445
|
if (!isTTY(options) || options.json) {
|
|
34209
34446
|
try {
|
|
34210
34447
|
const data = await client.post("/records", {
|
|
34211
34448
|
name: options.name,
|
|
34212
34449
|
type: options.type,
|
|
34450
|
+
...ownerFields,
|
|
34213
34451
|
metadata
|
|
34214
34452
|
});
|
|
34215
34453
|
if (options.json) {
|
|
@@ -34235,6 +34473,7 @@ recordsCommand.command("create").description("Create a new record").requiredOpti
|
|
|
34235
34473
|
client.post("/records", {
|
|
34236
34474
|
name: options.name,
|
|
34237
34475
|
type: options.type,
|
|
34476
|
+
...ownerFields,
|
|
34238
34477
|
metadata
|
|
34239
34478
|
}).then((data) => {
|
|
34240
34479
|
setResult(data);
|
|
@@ -34323,7 +34562,7 @@ recordsCommand.command("delete <id>").description("Delete a record").option("--t
|
|
|
34323
34562
|
const { waitUntilExit } = render3(React3.createElement(App));
|
|
34324
34563
|
await waitUntilExit();
|
|
34325
34564
|
});
|
|
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(
|
|
34565
|
+
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
34566
|
async (id, options) => {
|
|
34328
34567
|
const apiKey = await ensureAuth();
|
|
34329
34568
|
if (!apiKey) return;
|
|
@@ -34342,9 +34581,18 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
|
|
|
34342
34581
|
process.exit(1);
|
|
34343
34582
|
}
|
|
34344
34583
|
}
|
|
34584
|
+
try {
|
|
34585
|
+
const ownerUpdate = resolveOwnerIdUpdate(options);
|
|
34586
|
+
if (ownerUpdate) body.ownerId = ownerUpdate.ownerId;
|
|
34587
|
+
} catch (error51) {
|
|
34588
|
+
console.error(chalk6.red(error51 instanceof Error ? error51.message : String(error51)));
|
|
34589
|
+
process.exit(1);
|
|
34590
|
+
}
|
|
34345
34591
|
if (Object.keys(body).length === 0) {
|
|
34346
34592
|
console.error(
|
|
34347
|
-
chalk6.red(
|
|
34593
|
+
chalk6.red(
|
|
34594
|
+
"Error: provide at least one of --name, --type, --metadata, --owner-id, --clear-owner, or --from-file"
|
|
34595
|
+
)
|
|
34348
34596
|
);
|
|
34349
34597
|
process.exit(1);
|
|
34350
34598
|
}
|
|
@@ -34359,6 +34607,7 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
|
|
|
34359
34607
|
console.log(` ID: ${chalk6.green(data.id)}`);
|
|
34360
34608
|
console.log(` Name: ${data.name}`);
|
|
34361
34609
|
console.log(` Type: ${data.type}`);
|
|
34610
|
+
console.log(` Owner: ${data.ownerId ?? "(none)"}`);
|
|
34362
34611
|
if (data.metadata) {
|
|
34363
34612
|
console.log(` Metadata: ${JSON.stringify(data.metadata)}`);
|
|
34364
34613
|
}
|
|
@@ -34384,6 +34633,7 @@ recordsCommand.command("update <id>").description("Update a record (name, type,
|
|
|
34384
34633
|
{ label: "ID", value: data.id, color: "green" },
|
|
34385
34634
|
{ label: "Name", value: data.name },
|
|
34386
34635
|
{ label: "Type", value: data.type },
|
|
34636
|
+
{ label: "Owner", value: data.ownerId ?? null },
|
|
34387
34637
|
{
|
|
34388
34638
|
label: "Metadata",
|
|
34389
34639
|
value: data.metadata ? JSON.stringify(data.metadata) : null,
|
|
@@ -34561,48 +34811,49 @@ recordsCommand.command("bulk-edit").description("Bulk edit record metadata (payl
|
|
|
34561
34811
|
const { waitUntilExit } = render3(React3.createElement(App));
|
|
34562
34812
|
await waitUntilExit();
|
|
34563
34813
|
});
|
|
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(
|
|
34565
|
-
|
|
34566
|
-
|
|
34567
|
-
|
|
34568
|
-
|
|
34569
|
-
|
|
34570
|
-
|
|
34571
|
-
|
|
34572
|
-
|
|
34573
|
-
|
|
34574
|
-
|
|
34575
|
-
|
|
34576
|
-
|
|
34577
|
-
|
|
34578
|
-
|
|
34579
|
-
|
|
34580
|
-
|
|
34581
|
-
|
|
34582
|
-
|
|
34583
|
-
r
|
|
34584
|
-
|
|
34585
|
-
|
|
34586
|
-
|
|
34587
|
-
|
|
34588
|
-
|
|
34589
|
-
|
|
34814
|
+
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(
|
|
34815
|
+
async (options) => {
|
|
34816
|
+
const apiKey = await ensureAuth();
|
|
34817
|
+
if (!apiKey) return;
|
|
34818
|
+
console.log(chalk6.gray("Exporting records..."));
|
|
34819
|
+
try {
|
|
34820
|
+
const client = createCliClient(apiKey);
|
|
34821
|
+
const params = { limit: options.limit };
|
|
34822
|
+
if (options.type) params.type = options.type;
|
|
34823
|
+
if (options.ownerId) params.ownerId = options.ownerId;
|
|
34824
|
+
const data = await client.get("/records", params);
|
|
34825
|
+
const records = data.data ?? [];
|
|
34826
|
+
if (records.length === 0) {
|
|
34827
|
+
console.log(chalk6.yellow("No records to export"));
|
|
34828
|
+
return;
|
|
34829
|
+
}
|
|
34830
|
+
let content;
|
|
34831
|
+
if (options.format === "csv") {
|
|
34832
|
+
const headers = ["id", "name", "type", "ownerId", "metadata"];
|
|
34833
|
+
const rows = records.map((r) => [
|
|
34834
|
+
r.id,
|
|
34835
|
+
r.name,
|
|
34836
|
+
r.type,
|
|
34837
|
+
r.ownerId ?? "",
|
|
34838
|
+
r.metadata ? JSON.stringify(r.metadata) : ""
|
|
34839
|
+
]);
|
|
34840
|
+
content = [headers.join(","), ...rows.map((r) => r.map(csvEscape).join(","))].join("\n");
|
|
34841
|
+
} else {
|
|
34842
|
+
content = JSON.stringify(records, null, 2);
|
|
34843
|
+
}
|
|
34844
|
+
const filename = options.output || `records-export-${Date.now()}.${options.format === "csv" ? "csv" : "json"}`;
|
|
34845
|
+
writeFileSync(filename, content);
|
|
34846
|
+
console.log(chalk6.green(`Exported ${records.length} records to ${filename}`));
|
|
34847
|
+
} catch (error51) {
|
|
34848
|
+
const message = error51 instanceof Error ? error51.message : "Unknown error";
|
|
34849
|
+
console.error(chalk6.red(`Failed to export records: ${message}`));
|
|
34850
|
+
process.exit(1);
|
|
34590
34851
|
}
|
|
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
34852
|
}
|
|
34599
|
-
|
|
34853
|
+
);
|
|
34600
34854
|
recordsCommand.command("typegen").description(
|
|
34601
34855
|
"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) => {
|
|
34856
|
+
).option("-o, --output <file>", "Write the declarations to a file (default: print to stdout)").action(async (options) => {
|
|
34606
34857
|
const apiKey = await ensureAuth();
|
|
34607
34858
|
if (!apiKey) return;
|
|
34608
34859
|
const client = createCliClient(apiKey);
|
|
@@ -39061,11 +39312,11 @@ Messages (${messages.length}):`));
|
|
|
39061
39312
|
}
|
|
39062
39313
|
}
|
|
39063
39314
|
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) => {
|
|
39315
|
+
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
39316
|
const apiKey = await ensureAuth();
|
|
39066
39317
|
if (!apiKey) return;
|
|
39067
39318
|
const client = createCliClient(apiKey);
|
|
39068
|
-
const params = buildListParams(options);
|
|
39319
|
+
const params = buildListParams(options, { ownerId: options.ownerId });
|
|
39069
39320
|
if (!isTTY(options) || options.json) {
|
|
39070
39321
|
try {
|
|
39071
39322
|
const data = await client.get("/conversations", params);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtypelabs/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.34.0",
|
|
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.7",
|
|
30
|
-
"@runtypelabs/sdk": "9.
|
|
30
|
+
"@runtypelabs/sdk": "9.1.0",
|
|
31
31
|
"@runtypelabs/terminal-animations": "0.2.4"
|
|
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.
|
|
46
|
+
"@runtypelabs/shared": "3.30.0"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=22.12.0"
|