dsh-plugin-subscription-usage 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +50 -2
- package/cordis.patch.yml +5 -0
- package/icon.svg +9 -0
- package/lib/auth/claude-code-creds.d.ts +23 -0
- package/lib/auth/claude-code-creds.js +172 -0
- package/lib/auth/device-flow.d.ts +55 -0
- package/lib/auth/device-flow.js +177 -0
- package/lib/auth/jwt.d.ts +10 -0
- package/lib/auth/jwt.js +25 -0
- package/lib/auth/oauth-flow.d.ts +91 -0
- package/lib/auth/oauth-flow.js +227 -0
- package/lib/auth/pkce.d.ts +31 -0
- package/lib/auth/pkce.js +35 -0
- package/lib/auth/rpc.d.ts +233 -0
- package/lib/auth/rpc.js +501 -0
- package/lib/auth/store.d.ts +198 -0
- package/lib/auth/store.js +473 -0
- package/lib/client/Footer.d.ts +3 -0
- package/lib/client/Footer.js +73 -0
- package/lib/client/Gauge.d.ts +28 -0
- package/lib/client/Gauge.js +139 -0
- package/lib/client/ImageGallery.d.ts +54 -0
- package/lib/client/ImageGallery.js +112 -0
- package/lib/client/ImageGenerateToolview.d.ts +48 -0
- package/lib/client/ImageGenerateToolview.js +130 -0
- package/lib/client/Notice.d.ts +15 -0
- package/lib/client/Notice.js +93 -0
- package/lib/client/ProviderCard.d.ts +35 -0
- package/lib/client/ProviderCard.js +240 -0
- package/lib/client/SpeedSelect.d.ts +72 -0
- package/lib/client/SpeedSelect.js +214 -0
- package/lib/client/Usage.d.ts +7 -0
- package/lib/client/Usage.js +83 -0
- package/lib/client/VideoGenerateToolview.d.ts +42 -0
- package/lib/client/VideoGenerateToolview.js +172 -0
- package/lib/client/context.d.ts +16 -0
- package/lib/client/context.js +11 -0
- package/lib/client/fast-command.d.ts +2 -0
- package/lib/client/fast-command.js +4 -0
- package/lib/client/hooks.d.ts +2 -0
- package/lib/client/hooks.js +10 -0
- package/lib/client/index.d.ts +3 -0
- package/lib/client/index.js +113 -0
- package/lib/client/locales.d.ts +139 -0
- package/lib/client/locales.js +267 -0
- package/lib/client/meter.d.ts +91 -0
- package/lib/client/meter.js +196 -0
- package/lib/client/prefs.d.ts +51 -0
- package/lib/client/prefs.js +71 -0
- package/lib/client/rpc.d.ts +161 -0
- package/lib/client/rpc.js +31 -0
- package/lib/client/store.d.ts +67 -0
- package/lib/client/store.js +129 -0
- package/lib/client/styles.d.ts +7 -0
- package/lib/client/styles.js +176 -0
- package/lib/client.js +3933 -0
- package/lib/client.js.map +1 -0
- package/lib/compat.d.ts +55 -0
- package/lib/compat.js +20 -0
- package/lib/http.d.ts +134 -0
- package/lib/http.js +431 -0
- package/lib/index.d.ts +121 -0
- package/lib/index.js +13399 -0
- package/lib/json-text.d.ts +2 -0
- package/lib/json-text.js +4 -0
- package/lib/model-defaults.d.ts +23 -0
- package/lib/model-defaults.js +238 -0
- package/lib/model-speeds.d.ts +10 -0
- package/lib/model-speeds.js +48 -0
- package/lib/models-directory.d.ts +17 -0
- package/lib/models-directory.js +25 -0
- package/lib/provider-settings.d.ts +55 -0
- package/lib/provider-settings.js +215 -0
- package/lib/providers/account-preferences.d.ts +46 -0
- package/lib/providers/account-preferences.js +188 -0
- package/lib/providers/accounts.d.ts +113 -0
- package/lib/providers/accounts.js +142 -0
- package/lib/providers/antigravity-oauth-client.d.ts +7 -0
- package/lib/providers/antigravity-oauth-client.js +7 -0
- package/lib/providers/antigravity.d.ts +119 -0
- package/lib/providers/antigravity.js +552 -0
- package/lib/providers/catalog-refresh.d.ts +4 -0
- package/lib/providers/catalog-refresh.js +30 -0
- package/lib/providers/catalog-store.d.ts +47 -0
- package/lib/providers/catalog-store.js +283 -0
- package/lib/providers/claude-cli-version.d.ts +15 -0
- package/lib/providers/claude-cli-version.js +24 -0
- package/lib/providers/claude.d.ts +212 -0
- package/lib/providers/claude.js +726 -0
- package/lib/providers/codex-client-version.d.ts +8 -0
- package/lib/providers/codex-client-version.js +17 -0
- package/lib/providers/codex-search.d.ts +29 -0
- package/lib/providers/codex-search.js +198 -0
- package/lib/providers/codex.d.ts +253 -0
- package/lib/providers/codex.js +930 -0
- package/lib/providers/common.d.ts +415 -0
- package/lib/providers/common.js +679 -0
- package/lib/providers/copilot.d.ts +365 -0
- package/lib/providers/copilot.js +956 -0
- package/lib/providers/grok.d.ts +214 -0
- package/lib/providers/grok.js +750 -0
- package/lib/providers/image-pool.d.ts +30 -0
- package/lib/providers/image-pool.js +89 -0
- package/lib/providers/npm-cli-version.d.ts +56 -0
- package/lib/providers/npm-cli-version.js +98 -0
- package/lib/providers/pool-family.d.ts +56 -0
- package/lib/providers/pool-family.js +45 -0
- package/lib/providers/pool-health.d.ts +91 -0
- package/lib/providers/pool-health.js +164 -0
- package/lib/providers/pool-usage.d.ts +106 -0
- package/lib/providers/pool-usage.js +302 -0
- package/lib/providers/pool.d.ts +115 -0
- package/lib/providers/pool.js +461 -0
- package/lib/providers/rate-limit.d.ts +192 -0
- package/lib/providers/rate-limit.js +338 -0
- package/lib/providers/replay.d.ts +4 -0
- package/lib/providers/replay.js +37 -0
- package/lib/providers/reset-redemption.d.ts +20 -0
- package/lib/providers/reset-redemption.js +70 -0
- package/lib/tools/image-generate.d.ts +128 -0
- package/lib/tools/image-generate.js +438 -0
- package/lib/tools/registration.d.ts +16 -0
- package/lib/tools/registration.js +25 -0
- package/lib/tools/usage.d.ts +62 -0
- package/lib/tools/usage.js +89 -0
- package/lib/tools/video-generate.d.ts +89 -0
- package/lib/tools/video-generate.js +257 -0
- package/lib/tools/x-search.d.ts +58 -0
- package/lib/tools/x-search.js +197 -0
- package/lib/translate/anthropic.d.ts +180 -0
- package/lib/translate/anthropic.js +534 -0
- package/lib/translate/antigravity-images.d.ts +11 -0
- package/lib/translate/antigravity-images.js +62 -0
- package/lib/translate/antigravity-schema.d.ts +4 -0
- package/lib/translate/antigravity-schema.js +145 -0
- package/lib/translate/antigravity-thinking.d.ts +5 -0
- package/lib/translate/antigravity-thinking.js +44 -0
- package/lib/translate/antigravity.d.ts +120 -0
- package/lib/translate/antigravity.js +412 -0
- package/lib/translate/chat-completions.d.ts +120 -0
- package/lib/translate/chat-completions.js +382 -0
- package/lib/translate/resolved.d.ts +98 -0
- package/lib/translate/resolved.js +186 -0
- package/lib/translate/responses.d.ts +192 -0
- package/lib/translate/responses.js +443 -0
- package/lib/translate/sse.d.ts +21 -0
- package/lib/translate/sse.js +62 -0
- package/lib/usage/headers.d.ts +21 -0
- package/lib/usage/headers.js +64 -0
- package/lib/usage/pace.d.ts +53 -0
- package/lib/usage/pace.js +48 -0
- package/lib/usage/service.d.ts +64 -0
- package/lib/usage/service.js +104 -0
- package/lib/usage-providers/common.d.ts +23 -0
- package/lib/usage-providers/common.js +28 -0
- package/lib/usage-providers/index.d.ts +42 -0
- package/lib/usage-providers/index.js +71 -0
- package/lib/usage-providers/keys.d.ts +11 -0
- package/lib/usage-providers/keys.js +52 -0
- package/lib/usage-providers/kimi.d.ts +4 -0
- package/lib/usage-providers/kimi.js +52 -0
- package/lib/usage-providers/ollama-cloud.d.ts +4 -0
- package/lib/usage-providers/ollama-cloud.js +42 -0
- package/lib/usage-providers/zai.d.ts +5 -0
- package/lib/usage-providers/zai.js +53 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +115 -4
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/** Model-specific tool schemas for Antigravity's Gemini and custom-tool bridges. */
|
|
2
|
+
import { LlmError } from '@deepseek-ai/dsh-llm';
|
|
3
|
+
const CUSTOM_KEYS = new Set(['type', 'description', 'properties', 'required', 'items', 'enum']);
|
|
4
|
+
function object(value) {
|
|
5
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
/** Resolve local references before removing definitions; reject cycles and remote references. */
|
|
8
|
+
function resolve(value, root, refs = new Set()) {
|
|
9
|
+
if (Array.isArray(value))
|
|
10
|
+
return value.map(item => resolve(item, root, refs));
|
|
11
|
+
if (!object(value))
|
|
12
|
+
return value;
|
|
13
|
+
if (typeof value.$ref === 'string') {
|
|
14
|
+
const ref = value.$ref;
|
|
15
|
+
if (!ref.startsWith('#/') || refs.has(ref)) {
|
|
16
|
+
throw new LlmError(`Antigravity tool schema has an unsupported reference: ${ref}`, 'INVALID_REQUEST');
|
|
17
|
+
}
|
|
18
|
+
let target = root;
|
|
19
|
+
for (const segment of ref.slice(2).split('/')) {
|
|
20
|
+
const key = segment.replaceAll('~1', '/').replaceAll('~0', '~');
|
|
21
|
+
target = object(target) && Object.hasOwn(target, key) ? target[key] : undefined;
|
|
22
|
+
}
|
|
23
|
+
if (!object(target))
|
|
24
|
+
throw new LlmError(`Antigravity tool schema reference is missing: ${ref}`, 'INVALID_REQUEST');
|
|
25
|
+
const { $ref: _ref, ...siblings } = value;
|
|
26
|
+
return resolve({ ...target, ...siblings }, root, new Set([...refs, ref]));
|
|
27
|
+
}
|
|
28
|
+
return Object.fromEntries(Object.entries(value)
|
|
29
|
+
.filter(([key]) => !['$schema', '$id', '$defs', 'definitions'].includes(key))
|
|
30
|
+
.map(([key, item]) => [key, key === 'properties' && object(item)
|
|
31
|
+
? Object.fromEntries(Object.entries(item).map(([name, property]) => [name, resolve(property, root, refs)]))
|
|
32
|
+
: resolve(item, root, refs)]));
|
|
33
|
+
}
|
|
34
|
+
/** Numeric types widen to `number`: every integer is also a number. */
|
|
35
|
+
const NUMERIC = new Set(['integer', 'number']);
|
|
36
|
+
/** The strings one alternative is limited to (`enum` or `const`), or undefined when unconstrained. */
|
|
37
|
+
function stringChoices(schema) {
|
|
38
|
+
if (typeof schema.const === 'string')
|
|
39
|
+
return [schema.const];
|
|
40
|
+
return Array.isArray(schema.enum) && schema.enum.every(entry => typeof entry === 'string') ? schema.enum : undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fold schema alternatives into one shape this bridge can express, never
|
|
44
|
+
* narrower than any alternative: picking one branch would make the tool
|
|
45
|
+
* uncallable with the others' values, which is worse than a looser contract
|
|
46
|
+
* the tool still validates. Objects keep the union of their properties and
|
|
47
|
+
* only the fields every alternative requires; scalars of one type keep that
|
|
48
|
+
* type (and a string choice union); anything heterogeneous is unconstrained.
|
|
49
|
+
*/
|
|
50
|
+
function widen(variants) {
|
|
51
|
+
const members = variants.filter(object);
|
|
52
|
+
if (members.length === 0 || members.length !== variants.length)
|
|
53
|
+
return {};
|
|
54
|
+
const types = new Set(members.map(member => member.type));
|
|
55
|
+
const type = types.size === 1 ? [...types][0]
|
|
56
|
+
: [...types].every(entry => typeof entry === 'string' && NUMERIC.has(entry)) ? 'number' : undefined;
|
|
57
|
+
if (typeof type !== 'string')
|
|
58
|
+
return {};
|
|
59
|
+
if (type === 'object') {
|
|
60
|
+
const properties = {};
|
|
61
|
+
for (const member of members) {
|
|
62
|
+
if (!object(member.properties))
|
|
63
|
+
continue;
|
|
64
|
+
for (const [name, property] of Object.entries(member.properties)) {
|
|
65
|
+
properties[name] = !Object.hasOwn(properties, name) || JSON.stringify(properties[name]) === JSON.stringify(property)
|
|
66
|
+
? property
|
|
67
|
+
: widen([properties[name], property]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const required = members
|
|
71
|
+
.map(member => Array.isArray(member.required) ? member.required.filter(entry => typeof entry === 'string') : [])
|
|
72
|
+
.reduce((shared, next) => shared.filter(name => next.includes(name)));
|
|
73
|
+
return {
|
|
74
|
+
type,
|
|
75
|
+
...Object.keys(properties).length === 0 ? {} : { properties },
|
|
76
|
+
...required.length === 0 ? {} : { required },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (type === 'array') {
|
|
80
|
+
return { type, items: widen(members.map(member => member.items ?? {})) };
|
|
81
|
+
}
|
|
82
|
+
const choices = members.map(stringChoices);
|
|
83
|
+
return choices.every(entry => entry !== undefined)
|
|
84
|
+
? { type, enum: [...new Set(choices.flat())] }
|
|
85
|
+
: { type };
|
|
86
|
+
}
|
|
87
|
+
/** Merge `extra` into `schema`: properties and required accumulate, other keywords override. */
|
|
88
|
+
function absorb(schema, extra) {
|
|
89
|
+
const { properties, required, ...rest } = extra;
|
|
90
|
+
Object.assign(schema, rest);
|
|
91
|
+
if (object(properties))
|
|
92
|
+
schema.properties = { ...object(schema.properties) ? schema.properties : {}, ...properties };
|
|
93
|
+
if (Array.isArray(required)) {
|
|
94
|
+
schema.required = [...new Set([...Array.isArray(schema.required) ? schema.required : [], ...required])];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Keep property names intact while reducing schema keywords for Claude/GPT-OSS. */
|
|
98
|
+
function custom(value) {
|
|
99
|
+
if (!object(value))
|
|
100
|
+
return value;
|
|
101
|
+
const schema = { ...value };
|
|
102
|
+
// An intersection holds every member's constraints at once.
|
|
103
|
+
if (Array.isArray(schema.allOf)) {
|
|
104
|
+
const members = schema.allOf.filter(object);
|
|
105
|
+
delete schema.allOf;
|
|
106
|
+
for (const member of members)
|
|
107
|
+
absorb(schema, member);
|
|
108
|
+
}
|
|
109
|
+
for (const keyword of ['anyOf', 'oneOf']) {
|
|
110
|
+
if (!Array.isArray(schema[keyword]))
|
|
111
|
+
continue;
|
|
112
|
+
const variants = schema[keyword].filter(item => !object(item) || item.type !== 'null');
|
|
113
|
+
delete schema[keyword];
|
|
114
|
+
absorb(schema, variants.length === 1 && object(variants[0]) ? variants[0] : widen(variants));
|
|
115
|
+
}
|
|
116
|
+
const out = {};
|
|
117
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
118
|
+
if (!CUSTOM_KEYS.has(key))
|
|
119
|
+
continue;
|
|
120
|
+
if (key === 'properties' && object(value)) {
|
|
121
|
+
out[key] = Object.fromEntries(Object.entries(value).map(([name, property]) => [name, custom(property)]));
|
|
122
|
+
}
|
|
123
|
+
else if (key === 'items')
|
|
124
|
+
out[key] = custom(value);
|
|
125
|
+
else if (key === 'type' && Array.isArray(value)) {
|
|
126
|
+
const types = value.filter(type => type !== 'null');
|
|
127
|
+
const type = types.length === 1 ? types[0]
|
|
128
|
+
: types.length > 0 && types.every(entry => NUMERIC.has(entry)) ? 'number' : undefined;
|
|
129
|
+
if (type !== undefined)
|
|
130
|
+
out[key] = type;
|
|
131
|
+
}
|
|
132
|
+
else if (key !== 'enum' || Array.isArray(value) && value.every(entry => typeof entry === 'string')) {
|
|
133
|
+
out[key] = value;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
/** Detach and normalize one tool's root object without changing the registry schema. */
|
|
139
|
+
export function antigravityToolParameters(parameters, legacy) {
|
|
140
|
+
const resolved = resolve(parameters, parameters);
|
|
141
|
+
const root = { ...resolved, type: resolved.type ?? 'object' };
|
|
142
|
+
if (root.type !== 'object')
|
|
143
|
+
throw new LlmError('Antigravity tool parameters must be an object schema', 'INVALID_REQUEST');
|
|
144
|
+
return (legacy ? custom(root) : root);
|
|
145
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LlmResolvedModelInfo } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
/** Efforts supported by the known Antigravity runtime families. Unknown models keep upstream defaults. */
|
|
3
|
+
export declare function antigravityReasoning(model: string): LlmResolvedModelInfo['reasoning'];
|
|
4
|
+
/** Build the v1internal thinking config; do not forward arbitrary DSH effort strings. */
|
|
5
|
+
export declare function antigravityThinking(model: string, effort: string | undefined, maxTokens?: number): Record<string, unknown> | undefined;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Cloud Code Assist thinking budgets, matched to the runtime model family. */
|
|
2
|
+
import { LlmError, ReasoningEffortId } from '@deepseek-ai/dsh-llm';
|
|
3
|
+
/** Efforts supported by the known Antigravity runtime families. Unknown models keep upstream defaults. */
|
|
4
|
+
export function antigravityReasoning(model) {
|
|
5
|
+
const ids = model.startsWith('claude-') ? ['high']
|
|
6
|
+
: model.startsWith('gpt-oss-') ? ['medium']
|
|
7
|
+
: model.startsWith('gemini-3.1-pro') || model === 'gemini-pro-agent' ? ['low', 'high']
|
|
8
|
+
: /^gemini-(?:2\.5|3)/.test(model) ? ['low', 'medium', 'high'] : [];
|
|
9
|
+
const fixedEffort = /^gemini-.*-(low|medium|high)$/.exec(model)?.[1];
|
|
10
|
+
const efforts = fixedEffort !== undefined && ids.includes(fixedEffort) ? [fixedEffort] : ids;
|
|
11
|
+
return efforts.length === 0 ? undefined : {
|
|
12
|
+
efforts: efforts.map(id => ({ id: ReasoningEffortId(id), name: id[0].toUpperCase() + id.slice(1) })),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** Build the v1internal thinking config; do not forward arbitrary DSH effort strings. */
|
|
16
|
+
export function antigravityThinking(model, effort, maxTokens) {
|
|
17
|
+
if (effort === undefined)
|
|
18
|
+
return undefined;
|
|
19
|
+
const supported = antigravityReasoning(model);
|
|
20
|
+
if (supported === undefined || effort !== 'off' && !supported.efforts.some(entry => entry.id === effort)) {
|
|
21
|
+
throw new LlmError(`Antigravity model ${model} does not support reasoning effort ${effort}`, 'UNSUPPORTED_REASONING_EFFORT');
|
|
22
|
+
}
|
|
23
|
+
if (effort === 'off')
|
|
24
|
+
return { includeThoughts: false, thinkingBudget: 0 };
|
|
25
|
+
// Reference: pi-antigravity src/models/models.ts at 697858c (v1internal wire).
|
|
26
|
+
let budget;
|
|
27
|
+
if (model.startsWith('claude-'))
|
|
28
|
+
budget = 1024;
|
|
29
|
+
else if (model.startsWith('gpt-oss-'))
|
|
30
|
+
budget = 8192;
|
|
31
|
+
else if (model.startsWith('gemini-3.1-pro') || model === 'gemini-pro-agent') {
|
|
32
|
+
budget = effort === 'high' ? 10001 : 1001;
|
|
33
|
+
}
|
|
34
|
+
else if (model.startsWith('gemini-3.5-flash') || model === 'gemini-3-flash-agent') {
|
|
35
|
+
budget = effort === 'high' ? 10000 : effort === 'medium' ? 4000 : 1000;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
budget = effort === 'high' ? -1 : effort === 'medium' ? 4000 : 1000;
|
|
39
|
+
}
|
|
40
|
+
if (maxTokens !== undefined && budget > 0 && maxTokens <= budget) {
|
|
41
|
+
throw new LlmError(`Antigravity maxTokens must exceed the thinking budget (${budget}) for ${model}/${effort}`, 'INVALID_REQUEST');
|
|
42
|
+
}
|
|
43
|
+
return { includeThoughts: true, thinkingBudget: budget };
|
|
44
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek Harness message/tool vocabulary to Antigravity's Gemini-shaped
|
|
3
|
+
* v1internal request envelope, plus response/SSE translation back to the
|
|
4
|
+
* harness streaming contract.
|
|
5
|
+
*/
|
|
6
|
+
import type { AttachmentStore } from '@deepseek-ai/dsh-attachment';
|
|
7
|
+
import type { GenerateOptions, StreamChunk, TokenUsage, ToolSchema } from '@deepseek-ai/dsh-llm';
|
|
8
|
+
import type { TranslatableMessage } from './resolved.js';
|
|
9
|
+
/** Minimal Gemini part shape used by v1internal. */
|
|
10
|
+
export interface AntigravityPart {
|
|
11
|
+
text?: string;
|
|
12
|
+
thought?: boolean;
|
|
13
|
+
thoughtSignature?: string;
|
|
14
|
+
inlineData?: {
|
|
15
|
+
mimeType: string;
|
|
16
|
+
data: string;
|
|
17
|
+
};
|
|
18
|
+
functionCall?: {
|
|
19
|
+
id?: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
args?: unknown;
|
|
22
|
+
};
|
|
23
|
+
functionResponse?: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
response: Record<string, unknown>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Full Antigravity request envelope. */
|
|
30
|
+
export interface AntigravityRequest {
|
|
31
|
+
project: string;
|
|
32
|
+
requestId: string;
|
|
33
|
+
model: string;
|
|
34
|
+
userAgent: 'antigravity';
|
|
35
|
+
requestType: 'agent';
|
|
36
|
+
request: {
|
|
37
|
+
contents: {
|
|
38
|
+
role: 'user' | 'model';
|
|
39
|
+
parts: AntigravityPart[];
|
|
40
|
+
}[];
|
|
41
|
+
sessionId: string;
|
|
42
|
+
systemInstruction?: {
|
|
43
|
+
parts: {
|
|
44
|
+
text: string;
|
|
45
|
+
}[];
|
|
46
|
+
};
|
|
47
|
+
tools?: {
|
|
48
|
+
functionDeclarations: Record<string, unknown>[];
|
|
49
|
+
}[];
|
|
50
|
+
toolConfig?: {
|
|
51
|
+
functionCallingConfig: {
|
|
52
|
+
mode: 'VALIDATED';
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
generationConfig?: Record<string, unknown>;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Map harness tool schemas to Gemini function declarations. */
|
|
59
|
+
export declare function toAntigravityTools(tools: readonly ToolSchema[], model?: string): {
|
|
60
|
+
functionDeclarations: Record<string, unknown>[];
|
|
61
|
+
}[];
|
|
62
|
+
/**
|
|
63
|
+
* Convert resolved harness messages into Gemini contents. Function response
|
|
64
|
+
* names are recovered from prior tool calls because DSH correlates results by
|
|
65
|
+
* id while the Gemini wire requires both id and name.
|
|
66
|
+
*/
|
|
67
|
+
export declare function toAntigravityContents(messages: readonly TranslatableMessage[], model?: string): {
|
|
68
|
+
role: 'user' | 'model';
|
|
69
|
+
parts: AntigravityPart[];
|
|
70
|
+
}[];
|
|
71
|
+
/**
|
|
72
|
+
* Build one v1internal generateContent/streamGenerateContent request.
|
|
73
|
+
* When forStreaming is true and the model is Claude, caps maxOutputTokens at 64000
|
|
74
|
+
* to avoid INVALID_ARGUMENT errors.
|
|
75
|
+
*/
|
|
76
|
+
export declare function toAntigravityRequest(options: GenerateOptions, messages: readonly TranslatableMessage[], projectId: string, forStreaming?: boolean): AntigravityRequest;
|
|
77
|
+
/** Antigravity SSE/non-stream response subset. */
|
|
78
|
+
export interface AntigravityResponseEvent {
|
|
79
|
+
response?: {
|
|
80
|
+
candidates?: {
|
|
81
|
+
content?: {
|
|
82
|
+
parts?: AntigravityPart[];
|
|
83
|
+
};
|
|
84
|
+
finishReason?: string;
|
|
85
|
+
}[];
|
|
86
|
+
usageMetadata?: {
|
|
87
|
+
promptTokenCount?: number;
|
|
88
|
+
candidatesTokenCount?: number;
|
|
89
|
+
thoughtsTokenCount?: number;
|
|
90
|
+
totalTokenCount?: number;
|
|
91
|
+
cachedContentTokenCount?: number;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** Map Gemini usage metadata to the harness's disjoint counters. */
|
|
96
|
+
export declare function mapAntigravityUsage(metadata: NonNullable<NonNullable<AntigravityResponseEvent['response']>['usageMetadata']>): TokenUsage;
|
|
97
|
+
/** Push translator for both parsed SSE events and one non-stream response. */
|
|
98
|
+
export declare class AntigravityStreamTranslator {
|
|
99
|
+
private blocks;
|
|
100
|
+
private closed;
|
|
101
|
+
private nextIndex;
|
|
102
|
+
private sawContent;
|
|
103
|
+
private sawThoughtImage;
|
|
104
|
+
private sawReasoning;
|
|
105
|
+
private sawToolCall;
|
|
106
|
+
terminated: boolean;
|
|
107
|
+
private usage;
|
|
108
|
+
private readonly images;
|
|
109
|
+
constructor(attachments?: AttachmentStore, signal?: AbortSignal);
|
|
110
|
+
private open;
|
|
111
|
+
private close;
|
|
112
|
+
private closeAll;
|
|
113
|
+
private finish;
|
|
114
|
+
/** Process one decoded Antigravity response frame. */
|
|
115
|
+
push(event: AntigravityResponseEvent): Promise<StreamChunk[]>;
|
|
116
|
+
}
|
|
117
|
+
/** Consume Antigravity's SSE response into the DSH streaming contract. */
|
|
118
|
+
export declare function streamAntigravity(stream: ReadableStream<Uint8Array>, onActivity?: () => void, attachments?: AttachmentStore, signal?: AbortSignal): AsyncGenerator<StreamChunk>;
|
|
119
|
+
/** Translate a non-stream generateContent response using the same state machine. */
|
|
120
|
+
export declare function parseAntigravityResponse(event: AntigravityResponseEvent, attachments?: AttachmentStore, signal?: AbortSignal): Promise<StreamChunk[]>;
|