@centerforagenticai/pi-multi-account 0.1.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/LICENSE +21 -0
- package/NOTICE +29 -0
- package/README.md +999 -0
- package/config/models/pi-multi-account.v1.json +32 -0
- package/config/subscription-plans.v1.json +122 -0
- package/package.json +76 -0
- package/packages/pi-anthropic-oauth/LICENSE +21 -0
- package/packages/pi-anthropic-oauth/package.json +54 -0
- package/packages/pi-anthropic-oauth/src/auth.ts +396 -0
- package/packages/pi-anthropic-oauth/src/context.ts +116 -0
- package/packages/pi-anthropic-oauth/src/convert.ts +303 -0
- package/packages/pi-anthropic-oauth/src/index.ts +37 -0
- package/packages/pi-anthropic-oauth/src/prompt.ts +137 -0
- package/packages/pi-anthropic-oauth/src/stream.ts +476 -0
- package/packages/pi-antigravity/LICENSE +21 -0
- package/packages/pi-antigravity/package.json +77 -0
- package/packages/pi-antigravity/src/auth/index.ts +14 -0
- package/packages/pi-antigravity/src/auth/oauth.ts +442 -0
- package/packages/pi-antigravity/src/client/client.ts +561 -0
- package/packages/pi-antigravity/src/client/index.ts +1 -0
- package/packages/pi-antigravity/src/context.ts +110 -0
- package/packages/pi-antigravity/src/diagnostics/diagnostics.ts +96 -0
- package/packages/pi-antigravity/src/diagnostics/index.ts +1 -0
- package/packages/pi-antigravity/src/image/image.ts +336 -0
- package/packages/pi-antigravity/src/image/index.ts +1 -0
- package/packages/pi-antigravity/src/index.ts +280 -0
- package/packages/pi-antigravity/src/models/discovery.ts +154 -0
- package/packages/pi-antigravity/src/models/grouping.ts +424 -0
- package/packages/pi-antigravity/src/models/index.ts +3 -0
- package/packages/pi-antigravity/src/models/models.ts +500 -0
- package/packages/pi-antigravity/src/stream/index.ts +1 -0
- package/packages/pi-antigravity/src/stream/stream.ts +1478 -0
- package/packages/pi-antigravity/src/types/enums.ts +42 -0
- package/packages/pi-antigravity/src/types/index.ts +2 -0
- package/packages/pi-antigravity/src/types/types.ts +292 -0
- package/packages/pi-antigravity/src/usage/index.ts +1 -0
- package/packages/pi-antigravity/src/usage/usage.ts +416 -0
- package/packages/pi-antigravity/src/utils/http.ts +91 -0
- package/packages/pi-antigravity/src/utils/index.ts +3 -0
- package/packages/pi-antigravity/src/utils/security.ts +73 -0
- package/packages/pi-antigravity/src/utils/util.ts +132 -0
- package/scripts/multi-account.mjs +44 -0
- package/src/account-labels.ts +223 -0
- package/src/account-plan-assignment.ts +340 -0
- package/src/account-rate-history.ts +372 -0
- package/src/anthropic-adaptive-stream.ts +531 -0
- package/src/anthropic-alias-stream.ts +140 -0
- package/src/anthropic-context-compat.ts +80 -0
- package/src/api-pricing.ts +579 -0
- package/src/bounded-file-lines.ts +97 -0
- package/src/catalog-rebinding.ts +177 -0
- package/src/catalog-registration-probe.ts +111 -0
- package/src/codex-adapter.ts +345 -0
- package/src/codex-model-defaults.ts +785 -0
- package/src/command-completions.ts +404 -0
- package/src/commands.ts +2000 -0
- package/src/compaction.ts +14 -0
- package/src/config.ts +1317 -0
- package/src/continuation.ts +569 -0
- package/src/cooldowns.ts +110 -0
- package/src/cost-digest-store.ts +332 -0
- package/src/cost-digest.ts +1044 -0
- package/src/cost-history.ts +251 -0
- package/src/cost-period-closer.ts +160 -0
- package/src/cost-report-json.ts +318 -0
- package/src/cost-report-reader.ts +368 -0
- package/src/cost-report-render.ts +207 -0
- package/src/cost-report.ts +1104 -0
- package/src/coverage-attestation.ts +397 -0
- package/src/credential-lifecycle.ts +169 -0
- package/src/credential-refresh.ts +248 -0
- package/src/declaration-notice-marker.ts +238 -0
- package/src/diagnostic-store.ts +276 -0
- package/src/diagnostics.ts +309 -0
- package/src/discovery.ts +471 -0
- package/src/duration.ts +13 -0
- package/src/error-classification.ts +256 -0
- package/src/fuzzy.ts +15 -0
- package/src/group-policy.ts +81 -0
- package/src/history-store.ts +897 -0
- package/src/index.ts +5572 -0
- package/src/lifecycle.ts +378 -0
- package/src/logical-dispatch.ts +279 -0
- package/src/logical-model-selector.ts +254 -0
- package/src/logical-model-switcher.ts +430 -0
- package/src/logical-provider-attribution.ts +544 -0
- package/src/logical-provider.ts +1237 -0
- package/src/logical-route-indicator.ts +215 -0
- package/src/machine-lease.ts +445 -0
- package/src/model-support.ts +66 -0
- package/src/models-declaration.ts +1091 -0
- package/src/openai-adapter.ts +117 -0
- package/src/openrouter-budget.ts +304 -0
- package/src/openrouter-fallback.ts +146 -0
- package/src/period-boundaries.ts +376 -0
- package/src/pi-anthropic-oauth.d.ts +6 -0
- package/src/preflight.ts +253 -0
- package/src/pricing-cache.ts +235 -0
- package/src/project-identity.ts +100 -0
- package/src/provider-registration.ts +942 -0
- package/src/rate-formula.ts +163 -0
- package/src/recovery-engine.ts +853 -0
- package/src/recovery-output.ts +837 -0
- package/src/recovery-plan.ts +239 -0
- package/src/report-range.ts +203 -0
- package/src/route-resolver.ts +789 -0
- package/src/routing-config-transaction.ts +232 -0
- package/src/routing.ts +1163 -0
- package/src/runtime-state.ts +630 -0
- package/src/session-account-groups.ts +284 -0
- package/src/session-restore.ts +287 -0
- package/src/shared-usage.ts +1392 -0
- package/src/standalone-cli.ts +720 -0
- package/src/status-view.ts +578 -0
- package/src/subscription-plan-catalog.ts +346 -0
- package/src/tier-model-resolver.ts +46 -0
- package/src/upstream-anthropic.ts +315 -0
- package/src/upstream-antigravity.ts +327 -0
- package/src/usage-fetch.ts +1634 -0
- package/src/usage.ts +1026 -0
- package/src/vendor.ts +87 -0
- package/src/warmer.ts +231 -0
- package/src/watchdog.ts +219 -0
- package/src/window-history.ts +270 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ProviderConfig,
|
|
3
|
+
ProviderModelConfig,
|
|
4
|
+
} from "@earendil-works/pi-coding-agent";
|
|
5
|
+
import {
|
|
6
|
+
createAssistantMessageEventStream,
|
|
7
|
+
type Api,
|
|
8
|
+
type AssistantMessage,
|
|
9
|
+
type AssistantMessageEvent,
|
|
10
|
+
type AssistantMessageEventStream,
|
|
11
|
+
type Context,
|
|
12
|
+
type Model,
|
|
13
|
+
type SimpleStreamOptions,
|
|
14
|
+
} from "@earendil-works/pi-ai";
|
|
15
|
+
import { registerApiProvider } from "@earendil-works/pi-ai/compat";
|
|
16
|
+
|
|
17
|
+
const AUTH_ENTRYPOINT = "../packages/pi-antigravity/src/auth/index.js";
|
|
18
|
+
const CLIENT_ENTRYPOINT = "../packages/pi-antigravity/src/client/index.js";
|
|
19
|
+
const MODELS_ENTRYPOINT = "../packages/pi-antigravity/src/models/index.js";
|
|
20
|
+
const STREAM_ENTRYPOINT = "../packages/pi-antigravity/src/stream/index.js";
|
|
21
|
+
const USAGE_ENTRYPOINT = "../packages/pi-antigravity/src/usage/index.js";
|
|
22
|
+
|
|
23
|
+
const UPSTREAM_API_ID = "antigravity-api" as const;
|
|
24
|
+
const UPSTREAM_PROVIDER_ID = "antigravity";
|
|
25
|
+
|
|
26
|
+
export const GOOGLE_ANTIGRAVITY_API = "hypha-google-antigravity" as const;
|
|
27
|
+
export const ANTIGRAVITY_ALIAS_API_SOURCE_ID =
|
|
28
|
+
"hyphagroup-pi-multi-account:google-antigravity";
|
|
29
|
+
|
|
30
|
+
export type AntigravityUpstreamStream = (
|
|
31
|
+
model: Model<Api>,
|
|
32
|
+
context: Context,
|
|
33
|
+
options?: SimpleStreamOptions,
|
|
34
|
+
) => AssistantMessageEventStream;
|
|
35
|
+
|
|
36
|
+
export type AntigravityAliasApiRegistrar = (
|
|
37
|
+
aliasStream: AntigravityUpstreamStream,
|
|
38
|
+
) => void;
|
|
39
|
+
|
|
40
|
+
export type AntigravityBoundaryEnvironment = Readonly<{
|
|
41
|
+
ANTIGRAVITY_DEBUG_DUMP?: string;
|
|
42
|
+
NOAGY_DEBUG_DUMP?: string;
|
|
43
|
+
}>;
|
|
44
|
+
|
|
45
|
+
type AntigravityOauth = NonNullable<ProviderConfig["oauth"]>;
|
|
46
|
+
type AntigravityCatalog = Readonly<{
|
|
47
|
+
models: ProviderModelConfig[];
|
|
48
|
+
routing: Readonly<Record<string, unknown>>;
|
|
49
|
+
}>;
|
|
50
|
+
|
|
51
|
+
export type UpstreamAntigravityPrimitives = Readonly<{
|
|
52
|
+
login: AntigravityOauth["login"];
|
|
53
|
+
refreshToken: AntigravityOauth["refreshToken"];
|
|
54
|
+
getApiKey: AntigravityOauth["getApiKey"];
|
|
55
|
+
defaultEndpoint: string;
|
|
56
|
+
getCurrentCatalog: () => AntigravityCatalog;
|
|
57
|
+
refreshModels: NonNullable<ProviderConfig["refreshModels"]>;
|
|
58
|
+
upstreamApi: typeof UPSTREAM_API_ID;
|
|
59
|
+
stream: AntigravityUpstreamStream;
|
|
60
|
+
fetchUsage: (
|
|
61
|
+
apiKey?: string,
|
|
62
|
+
options?: { signal?: AbortSignal },
|
|
63
|
+
) => Promise<unknown>;
|
|
64
|
+
}>;
|
|
65
|
+
|
|
66
|
+
export class UpstreamAntigravityContractError extends Error {
|
|
67
|
+
constructor(message: string) {
|
|
68
|
+
super(
|
|
69
|
+
`[pi-antigravity contract] ${message} Run npm run upstream:check before publication.`,
|
|
70
|
+
);
|
|
71
|
+
this.name = "UpstreamAntigravityContractError";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
76
|
+
typeof value === "object" && value !== null;
|
|
77
|
+
|
|
78
|
+
function namedFunction(
|
|
79
|
+
module: Record<string, unknown>,
|
|
80
|
+
name: string,
|
|
81
|
+
): (...args: never[]) => unknown {
|
|
82
|
+
const value = module[name];
|
|
83
|
+
if (typeof value !== "function") {
|
|
84
|
+
throw new UpstreamAntigravityContractError(
|
|
85
|
+
`reviewed barrel did not export function ${name}`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
return value as (...args: never[]) => unknown;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function namedString(
|
|
92
|
+
module: Record<string, unknown>,
|
|
93
|
+
name: string,
|
|
94
|
+
): string {
|
|
95
|
+
const value = module[name];
|
|
96
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
97
|
+
throw new UpstreamAntigravityContractError(
|
|
98
|
+
`reviewed barrel did not export string ${name}`,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let primitivesPromise: Promise<UpstreamAntigravityPrimitives> | undefined;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Loads only the five reviewed public barrels by exact specifier, validates the
|
|
108
|
+
* named values, and copies those values into the extension-owned boundary.
|
|
109
|
+
* Variable specifiers prevent this repository's stricter compiler options from
|
|
110
|
+
* compiling third-party TypeScript implementation files as local source.
|
|
111
|
+
*/
|
|
112
|
+
export function loadUpstreamAntigravityPrimitives(): Promise<UpstreamAntigravityPrimitives> {
|
|
113
|
+
primitivesPromise ??= Promise.all([
|
|
114
|
+
import(AUTH_ENTRYPOINT) as Promise<unknown>,
|
|
115
|
+
import(CLIENT_ENTRYPOINT) as Promise<unknown>,
|
|
116
|
+
import(MODELS_ENTRYPOINT) as Promise<unknown>,
|
|
117
|
+
import(STREAM_ENTRYPOINT) as Promise<unknown>,
|
|
118
|
+
import(USAGE_ENTRYPOINT) as Promise<unknown>,
|
|
119
|
+
]).then(([auth, client, models, stream, usage]) => {
|
|
120
|
+
if (
|
|
121
|
+
!isRecord(auth) ||
|
|
122
|
+
!isRecord(client) ||
|
|
123
|
+
!isRecord(models) ||
|
|
124
|
+
!isRecord(stream) ||
|
|
125
|
+
!isRecord(usage)
|
|
126
|
+
) {
|
|
127
|
+
throw new UpstreamAntigravityContractError(
|
|
128
|
+
"a reviewed barrel did not expose a module namespace",
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const upstreamApi = namedString(stream, "ANTIGRAVITY_API");
|
|
133
|
+
const upstreamProvider = namedString(models, "PROVIDER_ID");
|
|
134
|
+
if (upstreamApi !== UPSTREAM_API_ID || upstreamProvider !== UPSTREAM_PROVIDER_ID) {
|
|
135
|
+
throw new UpstreamAntigravityContractError(
|
|
136
|
+
"reviewed upstream provider or API identity changed",
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return Object.freeze({
|
|
141
|
+
login: namedFunction(auth, "loginAntigravity") as AntigravityOauth["login"],
|
|
142
|
+
refreshToken: namedFunction(
|
|
143
|
+
auth,
|
|
144
|
+
"refreshAntigravityToken",
|
|
145
|
+
) as AntigravityOauth["refreshToken"],
|
|
146
|
+
getApiKey: namedFunction(auth, "getApiKey") as AntigravityOauth["getApiKey"],
|
|
147
|
+
defaultEndpoint: namedString(client, "DEFAULT_ENDPOINT"),
|
|
148
|
+
getCurrentCatalog: namedFunction(
|
|
149
|
+
models,
|
|
150
|
+
"getCurrentAntigravityCatalog",
|
|
151
|
+
) as UpstreamAntigravityPrimitives["getCurrentCatalog"],
|
|
152
|
+
refreshModels: namedFunction(
|
|
153
|
+
models,
|
|
154
|
+
"refreshAntigravityModels",
|
|
155
|
+
) as UpstreamAntigravityPrimitives["refreshModels"],
|
|
156
|
+
upstreamApi,
|
|
157
|
+
stream: namedFunction(
|
|
158
|
+
stream,
|
|
159
|
+
"streamAntigravity",
|
|
160
|
+
) as AntigravityUpstreamStream,
|
|
161
|
+
fetchUsage: namedFunction(
|
|
162
|
+
usage,
|
|
163
|
+
"fetchAccountUsage",
|
|
164
|
+
) as UpstreamAntigravityPrimitives["fetchUsage"],
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
return primitivesPromise;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Upstream writes raw request and response material when either supported
|
|
172
|
+
* DEBUG_DUMP variable is exactly "1". A hostile or careless caller must not
|
|
173
|
+
* be able to publish this extension's alias API or provider config while that
|
|
174
|
+
* mode can write `/tmp/antigravity-last-request.json`.
|
|
175
|
+
*/
|
|
176
|
+
export function assertAntigravityDebugDumpDisabled(
|
|
177
|
+
env: AntigravityBoundaryEnvironment = process.env,
|
|
178
|
+
): void {
|
|
179
|
+
const debugDump = env.ANTIGRAVITY_DEBUG_DUMP;
|
|
180
|
+
const legacyDebugDump = env.NOAGY_DEBUG_DUMP;
|
|
181
|
+
if (debugDump === "1" || legacyDebugDump === "1") {
|
|
182
|
+
throw new UpstreamAntigravityContractError(
|
|
183
|
+
"unsafe upstream debug-dump mode is enabled",
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function withAliasAttribution(
|
|
189
|
+
message: AssistantMessage,
|
|
190
|
+
aliasModel: Model<Api>,
|
|
191
|
+
): AssistantMessage {
|
|
192
|
+
return {
|
|
193
|
+
...message,
|
|
194
|
+
api: aliasModel.api,
|
|
195
|
+
provider: aliasModel.provider,
|
|
196
|
+
model: aliasModel.id,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function withAliasEvent(
|
|
201
|
+
event: AssistantMessageEvent,
|
|
202
|
+
aliasModel: Model<Api>,
|
|
203
|
+
): AssistantMessageEvent {
|
|
204
|
+
switch (event.type) {
|
|
205
|
+
case "done":
|
|
206
|
+
return {
|
|
207
|
+
...event,
|
|
208
|
+
message: withAliasAttribution(event.message, aliasModel),
|
|
209
|
+
};
|
|
210
|
+
case "error":
|
|
211
|
+
return {
|
|
212
|
+
...event,
|
|
213
|
+
error: withAliasAttribution(event.error, aliasModel),
|
|
214
|
+
};
|
|
215
|
+
default:
|
|
216
|
+
return {
|
|
217
|
+
...event,
|
|
218
|
+
partial: withAliasAttribution(event.partial, aliasModel),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function reattributeAntigravityStream(
|
|
224
|
+
upstream: AssistantMessageEventStream,
|
|
225
|
+
aliasModel: Model<Api>,
|
|
226
|
+
): AssistantMessageEventStream {
|
|
227
|
+
const attributed = createAssistantMessageEventStream();
|
|
228
|
+
void (async () => {
|
|
229
|
+
for await (const event of upstream) {
|
|
230
|
+
attributed.push(withAliasEvent(event, aliasModel));
|
|
231
|
+
}
|
|
232
|
+
})();
|
|
233
|
+
return attributed;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Rebinds only the request's provider/API identity to the reviewed upstream
|
|
238
|
+
* transport, then restores the caller's exact alias identity on every event.
|
|
239
|
+
* It makes one upstream call and never retries or replays a failed request.
|
|
240
|
+
*/
|
|
241
|
+
export function createAntigravityAliasStream(
|
|
242
|
+
upstreamStream: AntigravityUpstreamStream,
|
|
243
|
+
): AntigravityUpstreamStream {
|
|
244
|
+
return (aliasModel, context, options) => {
|
|
245
|
+
const upstreamModel: Model<Api> = {
|
|
246
|
+
...aliasModel,
|
|
247
|
+
api: UPSTREAM_API_ID,
|
|
248
|
+
provider: UPSTREAM_PROVIDER_ID,
|
|
249
|
+
};
|
|
250
|
+
return reattributeAntigravityStream(
|
|
251
|
+
upstreamStream(upstreamModel, context, options),
|
|
252
|
+
aliasModel,
|
|
253
|
+
);
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const registerAliasApiWithCompat: AntigravityAliasApiRegistrar = (
|
|
258
|
+
aliasStream,
|
|
259
|
+
) => {
|
|
260
|
+
registerApiProvider(
|
|
261
|
+
{
|
|
262
|
+
api: GOOGLE_ANTIGRAVITY_API,
|
|
263
|
+
stream: aliasStream,
|
|
264
|
+
streamSimple: aliasStream,
|
|
265
|
+
},
|
|
266
|
+
ANTIGRAVITY_ALIAS_API_SOURCE_ID,
|
|
267
|
+
);
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Registers both compat slots for the current extension-factory generation.
|
|
272
|
+
* The debug guard runs before imports or the process-global registry can change.
|
|
273
|
+
*/
|
|
274
|
+
export async function registerAntigravityAliasApi(
|
|
275
|
+
upstreamStream?: AntigravityUpstreamStream,
|
|
276
|
+
registrar: AntigravityAliasApiRegistrar = registerAliasApiWithCompat,
|
|
277
|
+
env: AntigravityBoundaryEnvironment = process.env,
|
|
278
|
+
): Promise<AntigravityUpstreamStream> {
|
|
279
|
+
assertAntigravityDebugDumpDisabled(env);
|
|
280
|
+
const stream = upstreamStream ?? (await loadUpstreamAntigravityPrimitives()).stream;
|
|
281
|
+
const aliasStream = createAntigravityAliasStream(stream);
|
|
282
|
+
registrar(aliasStream);
|
|
283
|
+
return aliasStream;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function withManagedApi(
|
|
287
|
+
models: readonly ProviderModelConfig[],
|
|
288
|
+
): ProviderModelConfig[] {
|
|
289
|
+
return models.map((model) => ({
|
|
290
|
+
...model,
|
|
291
|
+
api: GOOGLE_ANTIGRAVITY_API,
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Creates the extension-owned provider shape without invoking the upstream
|
|
297
|
+
* extension factory. Publication remains with the caller so later registration
|
|
298
|
+
* work can create canonical and numbered aliases from this one boundary.
|
|
299
|
+
*/
|
|
300
|
+
export async function createAntigravityProviderConfig(
|
|
301
|
+
models?: readonly ProviderModelConfig[],
|
|
302
|
+
upstreamStream?: AntigravityUpstreamStream,
|
|
303
|
+
env: AntigravityBoundaryEnvironment = process.env,
|
|
304
|
+
): Promise<ProviderConfig> {
|
|
305
|
+
assertAntigravityDebugDumpDisabled(env);
|
|
306
|
+
const primitives = await loadUpstreamAntigravityPrimitives();
|
|
307
|
+
const aliasStream = createAntigravityAliasStream(
|
|
308
|
+
upstreamStream ?? primitives.stream,
|
|
309
|
+
);
|
|
310
|
+
const selectedModels = models ?? primitives.getCurrentCatalog().models;
|
|
311
|
+
return {
|
|
312
|
+
name: "Google Antigravity",
|
|
313
|
+
baseUrl: primitives.defaultEndpoint,
|
|
314
|
+
api: GOOGLE_ANTIGRAVITY_API,
|
|
315
|
+
models: withManagedApi(selectedModels),
|
|
316
|
+
refreshModels: async (context) =>
|
|
317
|
+
withManagedApi(await primitives.refreshModels(context)),
|
|
318
|
+
oauth: {
|
|
319
|
+
name: "Google Antigravity",
|
|
320
|
+
isSubscription: true,
|
|
321
|
+
login: primitives.login,
|
|
322
|
+
refreshToken: primitives.refreshToken,
|
|
323
|
+
getApiKey: primitives.getApiKey,
|
|
324
|
+
},
|
|
325
|
+
streamSimple: aliasStream,
|
|
326
|
+
};
|
|
327
|
+
}
|