@omnicross/core 0.4.2 → 0.4.3

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 (147) hide show
  1. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +11 -184
  2. package/dist/auth/GeminiCodeAssistProjectResolver.d.cts +41 -3
  3. package/dist/auth/GeminiCodeAssistProjectResolver.d.ts +41 -3
  4. package/dist/auth/GeminiCodeAssistProjectResolver.js +12 -185
  5. package/dist/{chunk-POUTD5AM.cjs → chunk-47E3I5PF.cjs} +10 -3
  6. package/dist/{chunk-WX2E2G7H.cjs → chunk-4NAMH4UE.cjs} +79 -51
  7. package/dist/{chunk-LQYS2N47.js → chunk-4RM22ETG.js} +14 -2
  8. package/dist/{chunk-YEVWA4C7.cjs → chunk-57Y2EA2G.cjs} +6 -5
  9. package/dist/chunk-6I4SAWCN.js +24 -0
  10. package/dist/chunk-AFH5CEMF.cjs +38 -0
  11. package/dist/{chunk-KIQ2HA2A.cjs → chunk-BTSADEX4.cjs} +5 -5
  12. package/dist/chunk-CGEZQC2G.cjs +67 -0
  13. package/dist/chunk-E5RCCGE7.cjs +95 -0
  14. package/dist/chunk-EE7VP4O3.js +230 -0
  15. package/dist/chunk-F6P4DIBL.js +95 -0
  16. package/dist/{chunk-BKXC4XM6.cjs → chunk-FORICQ5U.cjs} +15 -11
  17. package/dist/{chunk-PF7YQBKX.js → chunk-FYPKKMB3.js} +6 -2
  18. package/dist/chunk-HRBXQ5AC.js +44 -0
  19. package/dist/{chunk-LFEH7CEO.js → chunk-IDPMD4B7.js} +22 -0
  20. package/dist/{chunk-UPQIWJIE.cjs → chunk-INY54AYX.cjs} +14 -2
  21. package/dist/{chunk-QEOV6Y4E.cjs → chunk-J5XMB5KY.cjs} +359 -170
  22. package/dist/{chunk-C3NPMQTK.js → chunk-JHJRZ75C.js} +14 -10
  23. package/dist/chunk-K6J2RIEX.js +67 -0
  24. package/dist/chunk-KSMK45RD.cjs +45 -0
  25. package/dist/chunk-LL3MZ7O5.cjs +24 -0
  26. package/dist/{chunk-ECZ3ZE2C.js → chunk-M6PKXP6T.js} +4 -29
  27. package/dist/{chunk-PAXJGABW.js → chunk-MPFOC7AT.js} +10 -5
  28. package/dist/{chunk-DKBXDV5U.cjs → chunk-N3MGNLCU.cjs} +49 -44
  29. package/dist/chunk-NDIBVTBZ.cjs +230 -0
  30. package/dist/{chunk-5DJSOFEP.js → chunk-NTF7TLT7.js} +1 -1
  31. package/dist/chunk-ONTTXSRL.js +32 -0
  32. package/dist/{chunk-HN74IGEO.js → chunk-OXBGNEYR.js} +1 -1
  33. package/dist/{chunk-5GXOYVLB.js → chunk-QSOHEDKO.js} +44 -39
  34. package/dist/{chunk-TX3AEV6H.cjs → chunk-RXMF7GNF.cjs} +4 -3
  35. package/dist/{chunk-5TEWZN5J.js → chunk-SWY2LTMR.js} +277 -88
  36. package/dist/{chunk-EUZRH544.js → chunk-TKZ3DZS5.js} +10 -3
  37. package/dist/{chunk-MXI2PWIC.cjs → chunk-UKQHBK4Q.cjs} +1 -32
  38. package/dist/{chunk-3XVDFRCQ.cjs → chunk-UOOLU64V.cjs} +13 -8
  39. package/dist/{chunk-ZSA44G7J.cjs → chunk-VFFCV4J6.cjs} +3 -3
  40. package/dist/{chunk-6DDYNS2B.cjs → chunk-VGBJPHHD.cjs} +36 -14
  41. package/dist/{chunk-2T6D7LWE.cjs → chunk-VYOBVPNB.cjs} +6 -2
  42. package/dist/chunk-WYECWQ3J.cjs +44 -0
  43. package/dist/chunk-X6GHTNDL.cjs +482 -0
  44. package/dist/chunk-XBQTVRMK.js +45 -0
  45. package/dist/{chunk-R4VCO2CB.js → chunk-YEHQ5FXZ.js} +28 -0
  46. package/dist/{chunk-HDXSPXIN.js → chunk-ZBDDPWVQ.js} +4 -3
  47. package/dist/chunk-ZJJBITUN.js +482 -0
  48. package/dist/{chunk-QRXOLINS.js → chunk-ZMERU7D3.js} +3 -2
  49. package/dist/completion/CompletionService.cjs +29 -22
  50. package/dist/completion/CompletionService.js +28 -21
  51. package/dist/completion.cjs +29 -22
  52. package/dist/completion.js +28 -21
  53. package/dist/image-generation.cjs +2 -2
  54. package/dist/image-generation.d.cts +2 -2
  55. package/dist/image-generation.d.ts +2 -2
  56. package/dist/image-generation.js +1 -1
  57. package/dist/index.cjs +40 -29
  58. package/dist/index.d.cts +6 -3
  59. package/dist/index.d.ts +6 -3
  60. package/dist/index.js +40 -29
  61. package/dist/outbound-api/routeResolver.cjs +3 -3
  62. package/dist/outbound-api/routeResolver.d.cts +3 -3
  63. package/dist/outbound-api/routeResolver.d.ts +3 -3
  64. package/dist/outbound-api/routeResolver.js +2 -2
  65. package/dist/outbound-api/types.cjs +6 -2
  66. package/dist/outbound-api/types.d.cts +2 -2
  67. package/dist/outbound-api/types.d.ts +2 -2
  68. package/dist/outbound-api/types.js +7 -3
  69. package/dist/outbound-api.cjs +33 -22
  70. package/dist/outbound-api.d.cts +4 -4
  71. package/dist/outbound-api.d.ts +4 -4
  72. package/dist/outbound-api.js +33 -22
  73. package/dist/pipeline/AccountAllowanceScheduling.cjs +4 -3
  74. package/dist/pipeline/AccountAllowanceScheduling.d.cts +4 -4
  75. package/dist/pipeline/AccountAllowanceScheduling.d.ts +4 -4
  76. package/dist/pipeline/AccountAllowanceScheduling.js +3 -2
  77. package/dist/pipeline/AccountAllowanceStore.cjs +2 -2
  78. package/dist/pipeline/AccountAllowanceStore.js +1 -1
  79. package/dist/pipeline/AuthSource.d.cts +6 -0
  80. package/dist/pipeline/AuthSource.d.ts +6 -0
  81. package/dist/pipeline/SubscriptionAuthSource.cjs +5 -4
  82. package/dist/pipeline/SubscriptionAuthSource.js +4 -3
  83. package/dist/pipeline/SubscriptionAuthStrategy.d.cts +7 -0
  84. package/dist/pipeline/SubscriptionAuthStrategy.d.ts +7 -0
  85. package/dist/pipeline/antigravityQuotaFamily.cjs +16 -0
  86. package/dist/pipeline/antigravityQuotaFamily.d.cts +52 -0
  87. package/dist/pipeline/antigravityQuotaFamily.d.ts +52 -0
  88. package/dist/pipeline/antigravityQuotaFamily.js +16 -0
  89. package/dist/pipeline/upstreamFetch.cjs +3 -3
  90. package/dist/pipeline/upstreamFetch.js +2 -2
  91. package/dist/ports.d.cts +2 -2
  92. package/dist/ports.d.ts +2 -2
  93. package/dist/provider-proxy/ProviderProxy.cjs +29 -22
  94. package/dist/provider-proxy/ProviderProxy.js +28 -21
  95. package/dist/provider-proxy/identity/codexCliHeaders.cjs +4 -2
  96. package/dist/provider-proxy/identity/codexCliHeaders.js +4 -2
  97. package/dist/provider-proxy/identity/openCodeGoHeaders.cjs +17 -0
  98. package/dist/provider-proxy/identity/openCodeGoHeaders.d.cts +71 -0
  99. package/dist/provider-proxy/identity/openCodeGoHeaders.d.ts +71 -0
  100. package/dist/provider-proxy/identity/openCodeGoHeaders.js +17 -0
  101. package/dist/provider-proxy/ingress/providerProxyShared.cjs +29 -22
  102. package/dist/provider-proxy/ingress/providerProxyShared.js +28 -21
  103. package/dist/provider-proxy.cjs +29 -22
  104. package/dist/provider-proxy.d.cts +2 -2
  105. package/dist/provider-proxy.d.ts +2 -2
  106. package/dist/provider-proxy.js +28 -21
  107. package/dist/{routeResolver-STwMz_G4.d.ts → routeResolver-BLTleO4H.d.ts} +1 -1
  108. package/dist/{routeResolver-Da0yvkL1.d.cts → routeResolver-C2z0pp-q.d.cts} +1 -1
  109. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.cjs +2 -2
  110. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.js +1 -1
  111. package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -3
  112. package/dist/transformer/transformers/AnthropicTransformer.js +2 -2
  113. package/dist/transformer/transformers/AntigravityTransformer.cjs +31 -0
  114. package/dist/transformer/transformers/AntigravityTransformer.d.cts +104 -0
  115. package/dist/transformer/transformers/AntigravityTransformer.d.ts +104 -0
  116. package/dist/transformer/transformers/AntigravityTransformer.js +31 -0
  117. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +3 -3
  118. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.cts +2 -1
  119. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.ts +2 -1
  120. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +2 -2
  121. package/dist/transformer/transformers/GeminiTransformer.cjs +3 -3
  122. package/dist/transformer/transformers/GeminiTransformer.js +2 -2
  123. package/dist/transformer/transformers/antigravityFailover.cjs +30 -0
  124. package/dist/transformer/transformers/antigravityFailover.d.cts +52 -0
  125. package/dist/transformer/transformers/antigravityFailover.d.ts +52 -0
  126. package/dist/transformer/transformers/antigravityFailover.js +30 -0
  127. package/dist/transformer/transformers/antigravityIdentity.cjs +24 -0
  128. package/dist/transformer/transformers/antigravityIdentity.d.cts +76 -0
  129. package/dist/transformer/transformers/antigravityIdentity.d.ts +76 -0
  130. package/dist/transformer/transformers/antigravityIdentity.js +24 -0
  131. package/dist/transformer/transformers.cjs +61 -9
  132. package/dist/transformer/transformers.d.cts +7 -2
  133. package/dist/transformer/transformers.d.ts +7 -2
  134. package/dist/transformer/transformers.js +61 -9
  135. package/dist/transformer/types.d.cts +11 -0
  136. package/dist/transformer/types.d.ts +11 -0
  137. package/dist/transformer.cjs +21 -12
  138. package/dist/transformer.d.cts +3 -0
  139. package/dist/transformer.d.ts +3 -0
  140. package/dist/transformer.js +20 -11
  141. package/dist/{types-Be-yt_6T.d.cts → types-BVwJQ9ZS.d.cts} +3 -0
  142. package/dist/{types-D-oHYusb.d.cts → types-C6m-Db26.d.cts} +25 -4
  143. package/dist/{types-Dvlpjn0d.d.ts → types-Da735j2d.d.ts} +25 -4
  144. package/dist/{types-Dm4_36V4.d.ts → types-VAHRysdP.d.ts} +3 -0
  145. package/package.json +2 -2
  146. package/dist/chunk-4IH4EL7M.cjs +0 -9
  147. package/dist/chunk-XEKD23J5.js +0 -9
@@ -0,0 +1,95 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkVFFCV4J6cjs = require('./chunk-VFFCV4J6.cjs');
4
+
5
+ // src/transformer/transformers/antigravityIdentity.ts
6
+ var DEFAULT_ANTIGRAVITY_VERSION = "2.8.0";
7
+ var ANTIGRAVITY_VERSION_MANIFEST_URL = "https://antigravity-hub-auto-updater-974169037036.us-central1.run.app/manifest/latest-arm64-mac.yml";
8
+ var ANTIGRAVITY_VERSION_FETCH_TIMEOUT_MS = 5e3;
9
+ var discoveredAntigravityVersion = null;
10
+ var antigravityVersionFetch = null;
11
+ var nextVersionProbeAt = 0;
12
+ function __resetAntigravityVersionCache() {
13
+ discoveredAntigravityVersion = null;
14
+ antigravityVersionFetch = null;
15
+ nextVersionProbeAt = 0;
16
+ }
17
+ function getAntigravityVersion() {
18
+ return process.env["ANTIGRAVITY_VERSION"] || discoveredAntigravityVersion || DEFAULT_ANTIGRAVITY_VERSION;
19
+ }
20
+ function parseAntigravityManifestVersion(yamlText) {
21
+ for (const line of yamlText.split(/\r?\n/)) {
22
+ const match = /^\s*version\s*:\s*(?:"([^"]*)"|'([^']*)'|([^\s#]+))\s*(?:#.*)?$/.exec(line);
23
+ if (!match) continue;
24
+ const version = (_nullishCoalesce(_nullishCoalesce(_nullishCoalesce(match[1], () => ( match[2])), () => ( match[3])), () => ( ""))).trim();
25
+ return /^\d+\.\d+\.\d+$/.test(version) ? version : null;
26
+ }
27
+ return null;
28
+ }
29
+ function ensureAntigravityVersion(fetcher = (url, init) => _chunkVFFCV4J6cjs.fetchUpstream.call(void 0, url, _nullishCoalesce(init, () => ( {})), { providerId: "antigravity", redactBodies: true }), signal) {
30
+ if (["ANTIGRAVITY_VERSION", "ANTIGRAVITY_CL", "ANTIGRAVITY_OS", "ANTIGRAVITY_ARCH"].some((key) => process.env[key])) return Promise.resolve();
31
+ if (antigravityVersionFetch) return antigravityVersionFetch;
32
+ if (Date.now() < nextVersionProbeAt) return Promise.resolve();
33
+ nextVersionProbeAt = Date.now() + 6e4;
34
+ antigravityVersionFetch = (async () => {
35
+ try {
36
+ const timeoutSignal = AbortSignal.timeout(ANTIGRAVITY_VERSION_FETCH_TIMEOUT_MS);
37
+ const response = await fetcher(ANTIGRAVITY_VERSION_MANIFEST_URL, {
38
+ headers: { "Cache-Control": "no-cache", "User-Agent": "electron-builder" },
39
+ signal: signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal
40
+ });
41
+ if (response.ok) {
42
+ const version = parseAntigravityManifestVersion(await response.text());
43
+ if (version) {
44
+ discoveredAntigravityVersion = version;
45
+ nextVersionProbeAt = Date.now() + 60 * 6e4;
46
+ }
47
+ }
48
+ } catch (e) {
49
+ } finally {
50
+ antigravityVersionFetch = null;
51
+ }
52
+ })();
53
+ return antigravityVersionFetch;
54
+ }
55
+ function getAntigravityUserAgent() {
56
+ const version = getAntigravityVersion();
57
+ const cl = process.env["ANTIGRAVITY_CL"] || "963137146";
58
+ const os = process.env["ANTIGRAVITY_OS"] || "darwin";
59
+ const arch = process.env["ANTIGRAVITY_ARCH"] || "arm64";
60
+ return `antigravity/hub/${version} (aidev_client; os_type=${os}; arch=${arch}; cl=${cl})`;
61
+ }
62
+ var ANTIGRAVITY_MODEL_WIRE_PROFILES = {
63
+ "gemini-3.5-flash-extra-low": { modelEnum: "MODEL_PLACEHOLDER_M187", maxOutputTokens: 65536 },
64
+ "gemini-3.5-flash-low": { modelEnum: "MODEL_PLACEHOLDER_M20", maxOutputTokens: 65536 },
65
+ "gemini-3-flash-agent": { modelEnum: "MODEL_PLACEHOLDER_M132", maxOutputTokens: 65536 },
66
+ "gemini-3.1-pro-low": { modelEnum: "MODEL_PLACEHOLDER_M36", maxOutputTokens: 65535 },
67
+ "gemini-pro-agent": { modelEnum: "MODEL_PLACEHOLDER_M16", maxOutputTokens: 65535 },
68
+ // Claude on daily-cloudcode-pa rejects maxOutputTokens > 64000 with a 400.
69
+ // The model_enum label is untracked for Anthropic ids; the backend does not
70
+ // require it.
71
+ "claude-sonnet-4-5": { maxOutputTokens: 64e3 },
72
+ "claude-sonnet-4-5-thinking": { maxOutputTokens: 64e3 },
73
+ "claude-opus-4-5": { maxOutputTokens: 64e3 },
74
+ "claude-opus-4-5-thinking": { maxOutputTokens: 64e3 },
75
+ "claude-sonnet-4-6": { maxOutputTokens: 64e3 },
76
+ "claude-sonnet-4-6-thinking": { maxOutputTokens: 64e3 },
77
+ "claude-opus-4-6": { maxOutputTokens: 64e3 },
78
+ "claude-opus-4-6-thinking": { maxOutputTokens: 64e3 },
79
+ "gpt-oss-120b": { maxOutputTokens: 32768 },
80
+ "gpt-oss-120b-medium": { maxOutputTokens: 32768 }
81
+ };
82
+ function getAntigravityModelWireProfile(wireModelId) {
83
+ return ANTIGRAVITY_MODEL_WIRE_PROFILES[wireModelId];
84
+ }
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+ exports.DEFAULT_ANTIGRAVITY_VERSION = DEFAULT_ANTIGRAVITY_VERSION; exports.__resetAntigravityVersionCache = __resetAntigravityVersionCache; exports.getAntigravityVersion = getAntigravityVersion; exports.parseAntigravityManifestVersion = parseAntigravityManifestVersion; exports.ensureAntigravityVersion = ensureAntigravityVersion; exports.getAntigravityUserAgent = getAntigravityUserAgent; exports.ANTIGRAVITY_MODEL_WIRE_PROFILES = ANTIGRAVITY_MODEL_WIRE_PROFILES; exports.getAntigravityModelWireProfile = getAntigravityModelWireProfile;
@@ -0,0 +1,230 @@
1
+ import {
2
+ resolveCodeAssistApiVersion,
3
+ resolveCodeAssistEndpoint
4
+ } from "./chunk-QSOHEDKO.js";
5
+ import {
6
+ fetchUpstream
7
+ } from "./chunk-NTF7TLT7.js";
8
+
9
+ // src/auth/GeminiCodeAssistProjectResolver.ts
10
+ var FREE_TIER_ID = "free-tier";
11
+ var LEGACY_TIER_ID = "legacy-tier";
12
+ var ONBOARD_POLL_INTERVAL_MS = 5e3;
13
+ var ONBOARD_MAX_POLLS = 24;
14
+ var GeminiCodeAssistHandshakeError = class extends Error {
15
+ constructor(message, status, code) {
16
+ super(message);
17
+ this.status = status;
18
+ this.code = code;
19
+ this.name = "GeminiCodeAssistHandshakeError";
20
+ }
21
+ status;
22
+ code;
23
+ };
24
+ var ANTIGRAVITY_CODE_ASSIST_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
25
+ var GeminiCodeAssistProjectResolver = class {
26
+ /** account access token → resolved project id (undefined = free-tier, no project). */
27
+ cache = /* @__PURE__ */ new Map();
28
+ /** In-flight handshakes so concurrent callers share one round-trip. */
29
+ inflight = /* @__PURE__ */ new Map();
30
+ dialect;
31
+ endpoint;
32
+ // upstream-proxy: the Code Assist handshake is upstream egress → honor the
33
+ // dialect's proxy layer by default (still injectable for tests).
34
+ constructor(fetchImpl, options = {}) {
35
+ this.dialect = options.dialect ?? "gemini-cli";
36
+ this.endpoint = options.endpoint;
37
+ const providerId = options.proxyProviderId ?? "gemini";
38
+ this.fetchImpl = fetchImpl ?? ((url, init) => fetchUpstream(url, init, { providerId }));
39
+ }
40
+ fetchImpl;
41
+ /** Test/diagnostic helper — clear the cached resolution for an account. */
42
+ clearCache() {
43
+ this.cache.clear();
44
+ this.inflight.clear();
45
+ }
46
+ /**
47
+ * Resolve (and cache) the Code Assist project for the given access token.
48
+ * Runs the handshake at most once per token. Returns `undefined` for a
49
+ * brand-new free-tier account (valid — the envelope sends no project).
50
+ */
51
+ async resolveProject(accessToken) {
52
+ if (this.cache.has(accessToken)) {
53
+ return this.cache.get(accessToken);
54
+ }
55
+ const existing = this.inflight.get(accessToken);
56
+ if (existing) return existing;
57
+ const run = this.runHandshake(accessToken).then((project) => {
58
+ this.cache.set(accessToken, project);
59
+ return project;
60
+ }).finally(() => {
61
+ this.inflight.delete(accessToken);
62
+ });
63
+ this.inflight.set(accessToken, run);
64
+ return run;
65
+ }
66
+ codeAssistUrl(method) {
67
+ const base = this.endpoint ?? resolveCodeAssistEndpoint();
68
+ return `${base}/${resolveCodeAssistApiVersion()}:${method}`;
69
+ }
70
+ /** The client metadata the dialect's upstream expects on the handshake calls. */
71
+ handshakeMetadata(project) {
72
+ if (this.dialect === "antigravity") {
73
+ return { ideType: "ANTIGRAVITY" };
74
+ }
75
+ return {
76
+ ideType: "IDE_UNSPECIFIED",
77
+ platform: "PLATFORM_UNSPECIFIED",
78
+ pluginType: "GEMINI",
79
+ duetProject: project
80
+ };
81
+ }
82
+ /** The tier id used when `allowedTiers` carries no default. */
83
+ get fallbackTierId() {
84
+ return this.dialect === "antigravity" ? FREE_TIER_ID : LEGACY_TIER_ID;
85
+ }
86
+ /** Seed project id from env; reject a purely-numeric value (project NUMBER). */
87
+ seedProjectId() {
88
+ const seed = process.env.GOOGLE_CLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT_ID || "";
89
+ if (seed && /^\d+$/.test(seed.trim())) return "";
90
+ return seed.trim();
91
+ }
92
+ async runHandshake(accessToken) {
93
+ const seededProject = this.seedProjectId();
94
+ const load = await this.postCodeAssist("loadCodeAssist", accessToken, {
95
+ cloudaicompanionProject: seededProject || void 0,
96
+ metadata: this.handshakeMetadata(seededProject || void 0)
97
+ });
98
+ if (load.currentTier?.id) {
99
+ return this.settleProject(load.cloudaicompanionProject || void 0);
100
+ }
101
+ const defaultTier = load.allowedTiers?.find((t) => t.isDefault);
102
+ const tierId = defaultTier?.id ?? this.fallbackTierId;
103
+ const isFreeish = tierId === FREE_TIER_ID || tierId === LEGACY_TIER_ID;
104
+ const onboardProject = isFreeish ? void 0 : seededProject || void 0;
105
+ let lro = await this.postCodeAssist("onboardUser", accessToken, {
106
+ tierId,
107
+ cloudaicompanionProject: onboardProject,
108
+ metadata: this.handshakeMetadata(onboardProject)
109
+ });
110
+ let polls = 0;
111
+ while (!lro.done && polls < ONBOARD_MAX_POLLS) {
112
+ await delay(ONBOARD_POLL_INTERVAL_MS);
113
+ polls++;
114
+ lro = await this.getOperation(accessToken, lro.name);
115
+ }
116
+ if (lro.error) {
117
+ throw new GeminiCodeAssistHandshakeError(
118
+ `Code Assist onboardUser failed: ${lro.error.message ?? "unknown"}`,
119
+ lro.error.code ?? 500
120
+ );
121
+ }
122
+ return this.settleProject(lro.response?.cloudaicompanionProject?.id || void 0);
123
+ }
124
+ /**
125
+ * Final project settlement per dialect: gemini-cli treats `undefined` as the
126
+ * valid fresh free-tier value; antigravity ALWAYS carries a project (its
127
+ * envelope is rejected without one), so an absent project is a hard error.
128
+ */
129
+ settleProject(project) {
130
+ if (project === void 0 && this.dialect === "antigravity") {
131
+ throw new GeminiCodeAssistHandshakeError(
132
+ "Code Assist loadCodeAssist did not return a cloudaicompanionProject (antigravity requires one)",
133
+ 502
134
+ );
135
+ }
136
+ return project;
137
+ }
138
+ /** POST a Code Assist method, surfacing the documented hard failures clearly. */
139
+ async postCodeAssist(method, accessToken, body) {
140
+ const url = this.codeAssistUrl(method);
141
+ const res = await this.fetchImpl(url, {
142
+ method: "POST",
143
+ headers: {
144
+ Authorization: `Bearer ${accessToken}`,
145
+ "Content-Type": "application/json"
146
+ },
147
+ body: JSON.stringify(body)
148
+ });
149
+ if (!res.ok) {
150
+ await this.throwForStatus(res, method);
151
+ }
152
+ return await res.json();
153
+ }
154
+ async getOperation(accessToken, name) {
155
+ const url = this.codeAssistUrl("getOperation");
156
+ const res = await this.fetchImpl(url, {
157
+ method: "POST",
158
+ headers: {
159
+ Authorization: `Bearer ${accessToken}`,
160
+ "Content-Type": "application/json"
161
+ },
162
+ body: JSON.stringify({ name })
163
+ });
164
+ if (!res.ok) {
165
+ await this.throwForStatus(res, "getOperation");
166
+ }
167
+ return await res.json();
168
+ }
169
+ /** Map a non-2xx Code Assist response to a clear, surfaced error. */
170
+ async throwForStatus(res, method) {
171
+ let detailCode;
172
+ let detailMessage = "";
173
+ try {
174
+ const errBody = await res.json();
175
+ detailCode = errBody.error?.status;
176
+ detailMessage = errBody.error?.message ?? "";
177
+ } catch {
178
+ }
179
+ if (res.status === 403) {
180
+ throw new GeminiCodeAssistHandshakeError(
181
+ `Code Assist ${method} denied (403 ${detailCode ?? "PERMISSION_DENIED"}): ${detailMessage || "enable the Cloud AI Companion API and grant the required role"}`,
182
+ 403,
183
+ detailCode
184
+ );
185
+ }
186
+ if (res.status === 429) {
187
+ throw new GeminiCodeAssistHandshakeError(
188
+ `Code Assist ${method} rate-limited (429): ${detailMessage || "quota exceeded, retry later"}`,
189
+ 429,
190
+ detailCode
191
+ );
192
+ }
193
+ throw new GeminiCodeAssistHandshakeError(
194
+ `Code Assist ${method} failed (${res.status}): ${detailMessage || res.statusText}`,
195
+ res.status,
196
+ detailCode
197
+ );
198
+ }
199
+ };
200
+ function delay(ms) {
201
+ return new Promise((resolve) => {
202
+ setTimeout(resolve, ms);
203
+ });
204
+ }
205
+ var _resolverSingleton = null;
206
+ function getGeminiCodeAssistProjectResolver() {
207
+ if (!_resolverSingleton) {
208
+ _resolverSingleton = new GeminiCodeAssistProjectResolver();
209
+ }
210
+ return _resolverSingleton;
211
+ }
212
+ var _antigravityResolverSingleton = null;
213
+ function getAntigravityProjectResolver() {
214
+ if (!_antigravityResolverSingleton) {
215
+ _antigravityResolverSingleton = new GeminiCodeAssistProjectResolver(void 0, {
216
+ endpoint: ANTIGRAVITY_CODE_ASSIST_ENDPOINT,
217
+ dialect: "antigravity",
218
+ proxyProviderId: "antigravity"
219
+ });
220
+ }
221
+ return _antigravityResolverSingleton;
222
+ }
223
+
224
+ export {
225
+ GeminiCodeAssistHandshakeError,
226
+ ANTIGRAVITY_CODE_ASSIST_ENDPOINT,
227
+ GeminiCodeAssistProjectResolver,
228
+ getGeminiCodeAssistProjectResolver,
229
+ getAntigravityProjectResolver
230
+ };
@@ -0,0 +1,95 @@
1
+ import {
2
+ fetchUpstream
3
+ } from "./chunk-NTF7TLT7.js";
4
+
5
+ // src/transformer/transformers/antigravityIdentity.ts
6
+ var DEFAULT_ANTIGRAVITY_VERSION = "2.8.0";
7
+ var ANTIGRAVITY_VERSION_MANIFEST_URL = "https://antigravity-hub-auto-updater-974169037036.us-central1.run.app/manifest/latest-arm64-mac.yml";
8
+ var ANTIGRAVITY_VERSION_FETCH_TIMEOUT_MS = 5e3;
9
+ var discoveredAntigravityVersion = null;
10
+ var antigravityVersionFetch = null;
11
+ var nextVersionProbeAt = 0;
12
+ function __resetAntigravityVersionCache() {
13
+ discoveredAntigravityVersion = null;
14
+ antigravityVersionFetch = null;
15
+ nextVersionProbeAt = 0;
16
+ }
17
+ function getAntigravityVersion() {
18
+ return process.env["ANTIGRAVITY_VERSION"] || discoveredAntigravityVersion || DEFAULT_ANTIGRAVITY_VERSION;
19
+ }
20
+ function parseAntigravityManifestVersion(yamlText) {
21
+ for (const line of yamlText.split(/\r?\n/)) {
22
+ const match = /^\s*version\s*:\s*(?:"([^"]*)"|'([^']*)'|([^\s#]+))\s*(?:#.*)?$/.exec(line);
23
+ if (!match) continue;
24
+ const version = (match[1] ?? match[2] ?? match[3] ?? "").trim();
25
+ return /^\d+\.\d+\.\d+$/.test(version) ? version : null;
26
+ }
27
+ return null;
28
+ }
29
+ function ensureAntigravityVersion(fetcher = (url, init) => fetchUpstream(url, init ?? {}, { providerId: "antigravity", redactBodies: true }), signal) {
30
+ if (["ANTIGRAVITY_VERSION", "ANTIGRAVITY_CL", "ANTIGRAVITY_OS", "ANTIGRAVITY_ARCH"].some((key) => process.env[key])) return Promise.resolve();
31
+ if (antigravityVersionFetch) return antigravityVersionFetch;
32
+ if (Date.now() < nextVersionProbeAt) return Promise.resolve();
33
+ nextVersionProbeAt = Date.now() + 6e4;
34
+ antigravityVersionFetch = (async () => {
35
+ try {
36
+ const timeoutSignal = AbortSignal.timeout(ANTIGRAVITY_VERSION_FETCH_TIMEOUT_MS);
37
+ const response = await fetcher(ANTIGRAVITY_VERSION_MANIFEST_URL, {
38
+ headers: { "Cache-Control": "no-cache", "User-Agent": "electron-builder" },
39
+ signal: signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal
40
+ });
41
+ if (response.ok) {
42
+ const version = parseAntigravityManifestVersion(await response.text());
43
+ if (version) {
44
+ discoveredAntigravityVersion = version;
45
+ nextVersionProbeAt = Date.now() + 60 * 6e4;
46
+ }
47
+ }
48
+ } catch {
49
+ } finally {
50
+ antigravityVersionFetch = null;
51
+ }
52
+ })();
53
+ return antigravityVersionFetch;
54
+ }
55
+ function getAntigravityUserAgent() {
56
+ const version = getAntigravityVersion();
57
+ const cl = process.env["ANTIGRAVITY_CL"] || "963137146";
58
+ const os = process.env["ANTIGRAVITY_OS"] || "darwin";
59
+ const arch = process.env["ANTIGRAVITY_ARCH"] || "arm64";
60
+ return `antigravity/hub/${version} (aidev_client; os_type=${os}; arch=${arch}; cl=${cl})`;
61
+ }
62
+ var ANTIGRAVITY_MODEL_WIRE_PROFILES = {
63
+ "gemini-3.5-flash-extra-low": { modelEnum: "MODEL_PLACEHOLDER_M187", maxOutputTokens: 65536 },
64
+ "gemini-3.5-flash-low": { modelEnum: "MODEL_PLACEHOLDER_M20", maxOutputTokens: 65536 },
65
+ "gemini-3-flash-agent": { modelEnum: "MODEL_PLACEHOLDER_M132", maxOutputTokens: 65536 },
66
+ "gemini-3.1-pro-low": { modelEnum: "MODEL_PLACEHOLDER_M36", maxOutputTokens: 65535 },
67
+ "gemini-pro-agent": { modelEnum: "MODEL_PLACEHOLDER_M16", maxOutputTokens: 65535 },
68
+ // Claude on daily-cloudcode-pa rejects maxOutputTokens > 64000 with a 400.
69
+ // The model_enum label is untracked for Anthropic ids; the backend does not
70
+ // require it.
71
+ "claude-sonnet-4-5": { maxOutputTokens: 64e3 },
72
+ "claude-sonnet-4-5-thinking": { maxOutputTokens: 64e3 },
73
+ "claude-opus-4-5": { maxOutputTokens: 64e3 },
74
+ "claude-opus-4-5-thinking": { maxOutputTokens: 64e3 },
75
+ "claude-sonnet-4-6": { maxOutputTokens: 64e3 },
76
+ "claude-sonnet-4-6-thinking": { maxOutputTokens: 64e3 },
77
+ "claude-opus-4-6": { maxOutputTokens: 64e3 },
78
+ "claude-opus-4-6-thinking": { maxOutputTokens: 64e3 },
79
+ "gpt-oss-120b": { maxOutputTokens: 32768 },
80
+ "gpt-oss-120b-medium": { maxOutputTokens: 32768 }
81
+ };
82
+ function getAntigravityModelWireProfile(wireModelId) {
83
+ return ANTIGRAVITY_MODEL_WIRE_PROFILES[wireModelId];
84
+ }
85
+
86
+ export {
87
+ DEFAULT_ANTIGRAVITY_VERSION,
88
+ __resetAntigravityVersionCache,
89
+ getAntigravityVersion,
90
+ parseAntigravityManifestVersion,
91
+ ensureAntigravityVersion,
92
+ getAntigravityUserAgent,
93
+ ANTIGRAVITY_MODEL_WIRE_PROFILES,
94
+ getAntigravityModelWireProfile
95
+ };
@@ -1,6 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2;
2
2
 
3
- var _chunk2T6D7LWEcjs = require('./chunk-2T6D7LWE.cjs');
3
+ var _chunkKSMK45RDcjs = require('./chunk-KSMK45RD.cjs');
4
+
5
+
6
+ var _chunkVYOBVPNBcjs = require('./chunk-VYOBVPNB.cjs');
4
7
 
5
8
  // src/pipeline/AccountAllowanceScheduling.ts
6
9
  var DEFAULT_POLICY = {
@@ -30,11 +33,12 @@ function isAccountAllowanceExhaustedError(error) {
30
33
  const value = error;
31
34
  return value.code === "account_allowance_exhausted" && value.status === 429;
32
35
  }
33
- function freshWorstWindow(snapshot) {
34
- return snapshot.windows.filter((window) => window.state === "fresh" && typeof window.usedPercent === "number").sort((left, right) => (_nullishCoalesce(right.usedPercent, () => ( -1))) - (_nullishCoalesce(left.usedPercent, () => ( -1))))[0];
36
+ function freshWorstWindow(snapshot, resolvedModel) {
37
+ const family = snapshot.providerId === "antigravity" && resolvedModel ? _chunkKSMK45RDcjs.antigravityModelFamily.call(void 0, resolvedModel) : void 0;
38
+ return snapshot.windows.filter((window) => window.state === "fresh" && (typeof window.usedPercent === "number" || window.disabled === true) && (!resolvedModel || snapshot.providerId !== "antigravity" || window.scope === "all" || window.modelFamily === family)).map((window) => window.disabled === true ? { ...window, usedPercent: 100 } : window).sort((left, right) => (_nullishCoalesce(right.usedPercent, () => ( -1))) - (_nullishCoalesce(left.usedPercent, () => ( -1))))[0];
35
39
  }
36
40
  var AccountAllowanceScheduling = (_class2 = class {
37
- constructor(store = _chunk2T6D7LWEcjs.getSharedAccountAllowanceStore.call(void 0, ), now = Date.now) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
41
+ constructor(store = _chunkVYOBVPNBcjs.getSharedAccountAllowanceStore.call(void 0, ), now = Date.now) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
38
42
  this.store = store;
39
43
  this.now = now;
40
44
  }
@@ -49,8 +53,8 @@ var AccountAllowanceScheduling = (_class2 = class {
49
53
  getConfig() {
50
54
  return { ...this.config };
51
55
  }
52
- evaluate(providerId, accountId, basePriority, now = this.now()) {
53
- const decision = this.decide(providerId, accountId, basePriority, now);
56
+ evaluate(providerId, accountId, basePriority, now = this.now(), resolvedModel) {
57
+ const decision = this.decide(providerId, accountId, basePriority, now, resolvedModel);
54
58
  this.recordApplied(decision);
55
59
  return decision;
56
60
  }
@@ -59,10 +63,10 @@ var AccountAllowanceScheduling = (_class2 = class {
59
63
  * Admin/read-model callers use this so polling an account list never creates
60
64
  * synthetic demotion/pause history entries.
61
65
  */
62
- preview(providerId, accountId, basePriority, now = this.now()) {
63
- return this.decide(providerId, accountId, basePriority, now);
66
+ preview(providerId, accountId, basePriority, now = this.now(), resolvedModel) {
67
+ return this.decide(providerId, accountId, basePriority, now, resolvedModel);
64
68
  }
65
- decide(providerId, accountId, basePriority, now) {
69
+ decide(providerId, accountId, basePriority, now, resolvedModel) {
66
70
  const decidedAt = new Date(now).toISOString();
67
71
  const base = {
68
72
  providerId,
@@ -73,12 +77,12 @@ var AccountAllowanceScheduling = (_class2 = class {
73
77
  decidedAt
74
78
  };
75
79
  if (!this.config.enabled) return { ...base, action: "ignore", reason: "policy-disabled" };
76
- if (providerId !== "claude" && providerId !== "codex" && providerId !== "kimi" && providerId !== "opencodego" && providerId !== "grok" && providerId !== "copilot") {
80
+ if (providerId !== "claude" && providerId !== "codex" && providerId !== "kimi" && providerId !== "opencodego" && providerId !== "grok" && providerId !== "copilot" && providerId !== "antigravity") {
77
81
  return { ...base, action: "ignore", reason: "provider-unsupported" };
78
82
  }
79
83
  const snapshot = this.store.get(providerId, accountId, now);
80
84
  if (!snapshot) return { ...base, action: "ignore", reason: "snapshot-missing" };
81
- const worst = freshWorstWindow(snapshot);
85
+ const worst = freshWorstWindow(snapshot, resolvedModel);
82
86
  if (!worst || worst.usedPercent === null) {
83
87
  return { ...base, action: "ignore", reason: "snapshot-not-fresh", observedAt: snapshot.observedAt };
84
88
  }
@@ -17,7 +17,8 @@ function cloneWindow(window) {
17
17
  ...window.windowMinutes === void 0 ? {} : { windowMinutes: window.windowMinutes },
18
18
  ...window.resetsAt === void 0 ? {} : { resetsAt: window.resetsAt },
19
19
  ...window.remainingSeconds === void 0 ? {} : { remainingSeconds: window.remainingSeconds },
20
- state: window.state
20
+ state: window.state,
21
+ ...window.disabled === void 0 ? {} : { disabled: window.disabled }
21
22
  };
22
23
  }
23
24
  function cloneSnapshot(snapshot) {
@@ -56,7 +57,7 @@ function normalizedInstant(value) {
56
57
  return Number.isFinite(parsed) ? new Date(parsed).toISOString() : void 0;
57
58
  }
58
59
  function isAllowanceProvider(value) {
59
- return value === "claude" || value === "codex" || value === "gemini" || value === "opencodego" || value === "kimi" || value === "grok" || value === "copilot";
60
+ return value === "claude" || value === "codex" || value === "gemini" || value === "opencodego" || value === "kimi" || value === "grok" || value === "copilot" || value === "antigravity";
60
61
  }
61
62
  function isWindowState(value) {
62
63
  return value === "fresh" || value === "stale" || value === "unavailable" || value === "unsupported";
@@ -95,6 +96,9 @@ function normalizeAccountAllowanceSnapshot(value) {
95
96
  ...windowMinutes === void 0 ? {} : { windowMinutes },
96
97
  ...resetsAt === void 0 ? {} : { resetsAt },
97
98
  ...remainingSeconds2 === void 0 ? {} : { remainingSeconds: remainingSeconds2 },
99
+ // antigravity: the disabled counter-family hard-block flag (additive;
100
+ // absent on every other provider's windows).
101
+ ...window.disabled === true ? { disabled: true } : {},
98
102
  state
99
103
  });
100
104
  }
@@ -0,0 +1,44 @@
1
+ import {
2
+ flattenHeaderValue
3
+ } from "./chunk-ONTTXSRL.js";
4
+
5
+ // src/provider-proxy/identity/openCodeGoHeaders.ts
6
+ var OPENCODE_SESSION_HEADER = "x-opencode-session";
7
+ var configuredUserAgent;
8
+ function setOpenCodeGoUserAgent(userAgent) {
9
+ const trimmed = typeof userAgent === "string" ? userAgent.trim() : "";
10
+ configuredUserAgent = trimmed.length > 0 ? trimmed : void 0;
11
+ }
12
+ function getOpenCodeGoUserAgent() {
13
+ if (configuredUserAgent) return configuredUserAgent;
14
+ const version = true ? "0.4.3" : "0.0.0-dev";
15
+ return `omnicross/${version}`;
16
+ }
17
+ function extractOpenCodeSessionHeader(reqHeaders) {
18
+ for (const [rawKey, rawVal] of Object.entries(reqHeaders)) {
19
+ if (rawKey.toLowerCase() !== OPENCODE_SESSION_HEADER) continue;
20
+ const value = flattenHeaderValue(rawVal);
21
+ if (value === void 0) continue;
22
+ const trimmed = value.trim();
23
+ if (trimmed.length > 0) return trimmed;
24
+ }
25
+ return void 0;
26
+ }
27
+ function resolveOpenCodeSessionHeader(callerSession, sessionKey) {
28
+ const caller = typeof callerSession === "string" ? callerSession.trim() : "";
29
+ if (caller.length > 0) return caller;
30
+ if (typeof sessionKey === "string" && sessionKey.trim().length > 0) return sessionKey;
31
+ return void 0;
32
+ }
33
+ function __resetOpenCodeGoHeadersForTests() {
34
+ configuredUserAgent = void 0;
35
+ }
36
+
37
+ export {
38
+ OPENCODE_SESSION_HEADER,
39
+ setOpenCodeGoUserAgent,
40
+ getOpenCodeGoUserAgent,
41
+ extractOpenCodeSessionHeader,
42
+ resolveOpenCodeSessionHeader,
43
+ __resetOpenCodeGoHeadersForTests
44
+ };
@@ -1,3 +1,18 @@
1
+ // src/transformer/transformers/utils/anthropicImageDrop.ts
2
+ var anthropicDroppedImageCount = 0;
3
+ var warnedForCurrentStream = false;
4
+ function beginAnthropicImageDropScope() {
5
+ warnedForCurrentStream = false;
6
+ }
7
+ function noteDroppedInlineImages(count) {
8
+ anthropicDroppedImageCount += count;
9
+ if (warnedForCurrentStream) return;
10
+ warnedForCurrentStream = true;
11
+ console.warn(
12
+ `[Anthropic face] dropped ${count} session image(s); the Anthropic Messages wire has no image block (total dropped: ${anthropicDroppedImageCount})`
13
+ );
14
+ }
15
+
1
16
  // src/transformer/transformers/AnthropicOpenAIToAnthropicStream.ts
2
17
  var DEFAULT_ANTHROPIC_PING_HEARTBEAT_MS = 2e4;
3
18
  var anthropicPingHeartbeatMs = DEFAULT_ANTHROPIC_PING_HEARTBEAT_MS;
@@ -124,6 +139,7 @@ data: ${JSON.stringify({ type: "message_stop" })}
124
139
  isClosed = true;
125
140
  };
126
141
  try {
142
+ beginAnthropicImageDropScope();
127
143
  armPing();
128
144
  while (true) {
129
145
  const { done, value } = await reader.read();
@@ -190,6 +206,10 @@ data: ${JSON.stringify({
190
206
  }
191
207
  const choice = chunk.choices?.[0];
192
208
  if (!choice) continue;
209
+ const deltaImages = choice.delta?.images;
210
+ if (Array.isArray(deltaImages) && deltaImages.length > 0) {
211
+ noteDroppedInlineImages(deltaImages.length);
212
+ }
193
213
  if (chunk.usage) {
194
214
  stopReasonDelta = {
195
215
  type: "message_delta",
@@ -375,6 +395,8 @@ data: ${JSON.stringify({
375
395
  }
376
396
 
377
397
  export {
398
+ beginAnthropicImageDropScope,
399
+ noteDroppedInlineImages,
378
400
  DEFAULT_ANTHROPIC_PING_HEARTBEAT_MS,
379
401
  setAnthropicPingHeartbeatMs,
380
402
  getAnthropicPingHeartbeatMs,
@@ -1811,6 +1811,11 @@ function assertFiniteImageApiLimits(limits) {
1811
1811
  throw new TypeError("Image API aggregate output limit must cover one output.");
1812
1812
  }
1813
1813
  }
1814
+ function resolveImageRequestProvider(runtime, model) {
1815
+ const providerId = runtime.modelRoutes.get(model);
1816
+ if (!providerId) throw new ImageGenerationError("unsupported_model", { param: "model" });
1817
+ return providerId;
1818
+ }
1814
1819
 
1815
1820
  // src/image-generation/openai-images/generateHandler.ts
1816
1821
  function validateRuntime(runtime) {
@@ -1863,7 +1868,10 @@ function createImageGenerateHandler(deps) {
1863
1868
  ...runtime.preferredAccountGroup ? { preferredAccountGroup: runtime.preferredAccountGroup } : {},
1864
1869
  ...runtime.boundAccountFallbackPolicy ? { boundAccountFallbackPolicy: runtime.boundAccountFallbackPolicy } : {}
1865
1870
  },
1866
- { providerId: runtime.providerId, ...runtime.retention ? { retention: runtime.retention } : {} }
1871
+ {
1872
+ providerId: resolveImageRequestProvider(runtime, request2.model),
1873
+ ...runtime.retention ? { retention: runtime.retention } : {}
1874
+ }
1867
1875
  );
1868
1876
  if (request2.stream) {
1869
1877
  await writeImageApiSse({
@@ -2536,7 +2544,10 @@ function createImageEditHandler(deps) {
2536
2544
  ...runtime.preferredAccountGroup ? { preferredAccountGroup: runtime.preferredAccountGroup } : {},
2537
2545
  ...runtime.boundAccountFallbackPolicy ? { boundAccountFallbackPolicy: runtime.boundAccountFallbackPolicy } : {}
2538
2546
  },
2539
- { providerId: runtime.providerId, ...runtime.retention ? { retention: runtime.retention } : {} }
2547
+ {
2548
+ providerId: resolveImageRequestProvider(runtime, request2.model),
2549
+ ...runtime.retention ? { retention: runtime.retention } : {}
2550
+ }
2540
2551
  );
2541
2552
  if (request2.stream) {
2542
2553
  await writeImageApiSse({
@@ -2883,6 +2894,7 @@ var NORMALIZATION_RUNTIME = {
2883
2894
  providerId: "responses-image-inspection",
2884
2895
  defaultModel: "responses-image-model",
2885
2896
  modelAliases: /* @__PURE__ */ new Map(),
2897
+ modelRoutes: /* @__PURE__ */ new Map(),
2886
2898
  limits: DEFAULT_IMAGE_API_LIMITS
2887
2899
  };
2888
2900
  function invalid5(param) {