@vm0/cli 9.272.9 → 9.273.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 (104) hide show
  1. package/{agent-JDYYCFFO.js → agent-KQOTPNPP.js} +6 -6
  2. package/{banking-MN6JH4W5.js → banking-EIG5WKPY.js} +4 -4
  3. package/{browser-ZP3U7XUT.js → browser-VAZSMORE.js} +4 -4
  4. package/{chat-6HKZUD3S.js → chat-3Z6S75AO.js} +9 -6
  5. package/{chat-6HKZUD3S.js.map → chat-3Z6S75AO.js.map} +1 -1
  6. package/{chunk-ERQOEAWS.js → chunk-5YQKJCZS.js} +2 -2
  7. package/{chunk-CB7OHO7A.js → chunk-6SSKZSK6.js} +2 -2
  8. package/{chunk-6LWCFOJJ.js → chunk-EA4RZ55T.js} +52 -51
  9. package/chunk-EA4RZ55T.js.map +1 -0
  10. package/{chunk-YFOMVTVJ.js → chunk-EDKQ3FHD.js} +2 -2
  11. package/{chunk-LMAYGYZK.js → chunk-HWPKHU2C.js} +2 -2
  12. package/{chunk-ANBQ4XWM.js → chunk-OFJ3F6QN.js} +3 -3
  13. package/chunk-OFJ3F6QN.js.map +1 -0
  14. package/{chunk-WNWWB3WF.js → chunk-OG5OCZJF.js} +20 -59
  15. package/chunk-OG5OCZJF.js.map +1 -0
  16. package/{chunk-R645E73Z.js → chunk-SMHTQMUL.js} +45 -2
  17. package/chunk-SMHTQMUL.js.map +1 -0
  18. package/{chunk-GZWZFIXW.js → chunk-T4HBQ4A2.js} +2 -2
  19. package/{chunk-P24Q7EMQ.js → chunk-WBPL6BLH.js} +2 -2
  20. package/{computer-use-LXSCXHSK.js → computer-use-2Q72ZNQV.js} +4 -4
  21. package/{connector-RVP22ZRZ.js → connector-7NDAUM3V.js} +7 -7
  22. package/{credit-RTSUVDT2.js → credit-U6MPC32S.js} +5 -5
  23. package/{developer-support-WWPQYCSV.js → developer-support-2GYAIRM7.js} +4 -4
  24. package/{doctor-LCF4TAOW.js → doctor-BHYTLNQ3.js} +5 -5
  25. package/{feishu-I2CSLJWZ.js → feishu-RGPBKZ7B.js} +4 -4
  26. package/{finance-DJESBGK6.js → finance-RG2M7ZGX.js} +4 -4
  27. package/{generate-KPPLJZDY.js → generate-7T2RMNED.js} +6 -6
  28. package/{github-M3XOPOGW.js → github-BARP7LPE.js} +4 -4
  29. package/{goal-22DFQ4IR.js → goal-ZQKGIH5N.js} +4 -4
  30. package/{host-7HJZ7B4D.js → host-DO5UMBCP.js} +4 -4
  31. package/{logs-EW4ILZJ3.js → logs-ETKUVJIZ.js} +6 -6
  32. package/{mail-6L6LPKCH.js → mail-2XOLGXFE.js} +6 -6
  33. package/{maps-JFBDULLB.js → maps-CZV42RZY.js} +4 -4
  34. package/{model-KVWK7LU7.js → model-CUSFEXFC.js} +5 -5
  35. package/{model-provider-NGEMWSWX.js → model-provider-G6CSZPBY.js} +5 -5
  36. package/{org-F4C5MUPY.js → org-UCBLDQR2.js} +4 -4
  37. package/package.json +1 -1
  38. package/{people-search-LKNHV6SR.js → people-search-DMSGCYFO.js} +4 -4
  39. package/{phone-SU4SAXQR.js → phone-JBZS2EOT.js} +4 -4
  40. package/{preference-MRQ5UCKF.js → preference-7AO4AH56.js} +4 -4
  41. package/{resource-35YNNBER.js → resource-BKU72GS4.js} +4 -4
  42. package/{scrape-EK5XJ53L.js → scrape-AUNRQT5Q.js} +4 -4
  43. package/{search-566TALXR.js → search-2C3G55BV.js} +6 -6
  44. package/{secret-2V3YCXFF.js → secret-QPY4JBAM.js} +4 -4
  45. package/{slack-RY4MFK67.js → slack-MFU3QK6E.js} +4 -4
  46. package/{teams-WD7BYGL7.js → teams-XU6F7E4D.js} +4 -4
  47. package/{telegram-TMT67J54.js → telegram-NVVY3ZHW.js} +4 -4
  48. package/{upgrade-25IW4Y4P.js → upgrade-RXUEIAEH.js} +3 -3
  49. package/{variable-RFADYZMT.js → variable-X4WLC52J.js} +4 -4
  50. package/{video-YLNJ2TZU.js → video-ZJLKT42Q.js} +3 -3
  51. package/{weather-LDVUKOT6.js → weather-ZUZQNU2Z.js} +4 -4
  52. package/{web-QUDPNP6O.js → web-DXXFBE2I.js} +4 -4
  53. package/{web-search-VIJGJUE2.js → web-search-TSXRO3ZD.js} +4 -4
  54. package/{whoami-W4PDJTXV.js → whoami-KSTNLZHP.js} +6 -6
  55. package/{workflow-2WI4PX7J.js → workflow-QMO57K3Z.js} +5 -5
  56. package/zero.js +43 -43
  57. package/chunk-6LWCFOJJ.js.map +0 -1
  58. package/chunk-ANBQ4XWM.js.map +0 -1
  59. package/chunk-R645E73Z.js.map +0 -1
  60. package/chunk-WNWWB3WF.js.map +0 -1
  61. /package/{agent-JDYYCFFO.js.map → agent-KQOTPNPP.js.map} +0 -0
  62. /package/{banking-MN6JH4W5.js.map → banking-EIG5WKPY.js.map} +0 -0
  63. /package/{browser-ZP3U7XUT.js.map → browser-VAZSMORE.js.map} +0 -0
  64. /package/{chunk-ERQOEAWS.js.map → chunk-5YQKJCZS.js.map} +0 -0
  65. /package/{chunk-CB7OHO7A.js.map → chunk-6SSKZSK6.js.map} +0 -0
  66. /package/{chunk-YFOMVTVJ.js.map → chunk-EDKQ3FHD.js.map} +0 -0
  67. /package/{chunk-LMAYGYZK.js.map → chunk-HWPKHU2C.js.map} +0 -0
  68. /package/{chunk-GZWZFIXW.js.map → chunk-T4HBQ4A2.js.map} +0 -0
  69. /package/{chunk-P24Q7EMQ.js.map → chunk-WBPL6BLH.js.map} +0 -0
  70. /package/{computer-use-LXSCXHSK.js.map → computer-use-2Q72ZNQV.js.map} +0 -0
  71. /package/{connector-RVP22ZRZ.js.map → connector-7NDAUM3V.js.map} +0 -0
  72. /package/{credit-RTSUVDT2.js.map → credit-U6MPC32S.js.map} +0 -0
  73. /package/{developer-support-WWPQYCSV.js.map → developer-support-2GYAIRM7.js.map} +0 -0
  74. /package/{doctor-LCF4TAOW.js.map → doctor-BHYTLNQ3.js.map} +0 -0
  75. /package/{feishu-I2CSLJWZ.js.map → feishu-RGPBKZ7B.js.map} +0 -0
  76. /package/{finance-DJESBGK6.js.map → finance-RG2M7ZGX.js.map} +0 -0
  77. /package/{generate-KPPLJZDY.js.map → generate-7T2RMNED.js.map} +0 -0
  78. /package/{github-M3XOPOGW.js.map → github-BARP7LPE.js.map} +0 -0
  79. /package/{goal-22DFQ4IR.js.map → goal-ZQKGIH5N.js.map} +0 -0
  80. /package/{host-7HJZ7B4D.js.map → host-DO5UMBCP.js.map} +0 -0
  81. /package/{logs-EW4ILZJ3.js.map → logs-ETKUVJIZ.js.map} +0 -0
  82. /package/{mail-6L6LPKCH.js.map → mail-2XOLGXFE.js.map} +0 -0
  83. /package/{maps-JFBDULLB.js.map → maps-CZV42RZY.js.map} +0 -0
  84. /package/{model-KVWK7LU7.js.map → model-CUSFEXFC.js.map} +0 -0
  85. /package/{model-provider-NGEMWSWX.js.map → model-provider-G6CSZPBY.js.map} +0 -0
  86. /package/{org-F4C5MUPY.js.map → org-UCBLDQR2.js.map} +0 -0
  87. /package/{people-search-LKNHV6SR.js.map → people-search-DMSGCYFO.js.map} +0 -0
  88. /package/{phone-SU4SAXQR.js.map → phone-JBZS2EOT.js.map} +0 -0
  89. /package/{preference-MRQ5UCKF.js.map → preference-7AO4AH56.js.map} +0 -0
  90. /package/{resource-35YNNBER.js.map → resource-BKU72GS4.js.map} +0 -0
  91. /package/{scrape-EK5XJ53L.js.map → scrape-AUNRQT5Q.js.map} +0 -0
  92. /package/{search-566TALXR.js.map → search-2C3G55BV.js.map} +0 -0
  93. /package/{secret-2V3YCXFF.js.map → secret-QPY4JBAM.js.map} +0 -0
  94. /package/{slack-RY4MFK67.js.map → slack-MFU3QK6E.js.map} +0 -0
  95. /package/{teams-WD7BYGL7.js.map → teams-XU6F7E4D.js.map} +0 -0
  96. /package/{telegram-TMT67J54.js.map → telegram-NVVY3ZHW.js.map} +0 -0
  97. /package/{upgrade-25IW4Y4P.js.map → upgrade-RXUEIAEH.js.map} +0 -0
  98. /package/{variable-RFADYZMT.js.map → variable-X4WLC52J.js.map} +0 -0
  99. /package/{video-YLNJ2TZU.js.map → video-ZJLKT42Q.js.map} +0 -0
  100. /package/{weather-LDVUKOT6.js.map → weather-ZUZQNU2Z.js.map} +0 -0
  101. /package/{web-QUDPNP6O.js.map → web-DXXFBE2I.js.map} +0 -0
  102. /package/{web-search-VIJGJUE2.js.map → web-search-TSXRO3ZD.js.map} +0 -0
  103. /package/{whoami-W4PDJTXV.js.map → whoami-KSTNLZHP.js.map} +0 -0
  104. /package/{workflow-2WI4PX7J.js.map → workflow-QMO57K3Z.js.map} +0 -0
@@ -219,64 +219,6 @@ var FEATURE_SWITCHES = {
219
219
  description: "Reveal activity debug surfaces, activity log navigation, appended system prompts, and Debug preferences",
220
220
  enabled: false
221
221
  },
222
- ["languagePreference" /* LanguagePreference */]: {
223
- maintainer: "yuma@vm0.ai",
224
- description: "Enable workspace language bootstrap, persistence, and the Settings preference entry.",
225
- enabled: true
226
- },
227
- ["brazilianPortugueseLocale" /* BrazilianPortugueseLocale */]: {
228
- maintainer: "yuma@vm0.ai",
229
- description: "Allow pt-BR preference writes after incompatible API readers and rollback candidates have drained.",
230
- enabled: true,
231
- userOverridable: false
232
- },
233
- ["japaneseLocale" /* JapaneseLocale */]: {
234
- maintainer: "yuma@vm0.ai",
235
- description: "Allow ja-JP preference writes after incompatible API readers and rollback candidates have drained.",
236
- enabled: true
237
- },
238
- ["koreanLocale" /* KoreanLocale */]: {
239
- maintainer: "yuma@vm0.ai",
240
- description: "Allow ko-KR preference writes after incompatible API readers and rollback candidates have drained.",
241
- enabled: true,
242
- userOverridable: false
243
- },
244
- ["indonesianLocale" /* IndonesianLocale */]: {
245
- maintainer: "yuma@vm0.ai",
246
- description: "Allow id-ID preference writes after incompatible API readers and rollback candidates have drained.",
247
- enabled: true,
248
- userOverridable: false
249
- },
250
- ["germanLocale" /* GermanLocale */]: {
251
- maintainer: "yuma@vm0.ai",
252
- description: "Allow de-DE preference writes after incompatible API readers and rollback candidates have drained.",
253
- enabled: true,
254
- userOverridable: false
255
- },
256
- ["spanishLocale" /* SpanishLocale */]: {
257
- maintainer: "linghan@vm0.ai",
258
- description: "Allow es-ES preference writes after incompatible API readers and rollback candidates have drained.",
259
- enabled: true,
260
- userOverridable: false
261
- },
262
- ["italianLocale" /* ItalianLocale */]: {
263
- maintainer: "linghan@vm0.ai",
264
- description: "Allow it-IT preference writes after incompatible API readers and rollback candidates have drained.",
265
- enabled: true,
266
- userOverridable: false
267
- },
268
- ["frenchLocale" /* FrenchLocale */]: {
269
- maintainer: "yuma@vm0.ai",
270
- description: "Allow fr-FR preference writes after incompatible API readers and rollback candidates have drained.",
271
- enabled: true,
272
- userOverridable: false
273
- },
274
- ["hindiLocale" /* HindiLocale */]: {
275
- maintainer: "yuma@vm0.ai",
276
- description: "Allow hi-IN preference writes after incompatible API readers and rollback candidates have drained.",
277
- enabled: true,
278
- userOverridable: false
279
- },
280
222
  ["banking" /* Banking */]: {
281
223
  maintainer: "linghan@vm0.ai",
282
224
  description: "Enable the managed Zero Banking gateway and banking:read ZERO_TOKEN capability for Finicity-backed accounts, balances, and transactions.",
@@ -378,6 +320,12 @@ var FEATURE_SWITCHES = {
378
320
  enabledOrgIdHashes: CUSTOM_MODEL_GATEWAY_ORG_ID_HASHES,
379
321
  userOverridable: false
380
322
  },
323
+ ["deepSeekV4Flash" /* DeepSeekV4Flash */]: {
324
+ maintainer: "ethan@vm0.ai",
325
+ description: "Show DeepSeek V4 Flash in the workspace Add model selector.",
326
+ enabled: false,
327
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
328
+ },
381
329
  ["zapierConnector" /* ZapierConnector */]: {
382
330
  maintainer: "yuma@vm0.ai",
383
331
  description: "Enable the Zapier connector. When disabled, Zapier is hidden from the connectors list and cannot be connected.",
@@ -414,6 +362,19 @@ var FEATURE_SWITCHES = {
414
362
  enabled: false,
415
363
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
416
364
  },
365
+ ["mermaidDiagrams" /* MermaidDiagrams */]: {
366
+ maintainer: "bingjie@vm0.ai",
367
+ description: "Render ```mermaid code blocks in assistant markdown as diagrams, and tell the web chat agent that they are rendered.",
368
+ enabled: false,
369
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
370
+ },
371
+ ["artifactSidebarInlineOpen" /* ArtifactSidebarInlineOpen */]: {
372
+ maintainer: "bingjie@vm0.ai",
373
+ description: "Open an artifact clicked in a chat thread inside the already-open artifact sidebar instead of stacking the page-global lightbox over it.",
374
+ enabled: false,
375
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
376
+ userOverridable: true
377
+ },
417
378
  ["composerSkillSubstringSearch" /* ComposerSkillSubstringSearch */]: {
418
379
  maintainer: "yuma@vm0.ai",
419
380
  description: "Match chat composer slash skill suggestions by any slug substring instead of only prefixes.",
@@ -550,4 +511,4 @@ function isFeatureEnabled(key, ctx) {
550
511
  export {
551
512
  isFeatureEnabled
552
513
  };
553
- //# sourceMappingURL=chunk-WNWWB3WF.js.map
514
+ //# sourceMappingURL=chunk-OG5OCZJF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/core/src/feature-switch-key.ts","../../../packages/core/src/feature-switch.ts","../../../packages/core/src/identity-hash.ts"],"sourcesContent":["/**\n * Feature switch keys\n *\n * Defines all available feature switch identifiers.\n */\nexport enum FeatureSwitchKey {\n Dummy = \"dummy\",\n AhrefsConnector = \"ahrefsConnector\",\n BillConnector = \"billConnector\",\n BentomlConnector = \"bentomlConnector\",\n BoxConnector = \"boxConnector\",\n CanvaConnector = \"canvaConnector\",\n CalComConnector = \"calComConnector\",\n CopperConnector = \"copperConnector\",\n DatadogConnector = \"datadogConnector\",\n DeelConnector = \"deelConnector\",\n DocuSignConnector = \"docusignConnector\",\n DropboxConnector = \"dropboxConnector\",\n FigmaConnector = \"figmaConnector\",\n ExpensifyConnector = \"expensifyConnector\",\n GoogleContactsConnector = \"googleContactsConnector\",\n GoogleFormsConnector = \"googleFormsConnector\",\n JoggAiConnector = \"joggAiConnector\",\n MercuryConnector = \"mercuryConnector\",\n NeonConnector = \"neonConnector\",\n NetSuiteConnector = \"netSuiteConnector\",\n GarminConnectConnector = \"garminConnectConnector\",\n QuickBooksConnector = \"quickbooksConnector\",\n RedditConnector = \"redditConnector\",\n SupabaseConnector = \"supabaseConnector\",\n WebflowConnector = \"webflowConnector\",\n CloseConnector = \"closeConnector\",\n MetaAdsConnector = \"metaAdsConnector\",\n TikTokAdsConnector = \"tiktokAdsConnector\",\n AwsConnector = \"awsConnector\",\n PosthogConnector = \"posthogConnector\",\n PayPalConnector = \"payPalConnector\",\n RampConnector = \"rampConnector\",\n MailchimpConnector = \"mailchimpConnector\",\n ResendConnector = \"resendConnector\",\n PexelsConnector = \"pexelsConnector\",\n SpotifyConnector = \"spotifyConnector\",\n ZeroDebug = \"zeroDebug\",\n ZeroBrowser = \"zeroBrowser\",\n ZeroChatMessaging = \"zeroChatMessaging\",\n ZeroMailReplyFollowUp = \"zeroMailReplyFollowUp\",\n Banking = \"banking\",\n Lab = \"lab\",\n NotionWorkflowAutomations = \"notionWorkflowAutomations\",\n GithubWebhookAutomations = \"githubWebhookAutomations\",\n MorningBrief = \"morningBrief\",\n ManualMorningBrief = \"manualMorningBrief\",\n TestOauthConnector = \"testOauthConnector\",\n FreshdeskConnector = \"freshdeskConnector\",\n StabilityAiConnector = \"stabilityAiConnector\",\n ZoomConnector = \"zoomConnector\",\n WorkdayConnector = \"workdayConnector\",\n CodexFastMode = \"codexFastMode\",\n ClaudeSessionPruning = \"claudeSessionPruning\",\n RealAgentInPreview = \"realAgentInPreview\",\n ComposerUploadPopover = \"composerUploadPopover\",\n StructuredPromptInlineTemplates = \"structuredPromptInlineTemplates\",\n CustomModelGateways = \"customModelGateways\",\n DeepSeekV4Flash = \"deepSeekV4Flash\",\n\n ZapierConnector = \"zapierConnector\",\n ComputerUseDesktopPlugins = \"computerUseDesktopPlugins\",\n ChatThreadUnifiedSearch = \"chatThreadUnifiedSearch\",\n ChatErrorRecovery = \"chatErrorRecovery\",\n PwaChatKeyboardGestures = \"pwaChatKeyboardGestures\",\n ComposerSkillSubstringSearch = \"composerSkillSubstringSearch\",\n SidebarSubscriptionUsage = \"sidebarSubscriptionUsage\",\n SlackDmSessionRouting = \"slackDmSessionRouting\",\n TeamsIntegration = \"teamsIntegration\",\n FeishuIntegration = \"feishuIntegration\",\n StrapiIntegration = \"strapiIntegration\",\n ArtifactKeyV2 = \"artifactKeyV2\",\n HostedArtifactVersions = \"hostedArtifactVersions\",\n HtmlResourceIndex = \"htmlResourceIndex\",\n VideoArtifactPosters = \"videoArtifactPosters\",\n WorkflowConnectorReadiness = \"workflowConnectorReadiness\",\n ComposerConnectorPermissions = \"composerConnectorPermissions\",\n ThreeColumnNav = \"threeColumnNav\",\n ChatThreadSidebarAutoOpen = \"chatThreadSidebarAutoOpen\",\n ArtifactSidebarInlineOpen = \"artifactSidebarInlineOpen\",\n CustomConnectorCliCreate = \"customConnectorCliCreate\",\n CustomConnectorOAuth2 = \"customConnectorOAuth2\",\n MermaidDiagrams = \"mermaidDiagrams\",\n}\n","/**\n * Feature switch system\n *\n * Provides centralized feature flag management with user-identity based overrides.\n * User IDs are stored as FNV-1a hashes to avoid exposing plain-text identifiers in source code.\n *\n * NOT AN AUTHORIZATION BOUNDARY. User-overridable switches can be self-enabled\n * through `POST /api/zero/feature-switches`, and `userOverridable: false` only\n * excludes a switch from that API. For money-granting, credential, or\n * privilege-escalation endpoints, gate with a hard identity check (e.g.\n * `isStaffOrg()` from `./staff-org`) instead of this system.\n */\n\nimport { FeatureSwitchKey } from \"./feature-switch-key\";\nimport { STAFF_ORG_ID_HASHES, fnv1a } from \"./identity-hash\";\n\nexport interface FeatureSwitch {\n readonly maintainer: string;\n readonly description?: string;\n readonly enabled: boolean;\n readonly enabledUserHashes?: readonly string[];\n readonly enabledEmailHashes?: readonly string[];\n readonly enabledOrgIdHashes?: readonly string[];\n readonly userOverridable?: boolean;\n}\n\nexport interface FeatureSwitchMetadata {\n readonly maintainer: string;\n readonly description?: string;\n readonly userOverridable: boolean;\n}\n\nexport interface FeatureSwitchContext {\n readonly userId?: string;\n readonly email?: string;\n readonly orgId?: string;\n readonly overrides?: Partial<Record<FeatureSwitchKey, boolean>>;\n}\n\nconst CUSTOM_MODEL_GATEWAY_ORG_ID_HASHES = [\n ...STAFF_ORG_ID_HASHES,\n \"a6e60503\", // geo rollout workspace\n] as const;\n\n/**\n * Registry of all feature switches\n */\nconst FEATURE_SWITCHES: Record<FeatureSwitchKey, FeatureSwitch> = {\n [FeatureSwitchKey.Dummy]: {\n maintainer: \"ethan@vm0.ai\",\n description: \"Test-only feature switch for flag system validation\",\n enabled: true,\n },\n [FeatureSwitchKey.AhrefsConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Ahrefs SEO connector\",\n enabled: false,\n },\n [FeatureSwitchKey.BillConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the BILL Spend & Expense connector\",\n enabled: false,\n },\n [FeatureSwitchKey.BentomlConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the BentoML model serving connector\",\n enabled: false,\n },\n [FeatureSwitchKey.BoxConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Box file storage connector\",\n enabled: false,\n },\n [FeatureSwitchKey.CanvaConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Canva design connector\",\n enabled: false,\n },\n [FeatureSwitchKey.CalComConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Cal.com scheduling connector\",\n enabled: false,\n },\n [FeatureSwitchKey.CopperConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Copper CRM connector\",\n enabled: false,\n },\n [FeatureSwitchKey.DatadogConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Datadog observability connector\",\n enabled: false,\n },\n [FeatureSwitchKey.DeelConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Deel HR connector\",\n enabled: false,\n },\n [FeatureSwitchKey.DocuSignConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the DocuSign e-signature connector\",\n enabled: false,\n },\n [FeatureSwitchKey.DropboxConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Dropbox file storage connector\",\n enabled: false,\n },\n [FeatureSwitchKey.FigmaConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Figma design connector\",\n enabled: false,\n },\n [FeatureSwitchKey.ExpensifyConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Expensify accounting connector\",\n enabled: false,\n },\n [FeatureSwitchKey.GoogleContactsConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Google Contacts connector\",\n enabled: false,\n },\n [FeatureSwitchKey.GoogleFormsConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Google Forms connector\",\n enabled: false,\n },\n [FeatureSwitchKey.JoggAiConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the JoggAI video generation connector\",\n enabled: false,\n },\n [FeatureSwitchKey.MercuryConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Mercury banking connector\",\n enabled: false,\n },\n [FeatureSwitchKey.NeonConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Neon serverless Postgres connector\",\n enabled: false,\n },\n [FeatureSwitchKey.NetSuiteConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Oracle NetSuite ERP connector\",\n enabled: false,\n },\n [FeatureSwitchKey.GarminConnectConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Garmin Connect wellness connector\",\n enabled: false,\n },\n [FeatureSwitchKey.QuickBooksConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the QuickBooks accounting connector\",\n enabled: false,\n },\n [FeatureSwitchKey.RedditConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Reddit connector integration\",\n enabled: false,\n },\n [FeatureSwitchKey.SupabaseConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Supabase database connector integration\",\n enabled: false,\n },\n [FeatureSwitchKey.CloseConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Close CRM connector\",\n enabled: false,\n },\n [FeatureSwitchKey.WebflowConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Webflow site management connector\",\n enabled: false,\n },\n [FeatureSwitchKey.MetaAdsConnector]: {\n maintainer: \"ethan@vm0.ai\",\n description: \"Enable the Meta Ads Manager connector\",\n enabled: false,\n },\n [FeatureSwitchKey.TikTokAdsConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the TikTok Ads Manager connector\",\n enabled: false,\n },\n [FeatureSwitchKey.AwsConnector]: {\n maintainer: \"liangyou@vm0.ai\",\n description: \"Enable the temporary AWS remote login connector\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.PosthogConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the PostHog analytics connector\",\n enabled: false,\n },\n [FeatureSwitchKey.PayPalConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the PayPal payments connector\",\n enabled: false,\n },\n [FeatureSwitchKey.RampConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Ramp spend management connector\",\n enabled: false,\n },\n [FeatureSwitchKey.MailchimpConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Mailchimp email marketing connector\",\n enabled: false,\n },\n [FeatureSwitchKey.ResendConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Resend email service connector\",\n enabled: false,\n },\n [FeatureSwitchKey.PexelsConnector]: {\n maintainer: \"bingjie@vm0.ai\",\n description: \"Enable the Pexels stock photo and video connector\",\n enabled: false,\n },\n [FeatureSwitchKey.SpotifyConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Spotify connector integration\",\n enabled: false,\n },\n [FeatureSwitchKey.ZeroDebug]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Reveal activity debug surfaces, activity log navigation, appended system prompts, and Debug preferences\",\n enabled: false,\n },\n [FeatureSwitchKey.Banking]: {\n maintainer: \"linghan@vm0.ai\",\n description:\n \"Enable the managed Zero Banking gateway and banking:read ZERO_TOKEN capability for Finicity-backed accounts, balances, and transactions.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.Lab]: {\n maintainer: \"ethan@vm0.ai\",\n description: \"Show the Lab page for toggling experimental features\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.MorningBrief]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Enable the daily 7:00 local-time Morning Brief email built from GitHub, Gmail, and Google Calendar.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: true,\n },\n [FeatureSwitchKey.ManualMorningBrief]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Show a Send now button in Settings that triggers a Morning Brief immediately for testing.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: true,\n },\n [FeatureSwitchKey.NotionWorkflowAutomations]: {\n maintainer: \"lancy@vm0.ai\",\n description:\n \"Enable Notion event workflow automations, starting with child pages created under a configured parent page.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.GithubWebhookAutomations]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Show creation entry points for GitHub workflow job, pull request review, deployment status, and issue comment automations.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: false,\n },\n [FeatureSwitchKey.TestOauthConnector]: {\n maintainer: \"liangyou@vm0.ai\",\n description:\n \"Enable the test-oauth connector, a synthetic OAuth 2.0 provider used only for automated tests. Off in prod.\",\n enabled: false,\n },\n [FeatureSwitchKey.FreshdeskConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Freshdesk helpdesk connector\",\n enabled: false,\n },\n [FeatureSwitchKey.StabilityAiConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Stability AI image generation connector\",\n enabled: false,\n },\n [FeatureSwitchKey.ZoomConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Enable the Zoom connector (OAuth 2.0) for meetings, past participants, and cloud recordings access\",\n enabled: false,\n },\n [FeatureSwitchKey.WorkdayConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description: \"Enable the Workday HCM and finance connector\",\n enabled: false,\n },\n\n [FeatureSwitchKey.CodexFastMode]: {\n maintainer: \"lancy@vm0.ai\",\n description:\n \"Enable Codex fast mode for ChatGPT subscription GPT 5.5 and GPT 5.6 web chat runs.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ClaudeSessionPruning]: {\n maintainer: \"liangyou@vm0.ai\",\n description:\n \"Prune oversized Claude Code checkpoint histories to the latest native compact generation.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.RealAgentInPreview]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Send preview chat runs through real agent CLIs instead of preview mock runners.\",\n enabled: false,\n },\n [FeatureSwitchKey.ComposerUploadPopover]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Use the Upload popover in the chat composer instead of the legacy paperclip attachment button.\",\n enabled: false,\n userOverridable: false,\n },\n [FeatureSwitchKey.StructuredPromptInlineTemplates]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Enable multiple inline artifact templates in structured chat prompts.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: true,\n },\n [FeatureSwitchKey.CustomModelGateways]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Enable admin-defined Anthropic Messages and OpenAI Responses model gateway connections.\",\n enabled: false,\n enabledOrgIdHashes: CUSTOM_MODEL_GATEWAY_ORG_ID_HASHES,\n userOverridable: false,\n },\n [FeatureSwitchKey.DeepSeekV4Flash]: {\n maintainer: \"ethan@vm0.ai\",\n description: \"Show DeepSeek V4 Flash in the workspace Add model selector.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ZapierConnector]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Enable the Zapier connector. When disabled, Zapier is hidden from the connectors list and cannot be connected.\",\n enabled: false,\n },\n [FeatureSwitchKey.ComputerUseDesktopPlugins]: {\n maintainer: \"lancy@vm0.ai\",\n description:\n \"Enable Zero Desktop Computer Use plugins for local resources, starting with the bundled filesystem plugin gateway.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ChatThreadUnifiedSearch]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Show chat thread title results from the local event-driven thread cache in the command-shift-a conversation picker.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ChatErrorRecovery]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Replace supported Codex and Claude Code limit errors with recovery actions in chat.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.PwaChatKeyboardGestures]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Keep the PWA chat composer pinned above the software keyboard and support swipe-to-dismiss gestures.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: false,\n },\n [FeatureSwitchKey.ChatThreadSidebarAutoOpen]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Automatically open the latest sidebar-capable card from a running or successfully completed chat run when the utility sidebar is closed and split view is available.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.MermaidDiagrams]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Render ```mermaid code blocks in assistant markdown as diagrams, and tell the web chat agent that they are rendered.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ArtifactSidebarInlineOpen]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Open an artifact clicked in a chat thread inside the already-open artifact sidebar instead of stacking the page-global lightbox over it.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: true,\n },\n [FeatureSwitchKey.ComposerSkillSubstringSearch]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Match chat composer slash skill suggestions by any slug substring instead of only prefixes.\",\n enabled: true,\n },\n [FeatureSwitchKey.ThreeColumnNav]: {\n maintainer: \"ming@vm0.ai\",\n description:\n \"Slack-style three-column navigation: a labeled icon rail, a pinned-agents and chat-threads list column, and the conversation pane.\",\n enabled: false,\n // Ming only for the first pass; widen to staff once it settles.\n enabledEmailHashes: [\"54757055\"], // fnv1a(\"ming@vm0.ai\")\n },\n [FeatureSwitchKey.SidebarSubscriptionUsage]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Show Codex and Claude Code personal subscription usage in the Zero sidebar footer.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.SlackDmSessionRouting]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Reuse agent/model-scoped sessions for top-level Slack direct messages.\",\n enabled: true,\n },\n [FeatureSwitchKey.TeamsIntegration]: {\n maintainer: \"linghan@vm0.ai\",\n description:\n \"Show standalone Microsoft Teams integration settings, connect flows, and Works page entry points.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.FeishuIntegration]: {\n maintainer: \"linghan@vm0.ai\",\n description:\n \"Show the Feishu direct-message integration and Works page entry point.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.StrapiIntegration]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Enable Strapi integration settings and Strapi entry-published workflow automations.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: false,\n },\n [FeatureSwitchKey.ArtifactKeyV2]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Store new user artifacts under flat, ten-character hashed public keys.\",\n enabled: false,\n },\n [FeatureSwitchKey.HostedArtifactVersions]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Create immutable hosted artifact versions behind stable site aliases.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.HtmlResourceIndex]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Use target-specific static indexes for HTML generation resource selection.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.VideoArtifactPosters]: {\n maintainer: \"bingjie@vm0.ai\",\n description:\n \"Generate poster images asynchronously when video artifacts are recorded.\",\n enabled: true,\n },\n [FeatureSwitchKey.WorkflowConnectorReadiness]: {\n maintainer: \"lancy@vm0.ai\",\n description:\n \"Show the manual connector readiness check on workflow settings pages.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n userOverridable: false,\n },\n [FeatureSwitchKey.ZeroMailReplyFollowUp]: {\n maintainer: \"yuma@vm0.ai\",\n description:\n \"Enable Zero Mail reply follow-up after all API deployments can read Gmail event configurations with threadId.\",\n enabled: true,\n userOverridable: false,\n },\n [FeatureSwitchKey.ZeroBrowser]: {\n maintainer: \"liangyou@vm0.ai\",\n description:\n \"Enable thread-scoped Cloud browser access in chat and the Zero CLI.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ZeroChatMessaging]: {\n maintainer: \"ethan@vm0.ai\",\n description:\n \"Advertise zero chat create, send, and cancel in the agent system prompt without gating the CLI commands or API.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ComposerConnectorPermissions]: {\n maintainer: \"ming@vm0.ai\",\n description:\n \"Show the configure-permissions entry in the chat composer connector popover, opening the agent×connector firewall dialog inline.\",\n enabled: false,\n userOverridable: true,\n },\n [FeatureSwitchKey.CustomConnectorCliCreate]: {\n maintainer: \"liangyou@vm0.ai\",\n description:\n \"Allow Zero CLI agents to create and configure custom connectors directly.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.CustomConnectorOAuth2]: {\n maintainer: \"liangyou@vm0.ai\",\n description:\n \"Allow org admins to add OAuth 2.0 authentication to custom connectors.\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n};\n\ninterface ResolvedHashes {\n readonly userHash?: string;\n readonly emailHash?: string;\n readonly orgIdHash?: string;\n}\n\nfunction evaluateSwitch(fs: FeatureSwitch, hashes: ResolvedHashes): boolean {\n if (fs.enabled) return true;\n if (hashes.userHash && fs.enabledUserHashes?.includes(hashes.userHash))\n return true;\n if (hashes.emailHash && fs.enabledEmailHashes?.includes(hashes.emailHash))\n return true;\n if (hashes.orgIdHash && fs.enabledOrgIdHashes?.includes(hashes.orgIdHash))\n return true;\n return false;\n}\n\n/**\n * Evaluate all feature switches at once for the given context.\n *\n * Computes identity hashes once and checks all switches synchronously.\n */\nexport function getAllFeatureStates(\n ctx?: FeatureSwitchContext,\n): Record<FeatureSwitchKey, boolean> {\n const switches = Object.values(FEATURE_SWITCHES);\n const hashes: ResolvedHashes = {\n userHash:\n ctx?.userId &&\n switches.some((s) => {\n return s.enabledUserHashes?.length;\n })\n ? fnv1a(ctx.userId)\n : undefined,\n emailHash:\n ctx?.email &&\n switches.some((s) => {\n return s.enabledEmailHashes?.length;\n })\n ? fnv1a(ctx.email.toLowerCase())\n : undefined,\n orgIdHash:\n ctx?.orgId &&\n switches.some((s) => {\n return s.enabledOrgIdHashes?.length;\n })\n ? fnv1a(ctx.orgId)\n : undefined,\n };\n\n const result = {} as Record<FeatureSwitchKey, boolean>;\n for (const key of Object.values(FeatureSwitchKey)) {\n result[key] = evaluateSwitch(FEATURE_SWITCHES[key], hashes);\n }\n\n if (ctx?.overrides) {\n for (const [key, value] of Object.entries(ctx.overrides)) {\n if (key in FEATURE_SWITCHES && value !== undefined) {\n result[key as FeatureSwitchKey] = value;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Return the description for every feature switch.\n */\nexport function getFeatureSwitchDescriptions(): Record<\n FeatureSwitchKey,\n string | undefined\n> {\n const result = {} as Record<FeatureSwitchKey, string | undefined>;\n for (const key of Object.values(FeatureSwitchKey)) {\n result[key] = FEATURE_SWITCHES[key].description;\n }\n return result;\n}\n\n/**\n * Return display metadata for every feature switch.\n */\nexport function getFeatureSwitchMetadata(): Record<\n FeatureSwitchKey,\n FeatureSwitchMetadata\n> {\n const result = {} as Record<FeatureSwitchKey, FeatureSwitchMetadata>;\n for (const key of Object.values(FeatureSwitchKey)) {\n const featureSwitch = FEATURE_SWITCHES[key];\n result[key] = {\n maintainer: featureSwitch.maintainer,\n description: featureSwitch.description,\n userOverridable: featureSwitch.userOverridable !== false,\n };\n }\n return result;\n}\n\nexport function isUserOverridableFeatureSwitch(\n key: string,\n): key is FeatureSwitchKey {\n if (!(key in FEATURE_SWITCHES)) {\n return false;\n }\n return FEATURE_SWITCHES[key as FeatureSwitchKey].userOverridable !== false;\n}\n\nexport function getUserOverridableFeatureSwitchKeys(): readonly FeatureSwitchKey[] {\n return Object.values(FeatureSwitchKey).filter(isUserOverridableFeatureSwitch);\n}\n\nexport function filterUserOverridableFeatureSwitchOverrides(\n switches: Record<string, boolean>,\n): Record<string, boolean> {\n const filtered: Record<string, boolean> = {};\n for (const [key, value] of Object.entries(switches)) {\n if (isUserOverridableFeatureSwitch(key)) {\n filtered[key] = value;\n }\n }\n return filtered;\n}\n\n/**\n * Check if a feature is enabled for the given context.\n *\n * `ctx` is required so callers must pass identity (userId/orgId/email) or an\n * explicit `{}`. A switch gated by `enabledUserHashes` / `enabledOrgIdHashes`\n * silently returns `false` when ctx omits identity, which has caused bugs.\n * Client-side callers should usually read the platform `featureSwitch$` signal\n * instead — it also merges DB overrides on top of identity context.\n */\nexport function isFeatureEnabled(\n key: FeatureSwitchKey,\n ctx: FeatureSwitchContext,\n): boolean {\n const override = ctx.overrides?.[key];\n if (override !== undefined) {\n return override;\n }\n\n const featureSwitch = FEATURE_SWITCHES[key];\n if (featureSwitch.enabled) {\n return true;\n }\n if (ctx.userId && featureSwitch.enabledUserHashes?.length) {\n if (featureSwitch.enabledUserHashes.includes(fnv1a(ctx.userId)))\n return true;\n }\n if (ctx.email && featureSwitch.enabledEmailHashes?.length) {\n if (\n featureSwitch.enabledEmailHashes.includes(fnv1a(ctx.email.toLowerCase()))\n )\n return true;\n }\n if (ctx.orgId && featureSwitch.enabledOrgIdHashes?.length) {\n if (featureSwitch.enabledOrgIdHashes.includes(fnv1a(ctx.orgId)))\n return true;\n }\n return false;\n}\n","/**\n * Identity hashing — FNV-1a 32-bit hash used to reference users / orgs / emails\n * without embedding plain-text identifiers in source code.\n *\n * Shared between the feature-switch registry (UI rollout targeting) and\n * `staff-org.ts` (authorization primitive). The hash is deterministic and\n * synchronous; no crypto API needed.\n */\n\nexport function fnv1a(input: string): string {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h.toString(16).padStart(8, \"0\");\n}\n\n/**\n * Hashes of internal staff org IDs.\n *\n * This list is the source of truth for `isStaffOrg()` — adding an entry here\n * grants that org access to every endpoint that uses `isStaffOrg` as an\n * authorization check. Treat changes with the same care as role grants.\n */\nexport const STAFF_ORG_ID_HASHES: readonly string[] = [\n \"afce210e\", // org_3ANttyrbWYJk6JKRSTRLEsbsDLe\n];\n"],"mappings":";;;;;;;;AAAA;;;ACAA;;;ACAA;AASO,SAAS,MAAM,OAAuB;AAC3C,MAAI,IAAI,eAAe;AACvB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,SAAK,MAAM,WAAW,CAAC;AACvB,QAAI,KAAK,KAAK,GAAG,QAAQ,MAAM;AAAA,EACjC;AACA,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACvC;AASO,IAAM,sBAAyC;AAAA,EACpD;AAAA;AACF;;;ADYA,IAAM,qCAAqC;AAAA,EACzC,GAAG;AAAA,EACH;AAAA;AACF;AAKA,IAAM,mBAA4D;AAAA,EAChE,oBAAuB,GAAG;AAAA,IACxB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,kCAA8B,GAAG;AAAA,IAC/B,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,sCAAgC,GAAG;AAAA,IACjC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,sCAAgC,GAAG;AAAA,IACjC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wDAAyC,GAAG;AAAA,IAC1C,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,kDAAsC,GAAG;AAAA,IACvC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,sDAAwC,GAAG;AAAA,IACzC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,gDAAqC,GAAG;AAAA,IACtC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,sCAAgC,GAAG;AAAA,IACjC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,kCAA8B,GAAG;AAAA,IAC/B,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,4BAA2B,GAAG;AAAA,IAC5B,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,wBAAyB,GAAG;AAAA,IAC1B,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,gBAAqB,GAAG;AAAA,IACtB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,kCAA8B,GAAG;AAAA,IAC/B,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,4DAA2C,GAAG;AAAA,IAC5C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,0DAA0C,GAAG;AAAA,IAC3C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,kDAAsC,GAAG;AAAA,IACvC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EAEA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,kDAAsC,GAAG;AAAA,IACvC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,8CAAoC,GAAG;AAAA,IACrC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,oDAAuC,GAAG;AAAA,IACxC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,wEAAiD,GAAG;AAAA,IAClD,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,gDAAqC,GAAG;AAAA,IACtC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,4DAA2C,GAAG;AAAA,IAC5C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,wDAAyC,GAAG;AAAA,IAC1C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,wDAAyC,GAAG;AAAA,IAC1C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,4DAA2C,GAAG;AAAA,IAC5C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,wCAAiC,GAAG;AAAA,IAClC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4DAA2C,GAAG;AAAA,IAC5C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,kEAA8C,GAAG;AAAA,IAC/C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,sCAAgC,GAAG;AAAA,IACjC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA;AAAA,IAET,oBAAoB,CAAC,UAAU;AAAA;AAAA,EACjC;AAAA,EACA,0DAA0C,GAAG;AAAA,IAC3C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,oDAAuC,GAAG;AAAA,IACxC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,0CAAkC,GAAG;AAAA,IACnC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,oCAA+B,GAAG;AAAA,IAChC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,sDAAwC,GAAG;AAAA,IACzC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,kDAAsC,GAAG;AAAA,IACvC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,EACX;AAAA,EACA,8DAA4C,GAAG;AAAA,IAC7C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,oDAAuC,GAAG;AAAA,IACxC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,gCAA6B,GAAG;AAAA,IAC9B,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,4CAAmC,GAAG;AAAA,IACpC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,kEAA8C,GAAG;AAAA,IAC/C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,0DAA0C,GAAG;AAAA,IAC3C,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AAAA,EACA,oDAAuC,GAAG;AAAA,IACxC,YAAY;AAAA,IACZ,aACE;AAAA,IACF,SAAS;AAAA,IACT,oBAAoB;AAAA,EACtB;AACF;AAuIO,SAAS,iBACd,KACA,KACS;AACT,QAAM,WAAW,IAAI,YAAY,GAAG;AACpC,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,iBAAiB,GAAG;AAC1C,MAAI,cAAc,SAAS;AACzB,WAAO;AAAA,EACT;AACA,MAAI,IAAI,UAAU,cAAc,mBAAmB,QAAQ;AACzD,QAAI,cAAc,kBAAkB,SAAS,MAAM,IAAI,MAAM,CAAC;AAC5D,aAAO;AAAA,EACX;AACA,MAAI,IAAI,SAAS,cAAc,oBAAoB,QAAQ;AACzD,QACE,cAAc,mBAAmB,SAAS,MAAM,IAAI,MAAM,YAAY,CAAC,CAAC;AAExE,aAAO;AAAA,EACX;AACA,MAAI,IAAI,SAAS,cAAc,oBAAoB,QAAQ;AACzD,QAAI,cAAc,mBAAmB,SAAS,MAAM,IAAI,KAAK,CAAC;AAC5D,aAAO;AAAA,EACX;AACA,SAAO;AACT;","names":[]}
@@ -15385,7 +15385,7 @@ function createCliClientHeaderInjector(options) {
15385
15385
  };
15386
15386
  }
15387
15387
  var addDefaultCliClientHeaders = createCliClientHeaderInjector({
15388
- clientVersion: "9.272.9"
15388
+ clientVersion: "9.273.1"
15389
15389
  });
15390
15390
  function addCliClientHeaders(headers) {
15391
15391
  addDefaultCliClientHeaders(headers);
@@ -15454,6 +15454,9 @@ function handleError(result, defaultMessage) {
15454
15454
  // ../../packages/api-contracts/src/contracts/model-providers.ts
15455
15455
  init_esm_shims();
15456
15456
 
15457
+ // ../../packages/api-contracts/src/contracts/deepseek-codex-model-catalog.ts
15458
+ init_esm_shims();
15459
+
15457
15460
  // ../../packages/api-contracts/src/contracts/model-price-tiers.ts
15458
15461
  init_esm_shims();
15459
15462
  var SUPPORTED_RUN_MODELS = [
@@ -15469,6 +15472,7 @@ var SUPPORTED_RUN_MODELS = [
15469
15472
  "claude-sonnet-5",
15470
15473
  "claude-sonnet-4-6",
15471
15474
  "deepseek-v4-pro",
15475
+ "deepseek-v4-flash",
15472
15476
  "kimi-k3",
15473
15477
  "kimi-k2.7-code",
15474
15478
  "MiniMax-M3",
@@ -15490,6 +15494,7 @@ var VM0_MODEL_PRICE_TIER = Object.freeze({
15490
15494
  "claude-sonnet-5": "$$",
15491
15495
  "claude-sonnet-4-6": "$$",
15492
15496
  "deepseek-v4-pro": "$",
15497
+ "deepseek-v4-flash": "$",
15493
15498
  "kimi-k3": "$$",
15494
15499
  "kimi-k2.7-code": "$",
15495
15500
  "MiniMax-M3": "$",
@@ -15508,6 +15513,7 @@ var MODEL_PROVIDER_TYPE_IDS = [
15508
15513
  "moonshot-api-key",
15509
15514
  "minimax-api-key",
15510
15515
  "deepseek-api-key",
15516
+ "deepseek-codex",
15511
15517
  "zai-api-key",
15512
15518
  "vercel-ai-gateway",
15513
15519
  "openrouter-codex",
@@ -15572,6 +15578,12 @@ var MODEL_PROVIDER_FIREWALL_PROVIDER_CONFIGS = {
15572
15578
  secretName: "DEEPSEEK_API_KEY",
15573
15579
  anthropicBaseUrl: "https://api.deepseek.com/anthropic"
15574
15580
  },
15581
+ "deepseek-codex": {
15582
+ framework: "codex",
15583
+ secretName: "DEEPSEEK_API_KEY",
15584
+ openaiBaseUrl: "https://api.deepseek.com",
15585
+ firewallBaseUrl: "https://api.deepseek.com/responses"
15586
+ },
15575
15587
  "zai-api-key": {
15576
15588
  framework: "claude-code",
15577
15589
  secretName: "ZAI_API_KEY",
@@ -15606,6 +15618,9 @@ function getFirewallBaseUrl(type) {
15606
15618
  return "https://chatgpt.com/backend-api/codex";
15607
15619
  }
15608
15620
  const config2 = MODEL_PROVIDER_FIREWALL_PROVIDER_CONFIGS[type];
15621
+ if (config2.firewallBaseUrl) {
15622
+ return config2.firewallBaseUrl;
15623
+ }
15609
15624
  if (config2.framework === "codex") {
15610
15625
  return config2.openaiBaseUrl?.replace(/\/+$/, "") ?? "https://api.openai.com/v1/responses";
15611
15626
  }
@@ -15662,6 +15677,11 @@ var MODEL_PROVIDER_FIREWALL_CONFIGS = {
15662
15677
  { name: "Authorization", valuePrefix: "Bearer" },
15663
15678
  MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN
15664
15679
  ),
15680
+ "deepseek-codex": mpFirewall(
15681
+ "deepseek-codex",
15682
+ { name: "Authorization", valuePrefix: "Bearer" },
15683
+ MODEL_PROVIDER_ENV_PLACEHOLDERS.OPENAI_API_KEY
15684
+ ),
15665
15685
  "zai-api-key": mpFirewall(
15666
15686
  "zai-api-key",
15667
15687
  { name: "Authorization", valuePrefix: "Bearer" },
@@ -15854,6 +15874,10 @@ var VM0_MODEL_TO_PROVIDER = {
15854
15874
  concreteType: "deepseek-api-key",
15855
15875
  vendor: "deepseek"
15856
15876
  },
15877
+ "deepseek-v4-flash": {
15878
+ concreteType: "deepseek-codex",
15879
+ vendor: "deepseek"
15880
+ },
15857
15881
  "gpt-5.6-sol": {
15858
15882
  concreteType: "openai-api-key",
15859
15883
  vendor: "openai"
@@ -16017,6 +16041,24 @@ var MODEL_PROVIDER_TYPES = {
16017
16041
  models: ["deepseek-v4-pro"],
16018
16042
  defaultModel: "deepseek-v4-pro"
16019
16043
  },
16044
+ // Codex-framework twin of deepseek-api-key. It shares the same DeepSeek
16045
+ // credential while using the native Responses API required by Codex.
16046
+ // Future DeepSeek Responses models can be added without changing runtime
16047
+ // configuration.
16048
+ "deepseek-codex": {
16049
+ framework: "codex",
16050
+ secretName: "DEEPSEEK_API_KEY",
16051
+ label: "DeepSeek",
16052
+ secretLabel: "API key",
16053
+ helpText: "Get your API key at: https://platform.deepseek.com/api_keys",
16054
+ envBindings: {
16055
+ OPENAI_API_KEY: "$secret",
16056
+ OPENAI_BASE_URL: "https://api.deepseek.com",
16057
+ OPENAI_MODEL: "$model"
16058
+ },
16059
+ models: ["deepseek-v4-flash"],
16060
+ defaultModel: "deepseek-v4-flash"
16061
+ },
16020
16062
  "zai-api-key": {
16021
16063
  framework: "claude-code",
16022
16064
  secretName: "ZAI_API_KEY",
@@ -16396,6 +16438,7 @@ var MODEL_FIRST_PROVIDER_COMPATIBILITY = {
16396
16438
  "vercel-ai-gateway-codex"
16397
16439
  ],
16398
16440
  "deepseek-v4-pro": ["vm0", "deepseek-api-key", "openrouter-api-key"],
16441
+ "deepseek-v4-flash": ["vm0", "deepseek-codex"],
16399
16442
  "kimi-k3": ["vm0", "moonshot-api-key"],
16400
16443
  "kimi-k2.7-code": ["vm0", "moonshot-api-key"],
16401
16444
  "MiniMax-M3": ["vm0", "minimax-api-key"],
@@ -16805,4 +16848,4 @@ export {
16805
16848
  apiErrorSchema,
16806
16849
  withErrorHandler
16807
16850
  };
16808
- //# sourceMappingURL=chunk-R645E73Z.js.map
16851
+ //# sourceMappingURL=chunk-SMHTQMUL.js.map