@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.
- package/{agent-JDYYCFFO.js → agent-KQOTPNPP.js} +6 -6
- package/{banking-MN6JH4W5.js → banking-EIG5WKPY.js} +4 -4
- package/{browser-ZP3U7XUT.js → browser-VAZSMORE.js} +4 -4
- package/{chat-6HKZUD3S.js → chat-3Z6S75AO.js} +9 -6
- package/{chat-6HKZUD3S.js.map → chat-3Z6S75AO.js.map} +1 -1
- package/{chunk-ERQOEAWS.js → chunk-5YQKJCZS.js} +2 -2
- package/{chunk-CB7OHO7A.js → chunk-6SSKZSK6.js} +2 -2
- package/{chunk-6LWCFOJJ.js → chunk-EA4RZ55T.js} +52 -51
- package/chunk-EA4RZ55T.js.map +1 -0
- package/{chunk-YFOMVTVJ.js → chunk-EDKQ3FHD.js} +2 -2
- package/{chunk-LMAYGYZK.js → chunk-HWPKHU2C.js} +2 -2
- package/{chunk-ANBQ4XWM.js → chunk-OFJ3F6QN.js} +3 -3
- package/chunk-OFJ3F6QN.js.map +1 -0
- package/{chunk-WNWWB3WF.js → chunk-OG5OCZJF.js} +20 -59
- package/chunk-OG5OCZJF.js.map +1 -0
- package/{chunk-R645E73Z.js → chunk-SMHTQMUL.js} +45 -2
- package/chunk-SMHTQMUL.js.map +1 -0
- package/{chunk-GZWZFIXW.js → chunk-T4HBQ4A2.js} +2 -2
- package/{chunk-P24Q7EMQ.js → chunk-WBPL6BLH.js} +2 -2
- package/{computer-use-LXSCXHSK.js → computer-use-2Q72ZNQV.js} +4 -4
- package/{connector-RVP22ZRZ.js → connector-7NDAUM3V.js} +7 -7
- package/{credit-RTSUVDT2.js → credit-U6MPC32S.js} +5 -5
- package/{developer-support-WWPQYCSV.js → developer-support-2GYAIRM7.js} +4 -4
- package/{doctor-LCF4TAOW.js → doctor-BHYTLNQ3.js} +5 -5
- package/{feishu-I2CSLJWZ.js → feishu-RGPBKZ7B.js} +4 -4
- package/{finance-DJESBGK6.js → finance-RG2M7ZGX.js} +4 -4
- package/{generate-KPPLJZDY.js → generate-7T2RMNED.js} +6 -6
- package/{github-M3XOPOGW.js → github-BARP7LPE.js} +4 -4
- package/{goal-22DFQ4IR.js → goal-ZQKGIH5N.js} +4 -4
- package/{host-7HJZ7B4D.js → host-DO5UMBCP.js} +4 -4
- package/{logs-EW4ILZJ3.js → logs-ETKUVJIZ.js} +6 -6
- package/{mail-6L6LPKCH.js → mail-2XOLGXFE.js} +6 -6
- package/{maps-JFBDULLB.js → maps-CZV42RZY.js} +4 -4
- package/{model-KVWK7LU7.js → model-CUSFEXFC.js} +5 -5
- package/{model-provider-NGEMWSWX.js → model-provider-G6CSZPBY.js} +5 -5
- package/{org-F4C5MUPY.js → org-UCBLDQR2.js} +4 -4
- package/package.json +1 -1
- package/{people-search-LKNHV6SR.js → people-search-DMSGCYFO.js} +4 -4
- package/{phone-SU4SAXQR.js → phone-JBZS2EOT.js} +4 -4
- package/{preference-MRQ5UCKF.js → preference-7AO4AH56.js} +4 -4
- package/{resource-35YNNBER.js → resource-BKU72GS4.js} +4 -4
- package/{scrape-EK5XJ53L.js → scrape-AUNRQT5Q.js} +4 -4
- package/{search-566TALXR.js → search-2C3G55BV.js} +6 -6
- package/{secret-2V3YCXFF.js → secret-QPY4JBAM.js} +4 -4
- package/{slack-RY4MFK67.js → slack-MFU3QK6E.js} +4 -4
- package/{teams-WD7BYGL7.js → teams-XU6F7E4D.js} +4 -4
- package/{telegram-TMT67J54.js → telegram-NVVY3ZHW.js} +4 -4
- package/{upgrade-25IW4Y4P.js → upgrade-RXUEIAEH.js} +3 -3
- package/{variable-RFADYZMT.js → variable-X4WLC52J.js} +4 -4
- package/{video-YLNJ2TZU.js → video-ZJLKT42Q.js} +3 -3
- package/{weather-LDVUKOT6.js → weather-ZUZQNU2Z.js} +4 -4
- package/{web-QUDPNP6O.js → web-DXXFBE2I.js} +4 -4
- package/{web-search-VIJGJUE2.js → web-search-TSXRO3ZD.js} +4 -4
- package/{whoami-W4PDJTXV.js → whoami-KSTNLZHP.js} +6 -6
- package/{workflow-2WI4PX7J.js → workflow-QMO57K3Z.js} +5 -5
- package/zero.js +43 -43
- package/chunk-6LWCFOJJ.js.map +0 -1
- package/chunk-ANBQ4XWM.js.map +0 -1
- package/chunk-R645E73Z.js.map +0 -1
- package/chunk-WNWWB3WF.js.map +0 -1
- /package/{agent-JDYYCFFO.js.map → agent-KQOTPNPP.js.map} +0 -0
- /package/{banking-MN6JH4W5.js.map → banking-EIG5WKPY.js.map} +0 -0
- /package/{browser-ZP3U7XUT.js.map → browser-VAZSMORE.js.map} +0 -0
- /package/{chunk-ERQOEAWS.js.map → chunk-5YQKJCZS.js.map} +0 -0
- /package/{chunk-CB7OHO7A.js.map → chunk-6SSKZSK6.js.map} +0 -0
- /package/{chunk-YFOMVTVJ.js.map → chunk-EDKQ3FHD.js.map} +0 -0
- /package/{chunk-LMAYGYZK.js.map → chunk-HWPKHU2C.js.map} +0 -0
- /package/{chunk-GZWZFIXW.js.map → chunk-T4HBQ4A2.js.map} +0 -0
- /package/{chunk-P24Q7EMQ.js.map → chunk-WBPL6BLH.js.map} +0 -0
- /package/{computer-use-LXSCXHSK.js.map → computer-use-2Q72ZNQV.js.map} +0 -0
- /package/{connector-RVP22ZRZ.js.map → connector-7NDAUM3V.js.map} +0 -0
- /package/{credit-RTSUVDT2.js.map → credit-U6MPC32S.js.map} +0 -0
- /package/{developer-support-WWPQYCSV.js.map → developer-support-2GYAIRM7.js.map} +0 -0
- /package/{doctor-LCF4TAOW.js.map → doctor-BHYTLNQ3.js.map} +0 -0
- /package/{feishu-I2CSLJWZ.js.map → feishu-RGPBKZ7B.js.map} +0 -0
- /package/{finance-DJESBGK6.js.map → finance-RG2M7ZGX.js.map} +0 -0
- /package/{generate-KPPLJZDY.js.map → generate-7T2RMNED.js.map} +0 -0
- /package/{github-M3XOPOGW.js.map → github-BARP7LPE.js.map} +0 -0
- /package/{goal-22DFQ4IR.js.map → goal-ZQKGIH5N.js.map} +0 -0
- /package/{host-7HJZ7B4D.js.map → host-DO5UMBCP.js.map} +0 -0
- /package/{logs-EW4ILZJ3.js.map → logs-ETKUVJIZ.js.map} +0 -0
- /package/{mail-6L6LPKCH.js.map → mail-2XOLGXFE.js.map} +0 -0
- /package/{maps-JFBDULLB.js.map → maps-CZV42RZY.js.map} +0 -0
- /package/{model-KVWK7LU7.js.map → model-CUSFEXFC.js.map} +0 -0
- /package/{model-provider-NGEMWSWX.js.map → model-provider-G6CSZPBY.js.map} +0 -0
- /package/{org-F4C5MUPY.js.map → org-UCBLDQR2.js.map} +0 -0
- /package/{people-search-LKNHV6SR.js.map → people-search-DMSGCYFO.js.map} +0 -0
- /package/{phone-SU4SAXQR.js.map → phone-JBZS2EOT.js.map} +0 -0
- /package/{preference-MRQ5UCKF.js.map → preference-7AO4AH56.js.map} +0 -0
- /package/{resource-35YNNBER.js.map → resource-BKU72GS4.js.map} +0 -0
- /package/{scrape-EK5XJ53L.js.map → scrape-AUNRQT5Q.js.map} +0 -0
- /package/{search-566TALXR.js.map → search-2C3G55BV.js.map} +0 -0
- /package/{secret-2V3YCXFF.js.map → secret-QPY4JBAM.js.map} +0 -0
- /package/{slack-RY4MFK67.js.map → slack-MFU3QK6E.js.map} +0 -0
- /package/{teams-WD7BYGL7.js.map → teams-XU6F7E4D.js.map} +0 -0
- /package/{telegram-TMT67J54.js.map → telegram-NVVY3ZHW.js.map} +0 -0
- /package/{upgrade-25IW4Y4P.js.map → upgrade-RXUEIAEH.js.map} +0 -0
- /package/{variable-RFADYZMT.js.map → variable-X4WLC52J.js.map} +0 -0
- /package/{video-YLNJ2TZU.js.map → video-ZJLKT42Q.js.map} +0 -0
- /package/{weather-LDVUKOT6.js.map → weather-ZUZQNU2Z.js.map} +0 -0
- /package/{web-QUDPNP6O.js.map → web-DXXFBE2I.js.map} +0 -0
- /package/{web-search-VIJGJUE2.js.map → web-search-TSXRO3ZD.js.map} +0 -0
- /package/{whoami-W4PDJTXV.js.map → whoami-KSTNLZHP.js.map} +0 -0
- /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-
|
|
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":"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","names":[]}
|
|
@@ -15385,7 +15385,7 @@ function createCliClientHeaderInjector(options) {
|
|
|
15385
15385
|
};
|
|
15386
15386
|
}
|
|
15387
15387
|
var addDefaultCliClientHeaders = createCliClientHeaderInjector({
|
|
15388
|
-
clientVersion: "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-
|
|
16851
|
+
//# sourceMappingURL=chunk-SMHTQMUL.js.map
|