@anthonyhaussman/opencode-agy-auth 1.1.1 → 1.1.2-0.alpha.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/dist/index.d.ts +4 -18
- package/dist/index.js +2009 -759
- package/dist/index.js.map +1 -1
- package/dist/src/constants.d.ts +7 -0
- package/dist/src/fetch.d.ts +1 -0
- package/dist/src/plugin/auth.d.ts +14 -0
- package/dist/src/plugin/cache.d.ts +28 -0
- package/dist/src/plugin/notify.d.ts +9 -0
- package/dist/src/plugin/oauth-authorize.d.ts +15 -0
- package/dist/src/plugin/pricing.d.ts +5 -0
- package/dist/src/plugin/project/context.d.ts +13 -0
- package/dist/src/plugin/project/index.d.ts +2 -0
- package/dist/src/plugin/project/types.d.ts +84 -0
- package/dist/src/plugin/project/utils.d.ts +35 -0
- package/dist/src/plugin/provider.d.ts +12 -0
- package/dist/src/plugin/quota-summary.d.ts +14 -0
- package/dist/src/plugin/quota-utils.d.ts +5 -0
- package/dist/src/plugin/quota.d.ts +14 -0
- package/dist/src/plugin/token.d.ts +2 -0
- package/dist/src/plugin/traffic.d.ts +47 -0
- package/dist/src/plugin/types.d.ts +31 -0
- package/dist/src/plugin.d.ts +6 -0
- package/dist/src/sdk/activity-request-id.d.ts +5 -0
- package/dist/src/sdk/agy-cli-version.d.ts +1 -0
- package/dist/src/sdk/cache/signature-cache.d.ts +130 -0
- package/dist/src/sdk/chat-logger.d.ts +8 -0
- package/dist/src/sdk/fetch_models.d.ts +47 -0
- package/dist/src/sdk/fetch_project.d.ts +9 -0
- package/dist/src/sdk/fetch_quota.d.ts +9 -0
- package/dist/src/sdk/oauth.d.ts +26 -0
- package/dist/src/sdk/request/identifiers.d.ts +16 -0
- package/dist/src/sdk/request/index.d.ts +12 -0
- package/dist/src/sdk/request/openai.d.ts +17 -0
- package/dist/src/sdk/request/prepare.d.ts +14 -0
- package/dist/src/sdk/request/response.d.ts +5 -0
- package/dist/src/sdk/request/shared.d.ts +20 -0
- package/dist/src/sdk/request/thinking.d.ts +129 -0
- package/dist/src/sdk/request/tool-mapper.d.ts +47 -0
- package/dist/src/sdk/request/turn-state-tracker.d.ts +21 -0
- package/dist/src/sdk/request-helpers/errors.d.ts +9 -0
- package/dist/src/sdk/request-helpers/index.d.ts +4 -0
- package/dist/src/sdk/request-helpers/parsing.d.ts +9 -0
- package/dist/src/sdk/request-helpers/thinking.d.ts +5 -0
- package/dist/src/sdk/request-helpers/types.d.ts +65 -0
- package/dist/src/sdk/retry/cooldown-store.d.ts +14 -0
- package/dist/src/sdk/retry/helpers.d.ts +19 -0
- package/dist/src/sdk/retry/index.d.ts +9 -0
- package/dist/src/sdk/retry/quota.d.ts +37 -0
- package/dist/src/sdk/terminal-hyperlink.d.ts +3 -0
- package/dist/src/sdk/user-agent.d.ts +5 -0
- package/package.json +13 -6
package/dist/index.js
CHANGED
|
@@ -4,6 +4,104 @@ var __export = (target, all) => {
|
|
|
4
4
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
+
// src/plugin/pricing.ts
|
|
8
|
+
import { tmpdir, userInfo } from "os";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync, statSync } from "fs";
|
|
11
|
+
var PRICING_API_URL = "https://models.dev/api.json";
|
|
12
|
+
var CACHE_FILE_NAME = "agy-pricing-cache.json";
|
|
13
|
+
var CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
14
|
+
var memoryCache = null;
|
|
15
|
+
function getCachePath() {
|
|
16
|
+
try {
|
|
17
|
+
return join(tmpdir(), `${CACHE_FILE_NAME}-${userInfo().uid}`);
|
|
18
|
+
} catch (err) {
|
|
19
|
+
return join(tmpdir(), CACHE_FILE_NAME);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function loadCachedPricing() {
|
|
23
|
+
try {
|
|
24
|
+
const cachePath = getCachePath();
|
|
25
|
+
if (!existsSync(cachePath)) return null;
|
|
26
|
+
const stats = statSync(cachePath);
|
|
27
|
+
if (Date.now() - stats.mtimeMs > CACHE_TTL_MS) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const data = readFileSync(cachePath, "utf-8");
|
|
31
|
+
return JSON.parse(data);
|
|
32
|
+
} catch (err) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function savePricingCache(data) {
|
|
37
|
+
try {
|
|
38
|
+
const cachePath = getCachePath();
|
|
39
|
+
writeFileSync(cachePath, JSON.stringify(data), "utf-8");
|
|
40
|
+
} catch (err) {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function fetchPricing() {
|
|
44
|
+
if (memoryCache) {
|
|
45
|
+
return memoryCache;
|
|
46
|
+
}
|
|
47
|
+
const cached2 = loadCachedPricing();
|
|
48
|
+
if (cached2) {
|
|
49
|
+
memoryCache = cached2;
|
|
50
|
+
return cached2;
|
|
51
|
+
}
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeoutId = setTimeout(() => controller.abort(), 2e3);
|
|
54
|
+
try {
|
|
55
|
+
const response = await fetch(PRICING_API_URL, { signal: controller.signal });
|
|
56
|
+
clearTimeout(timeoutId);
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
if (data) {
|
|
62
|
+
savePricingCache(data);
|
|
63
|
+
memoryCache = data;
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
clearTimeout(timeoutId);
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function determineProvider(modelId) {
|
|
72
|
+
const lower = modelId.toLowerCase();
|
|
73
|
+
if (lower.startsWith("gemini-") || lower.startsWith("gemma-")) return "google";
|
|
74
|
+
if (lower.startsWith("claude-")) return "anthropic";
|
|
75
|
+
if (lower.startsWith("gpt-") || lower.startsWith("o1") || lower.startsWith("o3")) return "openai";
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function updateStaticModelsWithPricing(staticModels) {
|
|
79
|
+
fetchPricing().then((pricingData) => {
|
|
80
|
+
if (!pricingData) return;
|
|
81
|
+
for (const [modelId, modelObj] of Object.entries(staticModels)) {
|
|
82
|
+
const provider = determineProvider(modelId);
|
|
83
|
+
if (!provider || !pricingData[provider]?.models) continue;
|
|
84
|
+
let lookupId = modelId;
|
|
85
|
+
if (lookupId.endsWith("-thinking") && !pricingData[provider].models[lookupId]) {
|
|
86
|
+
lookupId = lookupId.replace("-thinking", "");
|
|
87
|
+
}
|
|
88
|
+
const apiModel = pricingData[provider].models[lookupId];
|
|
89
|
+
if (apiModel && apiModel.cost) {
|
|
90
|
+
const apiCost = apiModel.cost;
|
|
91
|
+
modelObj.cost = {
|
|
92
|
+
input: apiCost.input ?? modelObj.cost?.input ?? 0,
|
|
93
|
+
output: apiCost.output ?? modelObj.cost?.output ?? 0,
|
|
94
|
+
cache: {
|
|
95
|
+
read: apiCost.cache_read ?? modelObj.cost?.cache?.read ?? 0,
|
|
96
|
+
write: apiCost.cache_write ?? modelObj.cost?.cache?.write ?? 0
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}).catch(() => {
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
7
105
|
// src/constants.ts
|
|
8
106
|
var AGY_PROVIDER_ID = "google-agy";
|
|
9
107
|
var AGY_CLIENT_ID = "1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com";
|
|
@@ -147,7 +245,7 @@ async function exchangeAgyWithVerifierInternal(code, verifier) {
|
|
|
147
245
|
Authorization: `Bearer ${tokenPayload.access_token}`
|
|
148
246
|
}
|
|
149
247
|
});
|
|
150
|
-
const
|
|
248
|
+
const userInfo2 = userInfoResponse.ok ? await userInfoResponse.json() : {};
|
|
151
249
|
const refreshToken = tokenPayload.refresh_token;
|
|
152
250
|
if (!refreshToken) {
|
|
153
251
|
return { type: "failed", error: "Missing refresh token in response" };
|
|
@@ -157,7 +255,7 @@ async function exchangeAgyWithVerifierInternal(code, verifier) {
|
|
|
157
255
|
refresh: refreshToken,
|
|
158
256
|
access: tokenPayload.access_token,
|
|
159
257
|
expires: Date.now() + tokenPayload.expires_in * 1e3,
|
|
160
|
-
email:
|
|
258
|
+
email: userInfo2.email
|
|
161
259
|
};
|
|
162
260
|
}
|
|
163
261
|
|
|
@@ -170,7 +268,7 @@ function createAgyActivityRequestId() {
|
|
|
170
268
|
import os from "os";
|
|
171
269
|
|
|
172
270
|
// src/sdk/agy-cli-version.ts
|
|
173
|
-
var AGY_CLI_VERSION = "1.1.
|
|
271
|
+
var AGY_CLI_VERSION = "1.1.20";
|
|
174
272
|
|
|
175
273
|
// src/sdk/user-agent.ts
|
|
176
274
|
var cachedUserAgent = null;
|
|
@@ -418,6 +516,69 @@ function normalizeErrorEnvelope(parsed) {
|
|
|
418
516
|
}
|
|
419
517
|
return isObject(parsed) ? parsed : null;
|
|
420
518
|
}
|
|
519
|
+
var MAX_QUOTA_RESET_WAIT_MS = 72e5;
|
|
520
|
+
function findResetTimeForModel(summary, model) {
|
|
521
|
+
if (!summary) return null;
|
|
522
|
+
const normalize2 = (str) => str.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
523
|
+
const modelNorm = model ? normalize2(model) : "";
|
|
524
|
+
let targetGroups = summary.groups ?? [];
|
|
525
|
+
if (modelNorm && targetGroups.length > 0) {
|
|
526
|
+
const matched = targetGroups.filter((g) => {
|
|
527
|
+
const gName = normalize2(g.displayName ?? "");
|
|
528
|
+
return gName.includes(modelNorm) || modelNorm.includes(gName);
|
|
529
|
+
});
|
|
530
|
+
if (matched.length > 0) {
|
|
531
|
+
targetGroups = matched;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
const allBuckets = [];
|
|
535
|
+
for (const group of targetGroups) {
|
|
536
|
+
if (group.buckets) {
|
|
537
|
+
allBuckets.push(...group.buckets);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (allBuckets.length === 0 && summary.buckets) {
|
|
541
|
+
allBuckets.push(...summary.buckets);
|
|
542
|
+
}
|
|
543
|
+
const now = Date.now();
|
|
544
|
+
const validResetBuckets = allBuckets.filter((b) => {
|
|
545
|
+
if (!b.resetTime) return false;
|
|
546
|
+
const t = new Date(b.resetTime).getTime();
|
|
547
|
+
return !Number.isNaN(t) && t > now;
|
|
548
|
+
});
|
|
549
|
+
if (validResetBuckets.length === 0) {
|
|
550
|
+
return null;
|
|
551
|
+
}
|
|
552
|
+
const exhaustedFiveHour = validResetBuckets.find(
|
|
553
|
+
(b) => (b.remainingFraction === 0 || b.disabled) && b.window?.toUpperCase() === "FIVE_HOUR"
|
|
554
|
+
);
|
|
555
|
+
if (exhaustedFiveHour?.resetTime) return exhaustedFiveHour.resetTime;
|
|
556
|
+
const exhaustedAny = validResetBuckets.find((b) => b.remainingFraction === 0 || b.disabled);
|
|
557
|
+
if (exhaustedAny?.resetTime) return exhaustedAny.resetTime;
|
|
558
|
+
const fiveHour = validResetBuckets.find((b) => b.window?.toUpperCase() === "FIVE_HOUR");
|
|
559
|
+
if (fiveHour?.resetTime) return fiveHour.resetTime;
|
|
560
|
+
validResetBuckets.sort(
|
|
561
|
+
(a, b) => new Date(a.resetTime).getTime() - new Date(b.resetTime).getTime()
|
|
562
|
+
);
|
|
563
|
+
return validResetBuckets[0]?.resetTime ?? null;
|
|
564
|
+
}
|
|
565
|
+
async function resolveQuotaResetDelay(accessToken, projectId, model, userAgentModel) {
|
|
566
|
+
try {
|
|
567
|
+
const summary = await retrieveUserQuotaSummary(accessToken, projectId, userAgentModel);
|
|
568
|
+
if (!summary) return null;
|
|
569
|
+
const resetTime = findResetTimeForModel(summary, model);
|
|
570
|
+
if (!resetTime) return null;
|
|
571
|
+
const resetTimestamp = new Date(resetTime).getTime();
|
|
572
|
+
if (Number.isNaN(resetTimestamp)) return null;
|
|
573
|
+
const waitMs = resetTimestamp - Date.now() + 1e3;
|
|
574
|
+
if (waitMs <= 0 || waitMs > MAX_QUOTA_RESET_WAIT_MS) {
|
|
575
|
+
return null;
|
|
576
|
+
}
|
|
577
|
+
return { waitMs, resetTime };
|
|
578
|
+
} catch {
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
421
582
|
|
|
422
583
|
// src/sdk/retry/helpers.ts
|
|
423
584
|
var DEFAULT_MAX_ATTEMPTS = 3;
|
|
@@ -559,29 +720,29 @@ function clampDelay(delayMs) {
|
|
|
559
720
|
}
|
|
560
721
|
|
|
561
722
|
// src/sdk/retry/cooldown-store.ts
|
|
562
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, unlinkSync } from "fs";
|
|
563
|
-
import { join, dirname } from "path";
|
|
564
|
-
import { homedir, tmpdir } from "os";
|
|
723
|
+
import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2, renameSync, unlinkSync } from "fs";
|
|
724
|
+
import { join as join2, dirname } from "path";
|
|
725
|
+
import { homedir, tmpdir as tmpdir2 } from "os";
|
|
565
726
|
var WRITE_THROTTLE_MS = 5e3;
|
|
566
727
|
function getConfigDir() {
|
|
567
728
|
const platform2 = process.platform;
|
|
568
729
|
if (platform2 === "win32") {
|
|
569
|
-
return
|
|
730
|
+
return join2(process.env.APPDATA || join2(homedir(), "AppData", "Roaming"), "opencode");
|
|
570
731
|
}
|
|
571
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME ||
|
|
572
|
-
return
|
|
732
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join2(homedir(), ".config");
|
|
733
|
+
return join2(xdgConfig, "opencode");
|
|
573
734
|
}
|
|
574
735
|
function getCooldownFilePath() {
|
|
575
|
-
return
|
|
736
|
+
return join2(getConfigDir(), "antigravity-retry-cooldowns.json");
|
|
576
737
|
}
|
|
577
738
|
function loadCooldowns() {
|
|
578
739
|
const result = /* @__PURE__ */ new Map();
|
|
579
740
|
try {
|
|
580
741
|
const filePath = getCooldownFilePath();
|
|
581
|
-
if (!
|
|
742
|
+
if (!existsSync2(filePath)) {
|
|
582
743
|
return result;
|
|
583
744
|
}
|
|
584
|
-
const content =
|
|
745
|
+
const content = readFileSync2(filePath, "utf-8");
|
|
585
746
|
const data = JSON.parse(content);
|
|
586
747
|
if (data.version !== "1.0") {
|
|
587
748
|
return result;
|
|
@@ -600,7 +761,7 @@ function saveCooldowns(entries) {
|
|
|
600
761
|
try {
|
|
601
762
|
const filePath = getCooldownFilePath();
|
|
602
763
|
const dir = dirname(filePath);
|
|
603
|
-
if (!
|
|
764
|
+
if (!existsSync2(dir)) {
|
|
604
765
|
mkdirSync(dir, { recursive: true });
|
|
605
766
|
}
|
|
606
767
|
const now = Date.now();
|
|
@@ -615,12 +776,12 @@ function saveCooldowns(entries) {
|
|
|
615
776
|
entries: serializable,
|
|
616
777
|
updatedAt: now
|
|
617
778
|
};
|
|
618
|
-
const tmpPath =
|
|
619
|
-
|
|
779
|
+
const tmpPath = join2(tmpdir2(), `antigravity-cooldowns-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
|
|
780
|
+
writeFileSync2(tmpPath, JSON.stringify(data), "utf-8");
|
|
620
781
|
try {
|
|
621
782
|
renameSync(tmpPath, filePath);
|
|
622
783
|
} catch {
|
|
623
|
-
|
|
784
|
+
writeFileSync2(filePath, readFileSync2(tmpPath));
|
|
624
785
|
try {
|
|
625
786
|
unlinkSync(tmpPath);
|
|
626
787
|
} catch {
|
|
@@ -714,6 +875,7 @@ async function fetchWithRetry(input, init) {
|
|
|
714
875
|
const throttleKey = buildRetryThrottleKey(input, retryInit);
|
|
715
876
|
await waitForRetryCooldown(throttleKey, retryInit.signal);
|
|
716
877
|
let attempt = 1;
|
|
878
|
+
let hasRetriedQuotaReset = false;
|
|
717
879
|
const url2 = readRequestUrl(input);
|
|
718
880
|
while (attempt <= DEFAULT_MAX_ATTEMPTS) {
|
|
719
881
|
let response;
|
|
@@ -739,6 +901,25 @@ async function fetchWithRetry(input, init) {
|
|
|
739
901
|
if (quotaContext.reason === "MODEL_CAPACITY_EXHAUSTED") {
|
|
740
902
|
const cooldownMs = quotaContext.retryDelayMs ?? MODEL_CAPACITY_COOLDOWN_MS;
|
|
741
903
|
setRetryCooldown(throttleKey, cooldownMs);
|
|
904
|
+
return response;
|
|
905
|
+
}
|
|
906
|
+
if (quotaContext.reason === "QUOTA_EXHAUSTED" && !hasRetriedQuotaReset && !retryInit.signal?.aborted) {
|
|
907
|
+
const body = typeof retryInit.body === "string" ? safeParseBody(retryInit.body) : null;
|
|
908
|
+
const project = readString(body?.project);
|
|
909
|
+
const model = readString(body?.model);
|
|
910
|
+
const token = extractAuthToken(retryInit.headers);
|
|
911
|
+
if (token && project) {
|
|
912
|
+
const resetInfo = await resolveQuotaResetDelay(token, project, model);
|
|
913
|
+
if (resetInfo && resetInfo.waitMs > 0 && resetInfo.waitMs <= MAX_QUOTA_RESET_WAIT_MS) {
|
|
914
|
+
hasRetriedQuotaReset = true;
|
|
915
|
+
setRetryCooldown(throttleKey, resetInfo.waitMs);
|
|
916
|
+
await wait(resetInfo.waitMs);
|
|
917
|
+
if (retryInit.signal?.aborted) {
|
|
918
|
+
return response;
|
|
919
|
+
}
|
|
920
|
+
continue;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
742
923
|
}
|
|
743
924
|
return response;
|
|
744
925
|
}
|
|
@@ -824,6 +1005,14 @@ function safeParseBody(body) {
|
|
|
824
1005
|
function readString(value) {
|
|
825
1006
|
return typeof value === "string" && value.trim() ? value : void 0;
|
|
826
1007
|
}
|
|
1008
|
+
function extractAuthToken(headers) {
|
|
1009
|
+
if (!headers) return void 0;
|
|
1010
|
+
const h = new Headers(headers);
|
|
1011
|
+
const auth = h.get("authorization") || h.get("Authorization");
|
|
1012
|
+
if (!auth) return void 0;
|
|
1013
|
+
const match = auth.match(/^Bearer\s+(.+)$/i);
|
|
1014
|
+
return match?.[1]?.trim() || auth.trim();
|
|
1015
|
+
}
|
|
827
1016
|
|
|
828
1017
|
// src/sdk/terminal-hyperlink.ts
|
|
829
1018
|
var OSC8_OPEN = "\x1B]8;;";
|
|
@@ -1390,7 +1579,7 @@ function createOAuthAuthorizeMethod(options) {
|
|
|
1390
1579
|
}
|
|
1391
1580
|
return {
|
|
1392
1581
|
url: authorization.url,
|
|
1393
|
-
instructions: "Please complete Google account authorization in your browser. After authorization, the page will redirect to https://antigravity.google/oauth-callback?code=... . Please copy the full redirect URL from your browser address bar, or just the code parameter value, and paste it into the input box below:",
|
|
1582
|
+
instructions: isHeadless ? "Headless/SSH environment detected. Browser auto-open skipped. Please manually open the following URL in a browser on your local machine to authorize:\n\n" + authorization.url + "\n\nAfter authorization, the page will redirect to https://antigravity.google/oauth-callback?code=... . Copy the full redirect URL from your browser address bar, or just the code parameter value, and paste it into the input box below.\n\nNote: If you are not in a headless environment, unset OPENCODE_HEADLESS or run without SSH to enable browser auto-open." : "Please complete Google account authorization in your browser. After authorization, the page will redirect to https://antigravity.google/oauth-callback?code=... . Please copy the full redirect URL from your browser address bar, or just the code parameter value, and paste it into the input box below:",
|
|
1394
1583
|
method: "code",
|
|
1395
1584
|
callback: async (callbackUrl) => {
|
|
1396
1585
|
try {
|
|
@@ -1458,33 +1647,33 @@ function openBrowserUrl(url2) {
|
|
|
1458
1647
|
import { createHash } from "crypto";
|
|
1459
1648
|
|
|
1460
1649
|
// src/sdk/cache/signature-cache.ts
|
|
1461
|
-
import { existsSync as
|
|
1462
|
-
import { join as
|
|
1463
|
-
import { homedir as homedir2, tmpdir as
|
|
1650
|
+
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync as readFileSync3, writeFileSync as writeFileSync3, renameSync as renameSync2, unlinkSync as unlinkSync2, appendFileSync } from "fs";
|
|
1651
|
+
import { join as join3, dirname as dirname2 } from "path";
|
|
1652
|
+
import { homedir as homedir2, tmpdir as tmpdir3 } from "os";
|
|
1464
1653
|
function getConfigDir2() {
|
|
1465
1654
|
const platform2 = process.platform;
|
|
1466
1655
|
if (platform2 === "win32") {
|
|
1467
|
-
return
|
|
1656
|
+
return join3(process.env.APPDATA || join3(homedir2(), "AppData", "Roaming"), "opencode");
|
|
1468
1657
|
}
|
|
1469
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME ||
|
|
1470
|
-
return
|
|
1658
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join3(homedir2(), ".config");
|
|
1659
|
+
return join3(xdgConfig, "opencode");
|
|
1471
1660
|
}
|
|
1472
1661
|
function getCacheFilePath() {
|
|
1473
|
-
return
|
|
1662
|
+
return join3(getConfigDir2(), "antigravity-signature-cache.json");
|
|
1474
1663
|
}
|
|
1475
1664
|
function ensureGitignoreSync(configDir) {
|
|
1476
|
-
const gitignorePath =
|
|
1665
|
+
const gitignorePath = join3(configDir, ".gitignore");
|
|
1477
1666
|
const entries = [".gitignore", "antigravity-signature-cache.json"];
|
|
1478
1667
|
try {
|
|
1479
1668
|
let content = "";
|
|
1480
|
-
if (
|
|
1481
|
-
content =
|
|
1669
|
+
if (existsSync3(gitignorePath)) {
|
|
1670
|
+
content = readFileSync3(gitignorePath, "utf-8");
|
|
1482
1671
|
}
|
|
1483
1672
|
const existingLines = content.split("\n").map((line) => line.trim());
|
|
1484
1673
|
const missing = entries.filter((e) => !existingLines.includes(e));
|
|
1485
1674
|
if (missing.length === 0) return;
|
|
1486
1675
|
if (content === "") {
|
|
1487
|
-
|
|
1676
|
+
writeFileSync3(gitignorePath, missing.join("\n") + "\n", "utf-8");
|
|
1488
1677
|
} else {
|
|
1489
1678
|
const suffix = content.endsWith("\n") ? "" : "\n";
|
|
1490
1679
|
appendFileSync(gitignorePath, suffix + missing.join("\n") + "\n", "utf-8");
|
|
@@ -1660,10 +1849,10 @@ var SignatureCache = class {
|
|
|
1660
1849
|
*/
|
|
1661
1850
|
loadFromDisk() {
|
|
1662
1851
|
try {
|
|
1663
|
-
if (!
|
|
1852
|
+
if (!existsSync3(this.cacheFilePath)) {
|
|
1664
1853
|
return;
|
|
1665
1854
|
}
|
|
1666
|
-
const content =
|
|
1855
|
+
const content = readFileSync3(this.cacheFilePath, "utf-8");
|
|
1667
1856
|
const data = JSON.parse(content);
|
|
1668
1857
|
if (data.version !== "1.0") {
|
|
1669
1858
|
return;
|
|
@@ -1691,15 +1880,15 @@ var SignatureCache = class {
|
|
|
1691
1880
|
saveToDisk() {
|
|
1692
1881
|
try {
|
|
1693
1882
|
const dir = dirname2(this.cacheFilePath);
|
|
1694
|
-
if (!
|
|
1883
|
+
if (!existsSync3(dir)) {
|
|
1695
1884
|
mkdirSync2(dir, { recursive: true });
|
|
1696
1885
|
}
|
|
1697
1886
|
ensureGitignoreSync(dir);
|
|
1698
1887
|
const now = Date.now();
|
|
1699
1888
|
let existingEntries = {};
|
|
1700
|
-
if (
|
|
1889
|
+
if (existsSync3(this.cacheFilePath)) {
|
|
1701
1890
|
try {
|
|
1702
|
-
const content =
|
|
1891
|
+
const content = readFileSync3(this.cacheFilePath, "utf-8");
|
|
1703
1892
|
const data = JSON.parse(content);
|
|
1704
1893
|
existingEntries = data.entries || {};
|
|
1705
1894
|
} catch {
|
|
@@ -1735,12 +1924,12 @@ var SignatureCache = class {
|
|
|
1735
1924
|
last_write: now
|
|
1736
1925
|
}
|
|
1737
1926
|
};
|
|
1738
|
-
const tmpPath =
|
|
1739
|
-
|
|
1927
|
+
const tmpPath = join3(tmpdir3(), `antigravity-cache-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
|
|
1928
|
+
writeFileSync3(tmpPath, JSON.stringify(cacheData, null, 2), "utf-8");
|
|
1740
1929
|
try {
|
|
1741
1930
|
renameSync2(tmpPath, this.cacheFilePath);
|
|
1742
1931
|
} catch {
|
|
1743
|
-
|
|
1932
|
+
writeFileSync3(this.cacheFilePath, readFileSync3(tmpPath));
|
|
1744
1933
|
try {
|
|
1745
1934
|
unlinkSync2(tmpPath);
|
|
1746
1935
|
} catch {
|
|
@@ -1894,9 +2083,9 @@ function getLatestSignature(sessionId) {
|
|
|
1894
2083
|
}
|
|
1895
2084
|
|
|
1896
2085
|
// src/sdk/request/turn-state-tracker.ts
|
|
1897
|
-
import { existsSync as
|
|
1898
|
-
import { join as
|
|
1899
|
-
import { homedir as homedir3, tmpdir as
|
|
2086
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync4, renameSync as renameSync3, unlinkSync as unlinkSync3 } from "fs";
|
|
2087
|
+
import { join as join4, dirname as dirname3 } from "path";
|
|
2088
|
+
import { homedir as homedir3, tmpdir as tmpdir4 } from "os";
|
|
1900
2089
|
|
|
1901
2090
|
// src/sdk/request/thinking.ts
|
|
1902
2091
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -2319,22 +2508,22 @@ var WRITE_THROTTLE_MS2 = 5e3;
|
|
|
2319
2508
|
function getConfigDir3() {
|
|
2320
2509
|
const platform2 = process.platform;
|
|
2321
2510
|
if (platform2 === "win32") {
|
|
2322
|
-
return
|
|
2511
|
+
return join4(process.env.APPDATA || join4(homedir3(), "AppData", "Roaming"), "opencode");
|
|
2323
2512
|
}
|
|
2324
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME ||
|
|
2325
|
-
return
|
|
2513
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join4(homedir3(), ".config");
|
|
2514
|
+
return join4(xdgConfig, "opencode");
|
|
2326
2515
|
}
|
|
2327
2516
|
function getTurnStateFilePath() {
|
|
2328
|
-
return
|
|
2517
|
+
return join4(getConfigDir3(), "antigravity-turn-states.json");
|
|
2329
2518
|
}
|
|
2330
2519
|
function loadTurnStatesFromDisk() {
|
|
2331
2520
|
const result = /* @__PURE__ */ new Map();
|
|
2332
2521
|
try {
|
|
2333
2522
|
const filePath = getTurnStateFilePath();
|
|
2334
|
-
if (!
|
|
2523
|
+
if (!existsSync4(filePath)) {
|
|
2335
2524
|
return result;
|
|
2336
2525
|
}
|
|
2337
|
-
const content =
|
|
2526
|
+
const content = readFileSync4(filePath, "utf-8");
|
|
2338
2527
|
const data = JSON.parse(content);
|
|
2339
2528
|
if (data.version !== "1.0") {
|
|
2340
2529
|
return result;
|
|
@@ -2354,7 +2543,7 @@ function saveTurnStatesToDisk(entries) {
|
|
|
2354
2543
|
try {
|
|
2355
2544
|
const filePath = getTurnStateFilePath();
|
|
2356
2545
|
const dir = dirname3(filePath);
|
|
2357
|
-
if (!
|
|
2546
|
+
if (!existsSync4(dir)) {
|
|
2358
2547
|
mkdirSync3(dir, { recursive: true });
|
|
2359
2548
|
}
|
|
2360
2549
|
const now = Date.now();
|
|
@@ -2370,12 +2559,12 @@ function saveTurnStatesToDisk(entries) {
|
|
|
2370
2559
|
entries: serializable,
|
|
2371
2560
|
updatedAt: now
|
|
2372
2561
|
};
|
|
2373
|
-
const tmpPath =
|
|
2374
|
-
|
|
2562
|
+
const tmpPath = join4(tmpdir4(), `antigravity-turn-states-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
|
|
2563
|
+
writeFileSync4(tmpPath, JSON.stringify(data), "utf-8");
|
|
2375
2564
|
try {
|
|
2376
2565
|
renameSync3(tmpPath, filePath);
|
|
2377
2566
|
} catch {
|
|
2378
|
-
|
|
2567
|
+
writeFileSync4(filePath, readFileSync4(tmpPath));
|
|
2379
2568
|
try {
|
|
2380
2569
|
unlinkSync3(tmpPath);
|
|
2381
2570
|
} catch {
|
|
@@ -15811,717 +16000,1504 @@ import { randomUUID as randomUUID3 } from "crypto";
|
|
|
15811
16000
|
|
|
15812
16001
|
// models.json
|
|
15813
16002
|
var models_default = {
|
|
16003
|
+
agentModelSorts: [
|
|
16004
|
+
{
|
|
16005
|
+
displayName: "Recommended",
|
|
16006
|
+
groups: [
|
|
16007
|
+
{
|
|
16008
|
+
modelIds: [
|
|
16009
|
+
"gemini-3.7-flash-high",
|
|
16010
|
+
"gemini-3.7-flash-medium",
|
|
16011
|
+
"gemini-3.7-flash-low",
|
|
16012
|
+
"gemini-3.6-flash-high",
|
|
16013
|
+
"gemini-3.6-flash-medium",
|
|
16014
|
+
"gemini-3.6-flash-low",
|
|
16015
|
+
"gemini-3-flash-agent",
|
|
16016
|
+
"gemini-3.5-flash-low",
|
|
16017
|
+
"gemini-3.5-flash-extra-low",
|
|
16018
|
+
"gemini-pro-agent",
|
|
16019
|
+
"gemini-3.1-pro-low",
|
|
16020
|
+
"claude-sonnet-4-6",
|
|
16021
|
+
"claude-opus-4-6-thinking",
|
|
16022
|
+
"gpt-oss-120b-medium"
|
|
16023
|
+
]
|
|
16024
|
+
}
|
|
16025
|
+
]
|
|
16026
|
+
}
|
|
16027
|
+
],
|
|
16028
|
+
audioTranscriptionModelIds: [
|
|
16029
|
+
"models/proactive-observer-v10"
|
|
16030
|
+
],
|
|
16031
|
+
commandModelIds: [
|
|
16032
|
+
"gemini-3-flash"
|
|
16033
|
+
],
|
|
16034
|
+
commitMessageModelIds: [
|
|
16035
|
+
"gemini-3.1-flash-lite"
|
|
16036
|
+
],
|
|
16037
|
+
defaultAgentModelId: "gemini-3.7-flash-high",
|
|
16038
|
+
deprecatedModelIds: {
|
|
16039
|
+
"gemini-3.1-pro-high": {
|
|
16040
|
+
newModelEnum: "MODEL_PLACEHOLDER_M16",
|
|
16041
|
+
newModelId: "gemini-pro-agent",
|
|
16042
|
+
oldModelEnum: "MODEL_PLACEHOLDER_M37"
|
|
16043
|
+
}
|
|
16044
|
+
},
|
|
16045
|
+
experimentIds: [
|
|
16046
|
+
106581054,
|
|
16047
|
+
105979552,
|
|
16048
|
+
105979574,
|
|
16049
|
+
106015333,
|
|
16050
|
+
106568772,
|
|
16051
|
+
105867471,
|
|
16052
|
+
106548982,
|
|
16053
|
+
106123599,
|
|
16054
|
+
106121401,
|
|
16055
|
+
106100625,
|
|
16056
|
+
106143956,
|
|
16057
|
+
105879567,
|
|
16058
|
+
105856899,
|
|
16059
|
+
106312323,
|
|
16060
|
+
106064030,
|
|
16061
|
+
106567313,
|
|
16062
|
+
106396310,
|
|
16063
|
+
106470335,
|
|
16064
|
+
106106760,
|
|
16065
|
+
106021688,
|
|
16066
|
+
105887299,
|
|
16067
|
+
106428370,
|
|
16068
|
+
106283618,
|
|
16069
|
+
106278607,
|
|
16070
|
+
106538964,
|
|
16071
|
+
106512082,
|
|
16072
|
+
106380926,
|
|
16073
|
+
106281951,
|
|
16074
|
+
106264532,
|
|
16075
|
+
106044947,
|
|
16076
|
+
106032303,
|
|
16077
|
+
106228452,
|
|
16078
|
+
106121607,
|
|
16079
|
+
105979531,
|
|
16080
|
+
105979553,
|
|
16081
|
+
106015328,
|
|
16082
|
+
106568390,
|
|
16083
|
+
105867469,
|
|
16084
|
+
106123597,
|
|
16085
|
+
106121399,
|
|
16086
|
+
106100654,
|
|
16087
|
+
106064028,
|
|
16088
|
+
106567309,
|
|
16089
|
+
106396304,
|
|
16090
|
+
106470331,
|
|
16091
|
+
105906495,
|
|
16092
|
+
106283614,
|
|
16093
|
+
106038164,
|
|
16094
|
+
106032301,
|
|
16095
|
+
106121604
|
|
16096
|
+
],
|
|
16097
|
+
imageGenerationModelIds: [
|
|
16098
|
+
"gemini-3.1-flash-image"
|
|
16099
|
+
],
|
|
15814
16100
|
models: {
|
|
15815
|
-
|
|
16101
|
+
chat_20706: {
|
|
16102
|
+
addCursorToFindReplaceTarget: true,
|
|
16103
|
+
apiProvider: "API_PROVIDER_INTERNAL",
|
|
16104
|
+
isInternal: true,
|
|
15816
16105
|
maxTokens: 16384,
|
|
15817
|
-
|
|
15818
|
-
|
|
16106
|
+
model: "MODEL_CHAT_20706",
|
|
16107
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16108
|
+
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
15819
16109
|
quotaInfo: {
|
|
15820
16110
|
remainingFraction: 1
|
|
15821
16111
|
},
|
|
15822
|
-
|
|
15823
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
15824
|
-
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16112
|
+
requiresLeadInGeneration: true,
|
|
15825
16113
|
supportsCumulativeContext: true,
|
|
15826
|
-
tabJumpPrintLineRange: true,
|
|
15827
16114
|
supportsEstimateTokenCounter: true,
|
|
15828
|
-
|
|
15829
|
-
toolFormatterType: "TOOL_FORMATTER_TYPE_XML"
|
|
15830
|
-
requiresLeadInGeneration: true,
|
|
15831
|
-
requiresNoXmlToolExamples: true
|
|
16115
|
+
tabJumpPrintLineRange: true,
|
|
16116
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML"
|
|
15832
16117
|
},
|
|
15833
|
-
|
|
15834
|
-
|
|
15835
|
-
|
|
15836
|
-
|
|
15837
|
-
|
|
15838
|
-
minThinkingBudget: 128,
|
|
15839
|
-
recommended: true,
|
|
15840
|
-
maxTokens: 1048576,
|
|
15841
|
-
maxOutputTokens: 65535,
|
|
15842
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
15843
|
-
quotaInfo: {
|
|
15844
|
-
remainingFraction: 1,
|
|
15845
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
15846
|
-
},
|
|
15847
|
-
model: "MODEL_PLACEHOLDER_M37",
|
|
15848
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16118
|
+
chat_23310: {
|
|
16119
|
+
apiProvider: "API_PROVIDER_INTERNAL",
|
|
16120
|
+
isInternal: true,
|
|
16121
|
+
maxTokens: 32768,
|
|
16122
|
+
model: "MODEL_CHAT_23310",
|
|
15849
16123
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
15850
|
-
|
|
15851
|
-
tagTitle: "New",
|
|
15852
|
-
supportedMimeTypes: {
|
|
15853
|
-
"audio/webm;codecs=opus": true,
|
|
15854
|
-
"application/x-python-code": true,
|
|
15855
|
-
"text/xml": true,
|
|
15856
|
-
"text/x-python": true,
|
|
15857
|
-
"text/html": true,
|
|
15858
|
-
"application/x-ipynb+json": true,
|
|
15859
|
-
"video/text/timestamp": true,
|
|
15860
|
-
"text/markdown": true,
|
|
15861
|
-
"text/x-python-script": true,
|
|
15862
|
-
"video/jpeg2000": true,
|
|
15863
|
-
"image/jpeg": true,
|
|
15864
|
-
"image/png": true,
|
|
15865
|
-
"image/heic": true,
|
|
15866
|
-
"text/plain": true,
|
|
15867
|
-
"application/x-javascript": true,
|
|
15868
|
-
"application/json": true,
|
|
15869
|
-
"application/pdf": true,
|
|
15870
|
-
"text/javascript": true,
|
|
15871
|
-
"image/webp": true,
|
|
15872
|
-
"application/x-typescript": true,
|
|
15873
|
-
"text/x-typescript": true,
|
|
15874
|
-
"text/rtf": true,
|
|
15875
|
-
"video/webm": true,
|
|
15876
|
-
"video/audio/wav": true,
|
|
15877
|
-
"video/audio/s16le": true,
|
|
15878
|
-
"text/csv": true,
|
|
15879
|
-
"video/mp4": true,
|
|
15880
|
-
"video/videoframe/jpeg2000": true,
|
|
15881
|
-
"image/heif": true,
|
|
15882
|
-
"text/css": true,
|
|
15883
|
-
"application/rtf": true
|
|
15884
|
-
},
|
|
15885
|
-
modelExperiments: {
|
|
15886
|
-
experiments: {
|
|
15887
|
-
"cascade-include-ephemeral-message": {
|
|
15888
|
-
stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
15889
|
-
},
|
|
15890
|
-
template__system_prompts__communication_style: {
|
|
15891
|
-
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
|
|
15892
|
-
},
|
|
15893
|
-
template__system_prompts__identity: {
|
|
15894
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
15895
|
-
},
|
|
15896
|
-
template__system_prompts__planning_more_artifacts: {
|
|
15897
|
-
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
15898
|
-
},
|
|
15899
|
-
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
15900
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
15901
|
-
}
|
|
15902
|
-
}
|
|
15903
|
-
}
|
|
15904
|
-
},
|
|
15905
|
-
"gemini-2.5-flash": {
|
|
15906
|
-
displayName: "Gemini 3.1 Flash Lite",
|
|
15907
|
-
maxTokens: 1048576,
|
|
15908
|
-
maxOutputTokens: 65535,
|
|
15909
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16124
|
+
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
15910
16125
|
quotaInfo: {
|
|
15911
|
-
remainingFraction: 1
|
|
15912
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16126
|
+
remainingFraction: 1
|
|
15913
16127
|
},
|
|
15914
|
-
|
|
15915
|
-
|
|
15916
|
-
|
|
15917
|
-
|
|
15918
|
-
experiments: {
|
|
15919
|
-
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
15920
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
15921
|
-
}
|
|
15922
|
-
}
|
|
15923
|
-
}
|
|
16128
|
+
requiresLeadInGeneration: true,
|
|
16129
|
+
supportsCumulativeContext: true,
|
|
16130
|
+
supportsEstimateTokenCounter: true,
|
|
16131
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML"
|
|
15924
16132
|
},
|
|
15925
16133
|
"claude-opus-4-6-thinking": {
|
|
16134
|
+
apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
|
|
15926
16135
|
displayName: "Claude Opus 4.6 (Thinking)",
|
|
15927
|
-
supportsImages: true,
|
|
15928
|
-
supportsThinking: true,
|
|
15929
|
-
thinkingBudget: 1024,
|
|
15930
|
-
recommended: true,
|
|
15931
|
-
maxTokens: 25e4,
|
|
15932
16136
|
maxOutputTokens: 64e3,
|
|
15933
|
-
|
|
15934
|
-
quotaInfo: {
|
|
15935
|
-
remainingFraction: 0.6,
|
|
15936
|
-
resetTime: "2026-05-29T19:43:59Z"
|
|
15937
|
-
},
|
|
16137
|
+
maxTokens: 25e4,
|
|
15938
16138
|
model: "MODEL_PLACEHOLDER_M26",
|
|
15939
|
-
apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
|
|
15940
|
-
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
15941
|
-
supportedMimeTypes: {
|
|
15942
|
-
"image/webp": true,
|
|
15943
|
-
"video/jpeg2000": true,
|
|
15944
|
-
"video/videoframe/jpeg2000": true,
|
|
15945
|
-
"image/heic": true,
|
|
15946
|
-
"image/heif": true,
|
|
15947
|
-
"image/jpeg": true,
|
|
15948
|
-
"image/png": true
|
|
15949
|
-
},
|
|
15950
16139
|
modelExperiments: {
|
|
15951
16140
|
experiments: {
|
|
15952
16141
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
15953
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "160000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
16142
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "160000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
15954
16143
|
},
|
|
15955
|
-
|
|
16144
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
15956
16145
|
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
15957
16146
|
}
|
|
15958
16147
|
}
|
|
15959
16148
|
},
|
|
15960
|
-
|
|
15961
|
-
},
|
|
15962
|
-
"gemini-2.5-flash-thinking": {
|
|
15963
|
-
displayName: "Gemini 3.1 Flash Lite",
|
|
15964
|
-
maxTokens: 1048576,
|
|
15965
|
-
maxOutputTokens: 65535,
|
|
15966
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16149
|
+
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
15967
16150
|
quotaInfo: {
|
|
15968
16151
|
remainingFraction: 1,
|
|
15969
|
-
resetTime: "2026-
|
|
16152
|
+
resetTime: "2026-08-25T09:18:20Z"
|
|
15970
16153
|
},
|
|
15971
|
-
|
|
15972
|
-
|
|
15973
|
-
|
|
16154
|
+
recommended: true,
|
|
16155
|
+
supportedMimeTypes: {
|
|
16156
|
+
"image/heic": true,
|
|
16157
|
+
"image/heif": true,
|
|
16158
|
+
"image/jpeg": true,
|
|
16159
|
+
"image/png": true,
|
|
16160
|
+
"image/webp": true,
|
|
16161
|
+
"video/jpeg2000": true,
|
|
16162
|
+
"video/videoframe/jpeg2000": true
|
|
16163
|
+
},
|
|
16164
|
+
supportsImages: true,
|
|
16165
|
+
supportsThinking: true,
|
|
16166
|
+
thinkingBudget: 1024,
|
|
16167
|
+
vertexModelId: "claude-opus-4-6@default"
|
|
16168
|
+
},
|
|
16169
|
+
"claude-sonnet-4-6": {
|
|
16170
|
+
apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
|
|
16171
|
+
displayName: "Claude Sonnet 4.6 (Thinking)",
|
|
16172
|
+
maxOutputTokens: 64e3,
|
|
16173
|
+
maxTokens: 25e4,
|
|
16174
|
+
model: "MODEL_PLACEHOLDER_M35",
|
|
15974
16175
|
modelExperiments: {
|
|
15975
16176
|
experiments: {
|
|
15976
16177
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
15977
|
-
stringValue: '{\n "strategy": "
|
|
16178
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "160000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16179
|
+
},
|
|
16180
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16181
|
+
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
15978
16182
|
}
|
|
15979
16183
|
}
|
|
15980
|
-
}
|
|
15981
|
-
|
|
15982
|
-
"gemini-2.5-pro": {
|
|
15983
|
-
displayName: "Gemini 2.5 Pro",
|
|
15984
|
-
supportsImages: true,
|
|
15985
|
-
supportsThinking: true,
|
|
15986
|
-
thinkingBudget: 1024,
|
|
15987
|
-
minThinkingBudget: 128,
|
|
15988
|
-
recommended: true,
|
|
15989
|
-
maxTokens: 1048576,
|
|
15990
|
-
maxOutputTokens: 65535,
|
|
15991
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16184
|
+
},
|
|
16185
|
+
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
15992
16186
|
quotaInfo: {
|
|
15993
16187
|
remainingFraction: 1,
|
|
15994
|
-
resetTime: "2026-
|
|
16188
|
+
resetTime: "2026-08-25T09:18:20Z"
|
|
15995
16189
|
},
|
|
15996
|
-
|
|
15997
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
15998
|
-
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16190
|
+
recommended: true,
|
|
15999
16191
|
supportedMimeTypes: {
|
|
16000
|
-
"video/audio/wav": true,
|
|
16001
16192
|
"image/heic": true,
|
|
16002
|
-
"text/html": true,
|
|
16003
|
-
"application/x-python-code": true,
|
|
16004
16193
|
"image/heif": true,
|
|
16005
|
-
"
|
|
16194
|
+
"image/jpeg": true,
|
|
16195
|
+
"image/png": true,
|
|
16006
16196
|
"image/webp": true,
|
|
16007
16197
|
"video/jpeg2000": true,
|
|
16008
|
-
"
|
|
16009
|
-
"text/csv": true,
|
|
16010
|
-
"image/jpeg": true,
|
|
16011
|
-
"text/markdown": true,
|
|
16012
|
-
"text/css": true,
|
|
16013
|
-
"audio/webm;codecs=opus": true,
|
|
16014
|
-
"application/json": true,
|
|
16015
|
-
"text/x-python-script": true,
|
|
16016
|
-
"video/audio/s16le": true,
|
|
16017
|
-
"text/javascript": true,
|
|
16018
|
-
"text/x-typescript": true,
|
|
16019
|
-
"text/plain": true,
|
|
16020
|
-
"application/x-typescript": true,
|
|
16021
|
-
"application/x-ipynb+json": true,
|
|
16022
|
-
"text/rtf": true,
|
|
16023
|
-
"video/text/timestamp": true,
|
|
16024
|
-
"video/webm": true,
|
|
16025
|
-
"text/x-python": true,
|
|
16026
|
-
"video/videoframe/jpeg2000": true,
|
|
16027
|
-
"application/x-javascript": true,
|
|
16028
|
-
"application/rtf": true,
|
|
16029
|
-
"video/mp4": true,
|
|
16030
|
-
"image/png": true
|
|
16198
|
+
"video/videoframe/jpeg2000": true
|
|
16031
16199
|
},
|
|
16032
|
-
|
|
16200
|
+
supportsImages: true,
|
|
16201
|
+
supportsThinking: true,
|
|
16202
|
+
thinkingBudget: 1024,
|
|
16203
|
+
vertexModelId: "claude-sonnet-4-6@default"
|
|
16204
|
+
},
|
|
16205
|
+
"gemini-2.5-flash": {
|
|
16206
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16207
|
+
displayName: "Gemini 3.1 Flash Lite",
|
|
16208
|
+
maxOutputTokens: 65535,
|
|
16209
|
+
maxTokens: 1048576,
|
|
16210
|
+
model: "MODEL_GOOGLE_GEMINI_2_5_FLASH",
|
|
16033
16211
|
modelExperiments: {
|
|
16034
16212
|
experiments: {
|
|
16035
16213
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16036
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
16214
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16037
16215
|
}
|
|
16038
16216
|
}
|
|
16217
|
+
},
|
|
16218
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16219
|
+
quotaInfo: {
|
|
16220
|
+
remainingFraction: 0.9598632,
|
|
16221
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16039
16222
|
}
|
|
16040
16223
|
},
|
|
16041
|
-
"gemini-
|
|
16042
|
-
displayName: "Gemini 3.1 Flash Image",
|
|
16043
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16044
|
-
quotaInfo: {
|
|
16045
|
-
remainingFraction: 1,
|
|
16046
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16047
|
-
},
|
|
16048
|
-
model: "MODEL_PLACEHOLDER_M21",
|
|
16224
|
+
"gemini-2.5-flash-lite": {
|
|
16049
16225
|
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16050
|
-
|
|
16051
|
-
},
|
|
16052
|
-
"gemini-pro-agent": {
|
|
16053
|
-
displayName: "Gemini 3.1 Pro (High)",
|
|
16054
|
-
supportsImages: true,
|
|
16055
|
-
supportsThinking: true,
|
|
16056
|
-
thinkingBudget: 10001,
|
|
16057
|
-
minThinkingBudget: 128,
|
|
16058
|
-
recommended: true,
|
|
16059
|
-
maxTokens: 1048576,
|
|
16226
|
+
displayName: "Gemini 3.1 Flash Lite",
|
|
16060
16227
|
maxOutputTokens: 65535,
|
|
16061
|
-
|
|
16228
|
+
maxTokens: 1048576,
|
|
16229
|
+
model: "MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE",
|
|
16230
|
+
modelExperiments: {
|
|
16231
|
+
experiments: {
|
|
16232
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16233
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16234
|
+
}
|
|
16235
|
+
}
|
|
16236
|
+
},
|
|
16237
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16062
16238
|
quotaInfo: {
|
|
16063
|
-
remainingFraction:
|
|
16064
|
-
resetTime: "2026-
|
|
16239
|
+
remainingFraction: 0.9598632,
|
|
16240
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16241
|
+
}
|
|
16242
|
+
},
|
|
16243
|
+
"gemini-2.5-flash-thinking": {
|
|
16244
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16245
|
+
displayName: "Gemini 3.1 Flash Lite",
|
|
16246
|
+
maxOutputTokens: 65535,
|
|
16247
|
+
maxTokens: 1048576,
|
|
16248
|
+
model: "MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING",
|
|
16249
|
+
modelExperiments: {
|
|
16250
|
+
experiments: {
|
|
16251
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16252
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16253
|
+
}
|
|
16254
|
+
}
|
|
16065
16255
|
},
|
|
16066
|
-
|
|
16256
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16257
|
+
quotaInfo: {
|
|
16258
|
+
remainingFraction: 0.9598632,
|
|
16259
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16260
|
+
}
|
|
16261
|
+
},
|
|
16262
|
+
"gemini-2.5-pro": {
|
|
16067
16263
|
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16264
|
+
displayName: "Gemini 2.5 Pro",
|
|
16265
|
+
maxOutputTokens: 65535,
|
|
16266
|
+
maxTokens: 1048576,
|
|
16267
|
+
minThinkingBudget: 128,
|
|
16268
|
+
model: "MODEL_GOOGLE_GEMINI_2_5_PRO",
|
|
16269
|
+
modelExperiments: {
|
|
16270
|
+
experiments: {
|
|
16271
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16272
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16273
|
+
}
|
|
16274
|
+
}
|
|
16275
|
+
},
|
|
16068
16276
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16069
|
-
|
|
16277
|
+
quotaInfo: {
|
|
16278
|
+
remainingFraction: 0.9598632,
|
|
16279
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16280
|
+
},
|
|
16281
|
+
recommended: true,
|
|
16282
|
+
requiresImageOutputOutsideFunctionResponses: true,
|
|
16070
16283
|
supportedMimeTypes: {
|
|
16071
|
-
"
|
|
16284
|
+
"application/json": true,
|
|
16285
|
+
"application/pdf": true,
|
|
16286
|
+
"application/rtf": true,
|
|
16287
|
+
"application/x-ipynb+json": true,
|
|
16288
|
+
"application/x-javascript": true,
|
|
16289
|
+
"application/x-python-code": true,
|
|
16290
|
+
"application/x-typescript": true,
|
|
16291
|
+
"audio/aac": true,
|
|
16292
|
+
"audio/flac": true,
|
|
16293
|
+
"audio/l16": true,
|
|
16294
|
+
"audio/m4a": true,
|
|
16295
|
+
"audio/mp3": true,
|
|
16296
|
+
"audio/mp4": true,
|
|
16297
|
+
"audio/mpeg": true,
|
|
16298
|
+
"audio/ogg": true,
|
|
16299
|
+
"audio/opus": true,
|
|
16300
|
+
"audio/vnd.wave": true,
|
|
16301
|
+
"audio/wav": true,
|
|
16302
|
+
"audio/wave": true,
|
|
16303
|
+
"audio/webm": true,
|
|
16304
|
+
"audio/webm;codecs=opus": true,
|
|
16305
|
+
"audio/x-wav": true,
|
|
16072
16306
|
"image/heic": true,
|
|
16073
|
-
"
|
|
16074
|
-
"
|
|
16307
|
+
"image/heif": true,
|
|
16308
|
+
"image/jpeg": true,
|
|
16309
|
+
"image/png": true,
|
|
16310
|
+
"image/webp": true,
|
|
16075
16311
|
"text/css": true,
|
|
16076
|
-
"text/
|
|
16312
|
+
"text/csv": true,
|
|
16313
|
+
"text/html": true,
|
|
16077
16314
|
"text/javascript": true,
|
|
16078
|
-
"audio/webm;codecs=opus": true,
|
|
16079
|
-
"application/x-typescript": true,
|
|
16080
|
-
"video/jpeg2000": true,
|
|
16081
|
-
"video/videoframe/jpeg2000": true,
|
|
16082
|
-
"application/rtf": true,
|
|
16083
|
-
"text/xml": true,
|
|
16084
|
-
"video/text/timestamp": true,
|
|
16085
|
-
"application/x-python-code": true,
|
|
16086
16315
|
"text/markdown": true,
|
|
16316
|
+
"text/plain": true,
|
|
16317
|
+
"text/rtf": true,
|
|
16087
16318
|
"text/x-python": true,
|
|
16088
|
-
"image/webp": true,
|
|
16089
|
-
"application/x-javascript": true,
|
|
16090
16319
|
"text/x-python-script": true,
|
|
16091
|
-
"application/json": true,
|
|
16092
|
-
"text/html": true,
|
|
16093
|
-
"video/webm": true,
|
|
16094
|
-
"video/audio/s16le": true,
|
|
16095
|
-
"application/x-ipynb+json": true,
|
|
16096
|
-
"image/jpeg": true,
|
|
16097
16320
|
"text/x-typescript": true,
|
|
16098
|
-
"text/
|
|
16321
|
+
"text/xml": true,
|
|
16322
|
+
"video/audio/s16le": true,
|
|
16099
16323
|
"video/audio/wav": true,
|
|
16100
|
-
"
|
|
16101
|
-
"
|
|
16324
|
+
"video/jpeg2000": true,
|
|
16325
|
+
"video/mp4": true,
|
|
16326
|
+
"video/text/timestamp": true,
|
|
16327
|
+
"video/videoframe/jpeg2000": true,
|
|
16328
|
+
"video/webm": true
|
|
16102
16329
|
},
|
|
16330
|
+
supportsImages: true,
|
|
16331
|
+
supportsThinking: true,
|
|
16332
|
+
thinkingBudget: 1024
|
|
16333
|
+
},
|
|
16334
|
+
"gemini-3-flash": {
|
|
16335
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16336
|
+
displayName: "Gemini 3 Flash",
|
|
16337
|
+
maxOutputTokens: 65536,
|
|
16338
|
+
maxTokens: 1048576,
|
|
16339
|
+
minThinkingBudget: 32,
|
|
16340
|
+
model: "MODEL_PLACEHOLDER_M18",
|
|
16103
16341
|
modelExperiments: {
|
|
16104
16342
|
experiments: {
|
|
16105
|
-
template__system_prompts__communication_style: {
|
|
16106
|
-
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
|
|
16107
|
-
},
|
|
16108
|
-
template__system_prompts__identity: {
|
|
16109
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
16110
|
-
},
|
|
16111
|
-
template__system_prompts__planning_more_artifacts: {
|
|
16112
|
-
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16113
|
-
},
|
|
16114
16343
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16115
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
16344
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16116
16345
|
},
|
|
16117
|
-
|
|
16118
|
-
stringValue: '
|
|
16346
|
+
template__system_prompts__communication_style: {
|
|
16347
|
+
stringValue: '- Keep your responses concise.\n- Provide a summary of your work when you end your turn. Ground your response in the work you did. Keep your tone professional and avoid overconfident language, bragging, or overclaiming success.\n- AVOID using superlatives such as "perfectly", "flawlessly", "100% correct", "Summary of Accomplishments" etc. to summarize your work for the user. Be humble.\n- AVOID over-the-top politeness or complimenting the user excessively.\n- Format your responses in github-style markdown.'
|
|
16119
16348
|
}
|
|
16120
16349
|
}
|
|
16121
|
-
}
|
|
16122
|
-
},
|
|
16123
|
-
"gemini-3.5-flash-extra-low": {
|
|
16124
|
-
displayName: "Gemini 3.5 Flash (Low)",
|
|
16125
|
-
supportsImages: true,
|
|
16126
|
-
supportsThinking: true,
|
|
16127
|
-
thinkingBudget: 1e3,
|
|
16128
|
-
minThinkingBudget: 32,
|
|
16129
|
-
recommended: true,
|
|
16130
|
-
maxTokens: 1048576,
|
|
16131
|
-
maxOutputTokens: 65536,
|
|
16132
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16133
|
-
quotaInfo: {
|
|
16134
|
-
remainingFraction: 1,
|
|
16135
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16136
16350
|
},
|
|
16137
|
-
model: "MODEL_PLACEHOLDER_M187",
|
|
16138
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16139
16351
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16140
|
-
|
|
16141
|
-
|
|
16142
|
-
|
|
16352
|
+
quotaInfo: {
|
|
16353
|
+
remainingFraction: 0.9598632,
|
|
16354
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16355
|
+
},
|
|
16356
|
+
recommended: true,
|
|
16143
16357
|
supportedMimeTypes: {
|
|
16144
|
-
"
|
|
16145
|
-
"
|
|
16146
|
-
"
|
|
16358
|
+
"application/json": true,
|
|
16359
|
+
"application/pdf": true,
|
|
16360
|
+
"application/rtf": true,
|
|
16361
|
+
"application/x-ipynb+json": true,
|
|
16362
|
+
"application/x-javascript": true,
|
|
16363
|
+
"application/x-python-code": true,
|
|
16147
16364
|
"application/x-typescript": true,
|
|
16148
|
-
"
|
|
16149
|
-
"
|
|
16150
|
-
"
|
|
16151
|
-
"
|
|
16152
|
-
"
|
|
16153
|
-
"
|
|
16154
|
-
"
|
|
16365
|
+
"audio/aac": true,
|
|
16366
|
+
"audio/flac": true,
|
|
16367
|
+
"audio/l16": true,
|
|
16368
|
+
"audio/m4a": true,
|
|
16369
|
+
"audio/mp3": true,
|
|
16370
|
+
"audio/mp4": true,
|
|
16371
|
+
"audio/mpeg": true,
|
|
16372
|
+
"audio/ogg": true,
|
|
16373
|
+
"audio/opus": true,
|
|
16374
|
+
"audio/vnd.wave": true,
|
|
16375
|
+
"audio/wav": true,
|
|
16376
|
+
"audio/wave": true,
|
|
16377
|
+
"audio/webm": true,
|
|
16155
16378
|
"audio/webm;codecs=opus": true,
|
|
16156
|
-
"
|
|
16157
|
-
"
|
|
16379
|
+
"audio/x-wav": true,
|
|
16380
|
+
"image/heic": true,
|
|
16381
|
+
"image/heif": true,
|
|
16382
|
+
"image/jpeg": true,
|
|
16383
|
+
"image/png": true,
|
|
16158
16384
|
"image/webp": true,
|
|
16159
|
-
"application/x-javascript": true,
|
|
16160
|
-
"text/markdown": true,
|
|
16161
|
-
"application/x-ipynb+json": true,
|
|
16162
|
-
"video/audio/wav": true,
|
|
16163
|
-
"text/javascript": true,
|
|
16164
|
-
"application/rtf": true,
|
|
16165
|
-
"video/webm": true,
|
|
16166
16385
|
"text/css": true,
|
|
16386
|
+
"text/csv": true,
|
|
16167
16387
|
"text/html": true,
|
|
16168
|
-
"text/
|
|
16169
|
-
"text/
|
|
16170
|
-
"application/x-python-code": true,
|
|
16171
|
-
"application/json": true,
|
|
16172
|
-
"image/heic": true,
|
|
16388
|
+
"text/javascript": true,
|
|
16389
|
+
"text/markdown": true,
|
|
16173
16390
|
"text/plain": true,
|
|
16174
|
-
"
|
|
16391
|
+
"text/rtf": true,
|
|
16392
|
+
"text/x-python": true,
|
|
16393
|
+
"text/x-python-script": true,
|
|
16394
|
+
"text/x-typescript": true,
|
|
16395
|
+
"text/xml": true,
|
|
16396
|
+
"video/audio/s16le": true,
|
|
16397
|
+
"video/audio/wav": true,
|
|
16398
|
+
"video/jpeg2000": true,
|
|
16399
|
+
"video/mp4": true,
|
|
16400
|
+
"video/text/timestamp": true,
|
|
16401
|
+
"video/videoframe/jpeg2000": true,
|
|
16402
|
+
"video/webm": true
|
|
16175
16403
|
},
|
|
16404
|
+
supportsImages: true,
|
|
16405
|
+
supportsThinking: true,
|
|
16406
|
+
supportsVideo: true,
|
|
16407
|
+
thinkingBudget: -1
|
|
16408
|
+
},
|
|
16409
|
+
"gemini-3-flash-agent": {
|
|
16410
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16411
|
+
displayName: "Gemini 3.5 Flash (High)",
|
|
16412
|
+
maxOutputTokens: 65536,
|
|
16413
|
+
maxTokens: 1048576,
|
|
16414
|
+
minThinkingBudget: 32,
|
|
16415
|
+
model: "MODEL_PLACEHOLDER_M84",
|
|
16176
16416
|
modelExperiments: {
|
|
16177
16417
|
experiments: {
|
|
16178
16418
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16179
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "
|
|
16180
|
-
},
|
|
16181
|
-
template__system_prompts__identity: {
|
|
16182
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
16419
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16183
16420
|
},
|
|
16184
|
-
|
|
16421
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16185
16422
|
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16186
16423
|
}
|
|
16187
16424
|
}
|
|
16188
|
-
}
|
|
16189
|
-
},
|
|
16190
|
-
"gemini-3-flash-agent": {
|
|
16191
|
-
displayName: "Gemini 3.5 Flash (High)",
|
|
16192
|
-
supportsImages: true,
|
|
16193
|
-
supportsThinking: true,
|
|
16194
|
-
thinkingBudget: 1e4,
|
|
16195
|
-
minThinkingBudget: 32,
|
|
16196
|
-
recommended: true,
|
|
16197
|
-
maxTokens: 1048576,
|
|
16198
|
-
maxOutputTokens: 65536,
|
|
16199
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16200
|
-
quotaInfo: {
|
|
16201
|
-
remainingFraction: 1,
|
|
16202
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16203
16425
|
},
|
|
16204
|
-
model: "MODEL_PLACEHOLDER_M132",
|
|
16205
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16206
16426
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16207
|
-
|
|
16208
|
-
|
|
16209
|
-
|
|
16427
|
+
quotaInfo: {
|
|
16428
|
+
remainingFraction: 0.9598632,
|
|
16429
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16430
|
+
},
|
|
16431
|
+
recommended: true,
|
|
16210
16432
|
supportedMimeTypes: {
|
|
16211
16433
|
"application/json": true,
|
|
16212
|
-
"text/html": true,
|
|
16213
|
-
"text/markdown": true,
|
|
16214
|
-
"image/webp": true,
|
|
16215
|
-
"video/text/timestamp": true,
|
|
16216
16434
|
"application/pdf": true,
|
|
16217
|
-
"text/javascript": true,
|
|
16218
16435
|
"application/rtf": true,
|
|
16219
|
-
"video/jpeg2000": true,
|
|
16220
|
-
"video/videoframe/jpeg2000": true,
|
|
16221
|
-
"text/csv": true,
|
|
16222
|
-
"text/x-python-script": true,
|
|
16223
|
-
"text/rtf": true,
|
|
16224
|
-
"image/png": true,
|
|
16225
|
-
"audio/webm;codecs=opus": true,
|
|
16226
16436
|
"application/x-ipynb+json": true,
|
|
16227
|
-
"video/audio/wav": true,
|
|
16228
|
-
"video/audio/s16le": true,
|
|
16229
|
-
"video/webm": true,
|
|
16230
|
-
"text/x-python": true,
|
|
16231
|
-
"image/heif": true,
|
|
16232
|
-
"text/plain": true,
|
|
16233
|
-
"video/mp4": true,
|
|
16234
16437
|
"application/x-javascript": true,
|
|
16235
|
-
"image/heic": true,
|
|
16236
|
-
"text/x-typescript": true,
|
|
16237
16438
|
"application/x-python-code": true,
|
|
16238
|
-
"
|
|
16439
|
+
"application/x-typescript": true,
|
|
16440
|
+
"audio/aac": true,
|
|
16441
|
+
"audio/flac": true,
|
|
16442
|
+
"audio/l16": true,
|
|
16443
|
+
"audio/m4a": true,
|
|
16444
|
+
"audio/mp3": true,
|
|
16445
|
+
"audio/mp4": true,
|
|
16446
|
+
"audio/mpeg": true,
|
|
16447
|
+
"audio/ogg": true,
|
|
16448
|
+
"audio/opus": true,
|
|
16449
|
+
"audio/vnd.wave": true,
|
|
16450
|
+
"audio/wav": true,
|
|
16451
|
+
"audio/wave": true,
|
|
16452
|
+
"audio/webm": true,
|
|
16453
|
+
"audio/webm;codecs=opus": true,
|
|
16454
|
+
"audio/x-wav": true,
|
|
16455
|
+
"image/heic": true,
|
|
16456
|
+
"image/heif": true,
|
|
16239
16457
|
"image/jpeg": true,
|
|
16458
|
+
"image/png": true,
|
|
16459
|
+
"image/webp": true,
|
|
16460
|
+
"text/css": true,
|
|
16461
|
+
"text/csv": true,
|
|
16462
|
+
"text/html": true,
|
|
16463
|
+
"text/javascript": true,
|
|
16464
|
+
"text/markdown": true,
|
|
16465
|
+
"text/plain": true,
|
|
16466
|
+
"text/rtf": true,
|
|
16467
|
+
"text/x-python": true,
|
|
16468
|
+
"text/x-python-script": true,
|
|
16469
|
+
"text/x-typescript": true,
|
|
16240
16470
|
"text/xml": true,
|
|
16241
|
-
"
|
|
16471
|
+
"video/audio/s16le": true,
|
|
16472
|
+
"video/audio/wav": true,
|
|
16473
|
+
"video/jpeg2000": true,
|
|
16474
|
+
"video/mp4": true,
|
|
16475
|
+
"video/text/timestamp": true,
|
|
16476
|
+
"video/videoframe/jpeg2000": true,
|
|
16477
|
+
"video/webm": true
|
|
16242
16478
|
},
|
|
16479
|
+
supportsImages: true,
|
|
16480
|
+
supportsThinking: true,
|
|
16481
|
+
supportsVideo: true,
|
|
16482
|
+
tagDescription: "Limited time",
|
|
16483
|
+
tagTitle: "Fast",
|
|
16484
|
+
thinkingBudget: -1
|
|
16485
|
+
},
|
|
16486
|
+
"gemini-3.1-flash-image": {
|
|
16487
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16488
|
+
displayName: "Gemini 3.1 Flash Image",
|
|
16489
|
+
model: "MODEL_PLACEHOLDER_M21",
|
|
16490
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16491
|
+
quotaInfo: {
|
|
16492
|
+
remainingFraction: 0.9598632,
|
|
16493
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16494
|
+
}
|
|
16495
|
+
},
|
|
16496
|
+
"gemini-3.1-flash-lite": {
|
|
16497
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16498
|
+
displayName: "Gemini 3.1 Flash Lite",
|
|
16499
|
+
maxOutputTokens: 65535,
|
|
16500
|
+
maxTokens: 1048576,
|
|
16501
|
+
model: "MODEL_PLACEHOLDER_M50",
|
|
16243
16502
|
modelExperiments: {
|
|
16244
16503
|
experiments: {
|
|
16245
16504
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16246
|
-
stringValue: '{\n "strategy": "
|
|
16247
|
-
},
|
|
16248
|
-
template__system_prompts__identity: {
|
|
16249
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
16250
|
-
},
|
|
16251
|
-
template__system_prompts__planning_more_artifacts: {
|
|
16252
|
-
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16505
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16253
16506
|
}
|
|
16254
16507
|
}
|
|
16255
|
-
}
|
|
16256
|
-
},
|
|
16257
|
-
chat_23310: {
|
|
16258
|
-
maxTokens: 32768,
|
|
16259
|
-
tokenizerType: "QWEN2",
|
|
16260
|
-
quotaInfo: {
|
|
16261
|
-
remainingFraction: 1
|
|
16262
16508
|
},
|
|
16263
|
-
|
|
16264
|
-
apiProvider: "API_PROVIDER_INTERNAL",
|
|
16265
|
-
supportsCumulativeContext: true,
|
|
16266
|
-
supportsEstimateTokenCounter: true,
|
|
16267
|
-
isInternal: true,
|
|
16268
|
-
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
16269
|
-
toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
|
|
16270
|
-
requiresLeadInGeneration: true
|
|
16271
|
-
},
|
|
16272
|
-
chat_20706: {
|
|
16273
|
-
maxTokens: 16384,
|
|
16274
|
-
tokenizerType: "QWEN2",
|
|
16509
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16275
16510
|
quotaInfo: {
|
|
16276
|
-
remainingFraction:
|
|
16277
|
-
|
|
16278
|
-
|
|
16279
|
-
apiProvider: "API_PROVIDER_INTERNAL",
|
|
16280
|
-
supportsCumulativeContext: true,
|
|
16281
|
-
tabJumpPrintLineRange: true,
|
|
16282
|
-
supportsEstimateTokenCounter: true,
|
|
16283
|
-
isInternal: true,
|
|
16284
|
-
addCursorToFindReplaceTarget: true,
|
|
16285
|
-
promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
|
|
16286
|
-
toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
|
|
16287
|
-
requiresLeadInGeneration: true
|
|
16511
|
+
remainingFraction: 0.9598632,
|
|
16512
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16513
|
+
}
|
|
16288
16514
|
},
|
|
16289
|
-
"
|
|
16290
|
-
|
|
16291
|
-
|
|
16292
|
-
|
|
16293
|
-
|
|
16294
|
-
|
|
16295
|
-
|
|
16296
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16297
|
-
quotaInfo: {
|
|
16298
|
-
remainingFraction: 0.6,
|
|
16299
|
-
resetTime: "2026-05-29T19:43:59Z"
|
|
16300
|
-
},
|
|
16301
|
-
model: "MODEL_OPENAI_GPT_OSS_120B_MEDIUM",
|
|
16302
|
-
apiProvider: "API_PROVIDER_OPENAI_VERTEX",
|
|
16303
|
-
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
16515
|
+
"gemini-3.1-pro-high": {
|
|
16516
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16517
|
+
displayName: "Gemini 3.1 Pro (High)",
|
|
16518
|
+
maxOutputTokens: 65535,
|
|
16519
|
+
maxTokens: 1048576,
|
|
16520
|
+
minThinkingBudget: 128,
|
|
16521
|
+
model: "MODEL_PLACEHOLDER_M37",
|
|
16304
16522
|
modelExperiments: {
|
|
16305
16523
|
experiments: {
|
|
16306
16524
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16307
|
-
stringValue: '{\n "strategy": "
|
|
16525
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16526
|
+
},
|
|
16527
|
+
"cascade-include-ephemeral-message": {
|
|
16528
|
+
stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
16529
|
+
},
|
|
16530
|
+
template__system_prompts__communication_style: {
|
|
16531
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
|
|
16532
|
+
},
|
|
16533
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16534
|
+
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16308
16535
|
}
|
|
16309
16536
|
}
|
|
16310
16537
|
},
|
|
16311
|
-
vertexModelId: "openai/gpt-oss-120b-maas"
|
|
16312
|
-
},
|
|
16313
|
-
tab_flash_lite_preview: {
|
|
16314
|
-
maxTokens: 16384,
|
|
16315
|
-
maxOutputTokens: 4096,
|
|
16316
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16317
|
-
quotaInfo: {
|
|
16318
|
-
remainingFraction: 1
|
|
16319
|
-
},
|
|
16320
|
-
model: "MODEL_PLACEHOLDER_M19",
|
|
16321
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16322
16538
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16323
|
-
supportsCumulativeContext: true,
|
|
16324
|
-
supportsEstimateTokenCounter: true,
|
|
16325
|
-
toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
|
|
16326
|
-
requiresLeadInGeneration: true
|
|
16327
|
-
},
|
|
16328
|
-
"gemini-2.5-flash-lite": {
|
|
16329
|
-
displayName: "Gemini 3.1 Flash Lite",
|
|
16330
|
-
maxTokens: 1048576,
|
|
16331
|
-
maxOutputTokens: 65535,
|
|
16332
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16333
16539
|
quotaInfo: {
|
|
16334
|
-
remainingFraction:
|
|
16335
|
-
resetTime: "2026-
|
|
16540
|
+
remainingFraction: 0.9598632,
|
|
16541
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16336
16542
|
},
|
|
16337
|
-
|
|
16543
|
+
recommended: true,
|
|
16544
|
+
supportedMimeTypes: {
|
|
16545
|
+
"application/json": true,
|
|
16546
|
+
"application/pdf": true,
|
|
16547
|
+
"application/rtf": true,
|
|
16548
|
+
"application/x-ipynb+json": true,
|
|
16549
|
+
"application/x-javascript": true,
|
|
16550
|
+
"application/x-python-code": true,
|
|
16551
|
+
"application/x-typescript": true,
|
|
16552
|
+
"audio/aac": true,
|
|
16553
|
+
"audio/flac": true,
|
|
16554
|
+
"audio/l16": true,
|
|
16555
|
+
"audio/m4a": true,
|
|
16556
|
+
"audio/mp3": true,
|
|
16557
|
+
"audio/mp4": true,
|
|
16558
|
+
"audio/mpeg": true,
|
|
16559
|
+
"audio/ogg": true,
|
|
16560
|
+
"audio/opus": true,
|
|
16561
|
+
"audio/vnd.wave": true,
|
|
16562
|
+
"audio/wav": true,
|
|
16563
|
+
"audio/wave": true,
|
|
16564
|
+
"audio/webm": true,
|
|
16565
|
+
"audio/webm;codecs=opus": true,
|
|
16566
|
+
"audio/x-wav": true,
|
|
16567
|
+
"image/heic": true,
|
|
16568
|
+
"image/heif": true,
|
|
16569
|
+
"image/jpeg": true,
|
|
16570
|
+
"image/png": true,
|
|
16571
|
+
"image/webp": true,
|
|
16572
|
+
"text/css": true,
|
|
16573
|
+
"text/csv": true,
|
|
16574
|
+
"text/html": true,
|
|
16575
|
+
"text/javascript": true,
|
|
16576
|
+
"text/markdown": true,
|
|
16577
|
+
"text/plain": true,
|
|
16578
|
+
"text/rtf": true,
|
|
16579
|
+
"text/x-python": true,
|
|
16580
|
+
"text/x-python-script": true,
|
|
16581
|
+
"text/x-typescript": true,
|
|
16582
|
+
"text/xml": true,
|
|
16583
|
+
"video/audio/s16le": true,
|
|
16584
|
+
"video/audio/wav": true,
|
|
16585
|
+
"video/jpeg2000": true,
|
|
16586
|
+
"video/mp4": true,
|
|
16587
|
+
"video/text/timestamp": true,
|
|
16588
|
+
"video/videoframe/jpeg2000": true,
|
|
16589
|
+
"video/webm": true
|
|
16590
|
+
},
|
|
16591
|
+
supportsImages: true,
|
|
16592
|
+
supportsThinking: true,
|
|
16593
|
+
supportsVideo: true,
|
|
16594
|
+
tagTitle: "New",
|
|
16595
|
+
thinkingBudget: 10001
|
|
16596
|
+
},
|
|
16597
|
+
"gemini-3.1-pro-low": {
|
|
16338
16598
|
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16339
|
-
|
|
16599
|
+
displayName: "Gemini 3.1 Pro (Low)",
|
|
16600
|
+
maxOutputTokens: 65535,
|
|
16601
|
+
maxTokens: 1048576,
|
|
16602
|
+
minThinkingBudget: 128,
|
|
16603
|
+
model: "MODEL_PLACEHOLDER_M36",
|
|
16340
16604
|
modelExperiments: {
|
|
16341
16605
|
experiments: {
|
|
16342
16606
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16343
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
16607
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16608
|
+
},
|
|
16609
|
+
"cascade-include-ephemeral-message": {
|
|
16610
|
+
stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
16611
|
+
},
|
|
16612
|
+
template__system_prompts__communication_style: {
|
|
16613
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
|
|
16614
|
+
},
|
|
16615
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16616
|
+
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16344
16617
|
}
|
|
16345
16618
|
}
|
|
16346
|
-
}
|
|
16347
|
-
|
|
16348
|
-
"gemini-3.1-flash-lite": {
|
|
16349
|
-
displayName: "Gemini 3.1 Flash Lite",
|
|
16350
|
-
maxTokens: 1048576,
|
|
16351
|
-
maxOutputTokens: 65535,
|
|
16352
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16619
|
+
},
|
|
16620
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16353
16621
|
quotaInfo: {
|
|
16354
|
-
remainingFraction:
|
|
16355
|
-
resetTime: "2026-
|
|
16622
|
+
remainingFraction: 0.9598632,
|
|
16623
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16356
16624
|
},
|
|
16357
|
-
|
|
16625
|
+
recommended: true,
|
|
16626
|
+
supportedMimeTypes: {
|
|
16627
|
+
"application/json": true,
|
|
16628
|
+
"application/pdf": true,
|
|
16629
|
+
"application/rtf": true,
|
|
16630
|
+
"application/x-ipynb+json": true,
|
|
16631
|
+
"application/x-javascript": true,
|
|
16632
|
+
"application/x-python-code": true,
|
|
16633
|
+
"application/x-typescript": true,
|
|
16634
|
+
"audio/aac": true,
|
|
16635
|
+
"audio/flac": true,
|
|
16636
|
+
"audio/l16": true,
|
|
16637
|
+
"audio/m4a": true,
|
|
16638
|
+
"audio/mp3": true,
|
|
16639
|
+
"audio/mp4": true,
|
|
16640
|
+
"audio/mpeg": true,
|
|
16641
|
+
"audio/ogg": true,
|
|
16642
|
+
"audio/opus": true,
|
|
16643
|
+
"audio/vnd.wave": true,
|
|
16644
|
+
"audio/wav": true,
|
|
16645
|
+
"audio/wave": true,
|
|
16646
|
+
"audio/webm": true,
|
|
16647
|
+
"audio/webm;codecs=opus": true,
|
|
16648
|
+
"audio/x-wav": true,
|
|
16649
|
+
"image/heic": true,
|
|
16650
|
+
"image/heif": true,
|
|
16651
|
+
"image/jpeg": true,
|
|
16652
|
+
"image/png": true,
|
|
16653
|
+
"image/webp": true,
|
|
16654
|
+
"text/css": true,
|
|
16655
|
+
"text/csv": true,
|
|
16656
|
+
"text/html": true,
|
|
16657
|
+
"text/javascript": true,
|
|
16658
|
+
"text/markdown": true,
|
|
16659
|
+
"text/plain": true,
|
|
16660
|
+
"text/rtf": true,
|
|
16661
|
+
"text/x-python": true,
|
|
16662
|
+
"text/x-python-script": true,
|
|
16663
|
+
"text/x-typescript": true,
|
|
16664
|
+
"text/xml": true,
|
|
16665
|
+
"video/audio/s16le": true,
|
|
16666
|
+
"video/audio/wav": true,
|
|
16667
|
+
"video/jpeg2000": true,
|
|
16668
|
+
"video/mp4": true,
|
|
16669
|
+
"video/text/timestamp": true,
|
|
16670
|
+
"video/videoframe/jpeg2000": true,
|
|
16671
|
+
"video/webm": true
|
|
16672
|
+
},
|
|
16673
|
+
supportsImages: true,
|
|
16674
|
+
supportsThinking: true,
|
|
16675
|
+
supportsVideo: true,
|
|
16676
|
+
thinkingBudget: 1001
|
|
16677
|
+
},
|
|
16678
|
+
"gemini-3.5-flash-extra-low": {
|
|
16679
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16680
|
+
displayName: "Gemini 3.5 Flash (Low)",
|
|
16681
|
+
maxOutputTokens: 65536,
|
|
16682
|
+
maxTokens: 1048576,
|
|
16683
|
+
minThinkingBudget: 32,
|
|
16684
|
+
model: "MODEL_PLACEHOLDER_M187",
|
|
16685
|
+
modelExperiments: {
|
|
16686
|
+
experiments: {
|
|
16687
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16688
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16689
|
+
},
|
|
16690
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16691
|
+
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16692
|
+
}
|
|
16693
|
+
}
|
|
16694
|
+
},
|
|
16695
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16696
|
+
quotaInfo: {
|
|
16697
|
+
remainingFraction: 0.9598632,
|
|
16698
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16699
|
+
},
|
|
16700
|
+
recommended: true,
|
|
16701
|
+
supportedMimeTypes: {
|
|
16702
|
+
"application/json": true,
|
|
16703
|
+
"application/pdf": true,
|
|
16704
|
+
"application/rtf": true,
|
|
16705
|
+
"application/x-ipynb+json": true,
|
|
16706
|
+
"application/x-javascript": true,
|
|
16707
|
+
"application/x-python-code": true,
|
|
16708
|
+
"application/x-typescript": true,
|
|
16709
|
+
"audio/aac": true,
|
|
16710
|
+
"audio/flac": true,
|
|
16711
|
+
"audio/l16": true,
|
|
16712
|
+
"audio/m4a": true,
|
|
16713
|
+
"audio/mp3": true,
|
|
16714
|
+
"audio/mp4": true,
|
|
16715
|
+
"audio/mpeg": true,
|
|
16716
|
+
"audio/ogg": true,
|
|
16717
|
+
"audio/opus": true,
|
|
16718
|
+
"audio/vnd.wave": true,
|
|
16719
|
+
"audio/wav": true,
|
|
16720
|
+
"audio/wave": true,
|
|
16721
|
+
"audio/webm": true,
|
|
16722
|
+
"audio/webm;codecs=opus": true,
|
|
16723
|
+
"audio/x-wav": true,
|
|
16724
|
+
"image/heic": true,
|
|
16725
|
+
"image/heif": true,
|
|
16726
|
+
"image/jpeg": true,
|
|
16727
|
+
"image/png": true,
|
|
16728
|
+
"image/webp": true,
|
|
16729
|
+
"text/css": true,
|
|
16730
|
+
"text/csv": true,
|
|
16731
|
+
"text/html": true,
|
|
16732
|
+
"text/javascript": true,
|
|
16733
|
+
"text/markdown": true,
|
|
16734
|
+
"text/plain": true,
|
|
16735
|
+
"text/rtf": true,
|
|
16736
|
+
"text/x-python": true,
|
|
16737
|
+
"text/x-python-script": true,
|
|
16738
|
+
"text/x-typescript": true,
|
|
16739
|
+
"text/xml": true,
|
|
16740
|
+
"video/audio/s16le": true,
|
|
16741
|
+
"video/audio/wav": true,
|
|
16742
|
+
"video/jpeg2000": true,
|
|
16743
|
+
"video/mp4": true,
|
|
16744
|
+
"video/text/timestamp": true,
|
|
16745
|
+
"video/videoframe/jpeg2000": true,
|
|
16746
|
+
"video/webm": true
|
|
16747
|
+
},
|
|
16748
|
+
supportsImages: true,
|
|
16749
|
+
supportsThinking: true,
|
|
16750
|
+
supportsVideo: true,
|
|
16751
|
+
tagDescription: "Limited time",
|
|
16752
|
+
tagTitle: "Fast",
|
|
16753
|
+
thinkingBudget: 1e3
|
|
16754
|
+
},
|
|
16755
|
+
"gemini-3.5-flash-low": {
|
|
16756
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16757
|
+
displayName: "Gemini 3.5 Flash (Medium)",
|
|
16758
|
+
maxOutputTokens: 65536,
|
|
16759
|
+
maxTokens: 1048576,
|
|
16760
|
+
minThinkingBudget: 32,
|
|
16761
|
+
model: "MODEL_PLACEHOLDER_M20",
|
|
16762
|
+
modelExperiments: {
|
|
16763
|
+
experiments: {
|
|
16764
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16765
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16766
|
+
},
|
|
16767
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16768
|
+
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16769
|
+
}
|
|
16770
|
+
}
|
|
16771
|
+
},
|
|
16772
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16773
|
+
quotaInfo: {
|
|
16774
|
+
remainingFraction: 0.9598632,
|
|
16775
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16776
|
+
},
|
|
16777
|
+
recommended: true,
|
|
16778
|
+
supportedMimeTypes: {
|
|
16779
|
+
"application/json": true,
|
|
16780
|
+
"application/pdf": true,
|
|
16781
|
+
"application/rtf": true,
|
|
16782
|
+
"application/x-ipynb+json": true,
|
|
16783
|
+
"application/x-javascript": true,
|
|
16784
|
+
"application/x-python-code": true,
|
|
16785
|
+
"application/x-typescript": true,
|
|
16786
|
+
"audio/aac": true,
|
|
16787
|
+
"audio/flac": true,
|
|
16788
|
+
"audio/l16": true,
|
|
16789
|
+
"audio/m4a": true,
|
|
16790
|
+
"audio/mp3": true,
|
|
16791
|
+
"audio/mp4": true,
|
|
16792
|
+
"audio/mpeg": true,
|
|
16793
|
+
"audio/ogg": true,
|
|
16794
|
+
"audio/opus": true,
|
|
16795
|
+
"audio/vnd.wave": true,
|
|
16796
|
+
"audio/wav": true,
|
|
16797
|
+
"audio/wave": true,
|
|
16798
|
+
"audio/webm": true,
|
|
16799
|
+
"audio/webm;codecs=opus": true,
|
|
16800
|
+
"audio/x-wav": true,
|
|
16801
|
+
"image/heic": true,
|
|
16802
|
+
"image/heif": true,
|
|
16803
|
+
"image/jpeg": true,
|
|
16804
|
+
"image/png": true,
|
|
16805
|
+
"image/webp": true,
|
|
16806
|
+
"text/css": true,
|
|
16807
|
+
"text/csv": true,
|
|
16808
|
+
"text/html": true,
|
|
16809
|
+
"text/javascript": true,
|
|
16810
|
+
"text/markdown": true,
|
|
16811
|
+
"text/plain": true,
|
|
16812
|
+
"text/rtf": true,
|
|
16813
|
+
"text/x-python": true,
|
|
16814
|
+
"text/x-python-script": true,
|
|
16815
|
+
"text/x-typescript": true,
|
|
16816
|
+
"text/xml": true,
|
|
16817
|
+
"video/audio/s16le": true,
|
|
16818
|
+
"video/audio/wav": true,
|
|
16819
|
+
"video/jpeg2000": true,
|
|
16820
|
+
"video/mp4": true,
|
|
16821
|
+
"video/text/timestamp": true,
|
|
16822
|
+
"video/videoframe/jpeg2000": true,
|
|
16823
|
+
"video/webm": true
|
|
16824
|
+
},
|
|
16825
|
+
supportsImages: true,
|
|
16826
|
+
supportsThinking: true,
|
|
16827
|
+
supportsVideo: true,
|
|
16828
|
+
tagDescription: "Limited time",
|
|
16829
|
+
tagTitle: "Fast",
|
|
16830
|
+
thinkingBudget: 4e3
|
|
16831
|
+
},
|
|
16832
|
+
"gemini-3.6-flash-high": {
|
|
16833
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16834
|
+
displayName: "Gemini 3.6 Flash (High)",
|
|
16835
|
+
maxOutputTokens: 65536,
|
|
16836
|
+
maxTokens: 1048576,
|
|
16837
|
+
minThinkingBudget: 32,
|
|
16838
|
+
model: "MODEL_PLACEHOLDER_M71",
|
|
16839
|
+
modelExperiments: {
|
|
16840
|
+
experiments: {
|
|
16841
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16842
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16843
|
+
},
|
|
16844
|
+
"cascade-include-ephemeral-message": {
|
|
16845
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
16846
|
+
},
|
|
16847
|
+
template__system_prompts__communication_style: {
|
|
16848
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- You can render LaTeX math (KaTeX): inline with `\\(...\\)` or `$...$`, display with `\\[...\\]` or `$$...$$` placed on its own line.\n- Use math only for genuine mathematical content. Use backticks for code, identifiers, paths, flags, and shell variables.\n- `$` opens inline math, so write a literal dollar as `\\$` or wrap it in backticks. Two unescaped `$` in the same paragraph turn everything between them into math \u2014 this bites prices (`\\$100`) and shell syntax written in prose (`$HOME`, awk `$1`).\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [utils.py](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n- After launching a background task such as 'run_command', YOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: \nA) either proceed to other relevant work (if any) or, \nB) simply update the user with a short message (e.g. 'task-20 has been launched in the background. I will wait for it to complete before proceeding.') and end the turn.\nDO NOTHING ELSE.\n"
|
|
16849
|
+
},
|
|
16850
|
+
template__system_prompts__guidelines: {
|
|
16851
|
+
stringValue: "Follow these behavioral and workflow guidelines at all times:\n# Documentation\n- Maintain documentation integrity. Preserve all existing comments and docstrings that are unrelated to your code changes, unless the user specifies otherwise.\n\n# Obey Explicit Directives\nIf the user specifies precise quantitative filtering rules, layout boundaries, or architectural preferences, enforce them exactly as requested without alteration.\n\n# Never Guess Code Logic, Schemas, or File Paths\nNEVER infer implementation details, variable names, or file locations without inspecting the authoritative source using code search and file viewing tools.\n\n# Inspect Logs & Stack Traces Before Diagnosing Errors\nNEVER form a diagnostic hypothesis for a runtime failure, or test breakage, without reading the full, un-truncated error log. When an error occurs, your VERY FIRST ACTION must be to fetch and read the exact logs. Base your diagnosis strictly on empirical log evidence.\n\n# No Superficial Symptom Patches\nNEVER resolve errors by masking symptoms, swallowing exceptions, returning dummy fallbacks, commenting out broken assertions, or deleting failing unit tests. When a test or function fails, identify why the underlying contract was broken. If an API returns missing or null data, trace the upstream data provider instead of wrapping the call in a silent try/except or returning an empty 0-byte ArrayBuffer.\n\n# Never Declare Success Without Running Verification Commands\nNEVER claim a task is resolved, a bug is fixed, or a feature is working until you have gathered concrete, empirical runtime verification demonstrating clean success. Editing a file does not equal completing the task. You MUST run the build or test command afterwards.\n\n# Never Ignore Explicit Command Failures or Error Exit Codes\nIf a command fails, you MUST explicitly acknowledge the failure to the user or continue debugging. Never gloss over a build timeout or permission denied error by focusing only on the part of the code that compiled.\n\n# Check Feature Flags & Enforce Strict Control Flow Scoping\nWhenever modifying conditional branches, adding experimental features, or processing loops, ensure that new logic is strictly scoped and evaluated against all possible execution paths.\n\n# Preserve Existing API Contracts & Avoid Unintended Side Effects\nIf you modify a function signature, use code search to find and update every invocation site so the parameter is actually passed.\n\n# Silent Log Inspection & Professional Synthesis\nWhen background tasks (run_command async, manage_task, schedule) complete or emit log notifications, inspect the log files silently. Summarize and synthesize the exact findings in clean, professional natural language.\n\n# No Snippet Tunnel Vision\nNever infer the definition of data structures (proto, struct, class, or enum schemas) from partial file views (first 15 lines or L40-L65 snippets) or design doc text.\nIf view_file output indicates truncation or if an imported schema is referenced, you MUST adjust StartLine/EndLine or ContentOffset to inspect the complete, exact definition of the target symbols before writing code that consumes them.\n\n# Check Command Registries\nWhenever modifying core C/C++/Java command implementations (CLIENT LIST, CLIENT KILL), explicitly search for and update corresponding command definitions across all registry files (commands.def, JSON schemas, .bzl build manifests).\n\n# Audit Before Re-inventing\nSearch the codebase and recent commit history for pre-existing utility classes or decoupled architecture before writing custom helper classes from scratch.\n\n# No Blocking Calls on Main Looper Threads\nNever invoke blocking thread synchronizations (webLatch.await(500, ...), Future.get()) on main Android UI loops or single-threaded event dispatchers. \n\n# Thread Pool Shutdown Safety\nWhen modifying worker thread loops or shared queues, ensure emergency stop/shutdown signals and loop termination criteria remain intact so thread join operations never deadlock.\n\n# Exact Argument Structure\nPass arguments exactly as expected by the API (calculateRoute({ origin, destination, travelMode }) vs calculateRoute(origin, destination, travelMode)).\n\n# Local State Mutation Only\nDo not mutate private third-party DOM properties. Do not push incomplete draft objects directly into global array states; keep transient state within local component state.\n\n# Traceback Justification Required\nEvery code or configuration edit during debugging MUST be justified by an explicit error traceback, log line, or verified root cause. If the root cause is unknown, investigate further before mutating code.\n\n# Analyze Before Retrying\nNever repeat the exact same broken test or shell command line with duplicate/conflicting arguments without analyzing and resolving why the previous command failed.\n\n# Persevere on Log Extraction\nIf a log retrieval command fails, NEVER abandon log extraction to diagnose blindly. Immediately switch to alternative tools to inspect the actual failure traceback.\n\n# Verify Signatures & Prop Names\nCheck exact variable names, component prop keys, and method signatures before passing them. Prevent NullPointerException, AttributeError, KeyError, and ReferenceError crashes by explicitly verifying object initialization and non-null states before property dereferencing (layer._path, stat.owner()).\n\n# Dynamic Layout Math\nAvoid hardcoding static pixel offsets (+ 12) or arbitrary multipliers (pill_font_size * 2.0) when computing dynamic UI layout heights; calculate exact container bounds from wrapped elements.\n"
|
|
16852
|
+
},
|
|
16853
|
+
template__system_prompts__messaging: {
|
|
16854
|
+
stringValue: "You are connected to a messaging system where you may receive messages from: {{- $subagent := .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled -}}\n{{- $message := .CascadeConfig.GetMessageConfig.GetEnabled -}}\n{{- if and $subagent $message }} agents, background tasks, user-queued messages\n{{- else if $subagent }} agents, background tasks\n{{- else if $message }} background tasks, user-queued messages\n{{- else }} background tasks\n{{- end }}.\n\n## Receiving Messages\n\nYou receive messages automatically at the start of each invocation. All messages are delivered in full directly into your context \u2014 no manual retrieval is needed.\n\n## Reactive Wakeup (No Polling Needed)\n\nThe system automatically resumes your execution when:\n{{- if .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled }}\n- A message arrives from a subagent or peer agent\n{{- end }}\n- A **background task** completes or sends you a notification\n{{- if .CascadeConfig.GetMessageConfig.GetEnabled }}\n- A **user-queued message** is ready to be dequeued\n{{- end }}\n\nThis means you do **NOT** need to poll in a loop while waiting for messages or updates. After launching a task that runs in the background, you may continue other work or simply stop by calling no more tools. The system will notify you when there is something to process."
|
|
16855
|
+
}
|
|
16856
|
+
}
|
|
16857
|
+
},
|
|
16858
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16859
|
+
quotaInfo: {
|
|
16860
|
+
remainingFraction: 0.9598632,
|
|
16861
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16862
|
+
},
|
|
16863
|
+
recommended: true,
|
|
16864
|
+
supportedMimeTypes: {
|
|
16865
|
+
"application/json": true,
|
|
16866
|
+
"application/pdf": true,
|
|
16867
|
+
"application/rtf": true,
|
|
16868
|
+
"application/x-ipynb+json": true,
|
|
16869
|
+
"application/x-javascript": true,
|
|
16870
|
+
"application/x-python-code": true,
|
|
16871
|
+
"application/x-typescript": true,
|
|
16872
|
+
"audio/aac": true,
|
|
16873
|
+
"audio/flac": true,
|
|
16874
|
+
"audio/l16": true,
|
|
16875
|
+
"audio/m4a": true,
|
|
16876
|
+
"audio/mp3": true,
|
|
16877
|
+
"audio/mp4": true,
|
|
16878
|
+
"audio/mpeg": true,
|
|
16879
|
+
"audio/ogg": true,
|
|
16880
|
+
"audio/opus": true,
|
|
16881
|
+
"audio/vnd.wave": true,
|
|
16882
|
+
"audio/wav": true,
|
|
16883
|
+
"audio/wave": true,
|
|
16884
|
+
"audio/webm": true,
|
|
16885
|
+
"audio/webm;codecs=opus": true,
|
|
16886
|
+
"audio/x-wav": true,
|
|
16887
|
+
"image/heic": true,
|
|
16888
|
+
"image/heif": true,
|
|
16889
|
+
"image/jpeg": true,
|
|
16890
|
+
"image/png": true,
|
|
16891
|
+
"image/webp": true,
|
|
16892
|
+
"text/css": true,
|
|
16893
|
+
"text/csv": true,
|
|
16894
|
+
"text/html": true,
|
|
16895
|
+
"text/javascript": true,
|
|
16896
|
+
"text/markdown": true,
|
|
16897
|
+
"text/plain": true,
|
|
16898
|
+
"text/rtf": true,
|
|
16899
|
+
"text/x-python": true,
|
|
16900
|
+
"text/x-python-script": true,
|
|
16901
|
+
"text/x-typescript": true,
|
|
16902
|
+
"text/xml": true,
|
|
16903
|
+
"video/audio/s16le": true,
|
|
16904
|
+
"video/audio/wav": true,
|
|
16905
|
+
"video/jpeg2000": true,
|
|
16906
|
+
"video/mp4": true,
|
|
16907
|
+
"video/text/timestamp": true,
|
|
16908
|
+
"video/videoframe/jpeg2000": true,
|
|
16909
|
+
"video/webm": true
|
|
16910
|
+
},
|
|
16911
|
+
supportsImages: true,
|
|
16912
|
+
supportsThinking: true,
|
|
16913
|
+
supportsVideo: true,
|
|
16914
|
+
tagDescription: "Limited time",
|
|
16915
|
+
tagTitle: "Fast",
|
|
16916
|
+
thinkingBudget: -1
|
|
16917
|
+
},
|
|
16918
|
+
"gemini-3.6-flash-low": {
|
|
16919
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16920
|
+
displayName: "Gemini 3.6 Flash (Low)",
|
|
16921
|
+
maxOutputTokens: 65536,
|
|
16922
|
+
maxTokens: 1048576,
|
|
16923
|
+
minThinkingBudget: 32,
|
|
16924
|
+
model: "MODEL_PLACEHOLDER_M73",
|
|
16925
|
+
modelExperiments: {
|
|
16926
|
+
experiments: {
|
|
16927
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16928
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16929
|
+
},
|
|
16930
|
+
"cascade-include-ephemeral-message": {
|
|
16931
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
16932
|
+
},
|
|
16933
|
+
template__system_prompts__communication_style: {
|
|
16934
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- You can render LaTeX math (KaTeX): inline with `\\(...\\)` or `$...$`, display with `\\[...\\]` or `$$...$$` placed on its own line.\n- Use math only for genuine mathematical content. Use backticks for code, identifiers, paths, flags, and shell variables.\n- `$` opens inline math, so write a literal dollar as `\\$` or wrap it in backticks. Two unescaped `$` in the same paragraph turn everything between them into math \u2014 this bites prices (`\\$100`) and shell syntax written in prose (`$HOME`, awk `$1`).\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [utils.py](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n- After launching a background task such as 'run_command', YOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: \nA) either proceed to other relevant work (if any) or, \nB) simply update the user with a short message (e.g. 'task-20 has been launched in the background. I will wait for it to complete before proceeding.') and end the turn.\nDO NOTHING ELSE.\n"
|
|
16935
|
+
},
|
|
16936
|
+
template__system_prompts__guidelines: {
|
|
16937
|
+
stringValue: "Follow these behavioral and workflow guidelines at all times:\n# Documentation\n- Maintain documentation integrity. Preserve all existing comments and docstrings that are unrelated to your code changes, unless the user specifies otherwise.\n\n# Obey Explicit Directives\nIf the user specifies precise quantitative filtering rules, layout boundaries, or architectural preferences, enforce them exactly as requested without alteration.\n\n# Never Guess Code Logic, Schemas, or File Paths\nNEVER infer implementation details, variable names, or file locations without inspecting the authoritative source using code search and file viewing tools.\n\n# Inspect Logs & Stack Traces Before Diagnosing Errors\nNEVER form a diagnostic hypothesis for a runtime failure, or test breakage, without reading the full, un-truncated error log. When an error occurs, your VERY FIRST ACTION must be to fetch and read the exact logs. Base your diagnosis strictly on empirical log evidence.\n\n# No Superficial Symptom Patches\nNEVER resolve errors by masking symptoms, swallowing exceptions, returning dummy fallbacks, commenting out broken assertions, or deleting failing unit tests. When a test or function fails, identify why the underlying contract was broken. If an API returns missing or null data, trace the upstream data provider instead of wrapping the call in a silent try/except or returning an empty 0-byte ArrayBuffer.\n\n# Never Declare Success Without Running Verification Commands\nNEVER claim a task is resolved, a bug is fixed, or a feature is working until you have gathered concrete, empirical runtime verification demonstrating clean success. Editing a file does not equal completing the task. You MUST run the build or test command afterwards.\n\n# Never Ignore Explicit Command Failures or Error Exit Codes\nIf a command fails, you MUST explicitly acknowledge the failure to the user or continue debugging. Never gloss over a build timeout or permission denied error by focusing only on the part of the code that compiled.\n\n# Check Feature Flags & Enforce Strict Control Flow Scoping\nWhenever modifying conditional branches, adding experimental features, or processing loops, ensure that new logic is strictly scoped and evaluated against all possible execution paths.\n\n# Preserve Existing API Contracts & Avoid Unintended Side Effects\nIf you modify a function signature, use code search to find and update every invocation site so the parameter is actually passed.\n\n# Silent Log Inspection & Professional Synthesis\nWhen background tasks (run_command async, manage_task, schedule) complete or emit log notifications, inspect the log files silently. Summarize and synthesize the exact findings in clean, professional natural language.\n\n# No Snippet Tunnel Vision\nNever infer the definition of data structures (proto, struct, class, or enum schemas) from partial file views (first 15 lines or L40-L65 snippets) or design doc text.\nIf view_file output indicates truncation or if an imported schema is referenced, you MUST adjust StartLine/EndLine or ContentOffset to inspect the complete, exact definition of the target symbols before writing code that consumes them.\n\n# Check Command Registries\nWhenever modifying core C/C++/Java command implementations (CLIENT LIST, CLIENT KILL), explicitly search for and update corresponding command definitions across all registry files (commands.def, JSON schemas, .bzl build manifests).\n\n# Audit Before Re-inventing\nSearch the codebase and recent commit history for pre-existing utility classes or decoupled architecture before writing custom helper classes from scratch.\n\n# No Blocking Calls on Main Looper Threads\nNever invoke blocking thread synchronizations (webLatch.await(500, ...), Future.get()) on main Android UI loops or single-threaded event dispatchers. \n\n# Thread Pool Shutdown Safety\nWhen modifying worker thread loops or shared queues, ensure emergency stop/shutdown signals and loop termination criteria remain intact so thread join operations never deadlock.\n\n# Exact Argument Structure\nPass arguments exactly as expected by the API (calculateRoute({ origin, destination, travelMode }) vs calculateRoute(origin, destination, travelMode)).\n\n# Local State Mutation Only\nDo not mutate private third-party DOM properties. Do not push incomplete draft objects directly into global array states; keep transient state within local component state.\n\n# Traceback Justification Required\nEvery code or configuration edit during debugging MUST be justified by an explicit error traceback, log line, or verified root cause. If the root cause is unknown, investigate further before mutating code.\n\n# Analyze Before Retrying\nNever repeat the exact same broken test or shell command line with duplicate/conflicting arguments without analyzing and resolving why the previous command failed.\n\n# Persevere on Log Extraction\nIf a log retrieval command fails, NEVER abandon log extraction to diagnose blindly. Immediately switch to alternative tools to inspect the actual failure traceback.\n\n# Verify Signatures & Prop Names\nCheck exact variable names, component prop keys, and method signatures before passing them. Prevent NullPointerException, AttributeError, KeyError, and ReferenceError crashes by explicitly verifying object initialization and non-null states before property dereferencing (layer._path, stat.owner()).\n\n# Dynamic Layout Math\nAvoid hardcoding static pixel offsets (+ 12) or arbitrary multipliers (pill_font_size * 2.0) when computing dynamic UI layout heights; calculate exact container bounds from wrapped elements.\n"
|
|
16938
|
+
},
|
|
16939
|
+
template__system_prompts__messaging: {
|
|
16940
|
+
stringValue: "You are connected to a messaging system where you may receive messages from: {{- $subagent := .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled -}}\n{{- $message := .CascadeConfig.GetMessageConfig.GetEnabled -}}\n{{- if and $subagent $message }} agents, background tasks, user-queued messages\n{{- else if $subagent }} agents, background tasks\n{{- else if $message }} background tasks, user-queued messages\n{{- else }} background tasks\n{{- end }}.\n\n## Receiving Messages\n\nYou receive messages automatically at the start of each invocation. All messages are delivered in full directly into your context \u2014 no manual retrieval is needed.\n\n## Reactive Wakeup (No Polling Needed)\n\nThe system automatically resumes your execution when:\n{{- if .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled }}\n- A message arrives from a subagent or peer agent\n{{- end }}\n- A **background task** completes or sends you a notification\n{{- if .CascadeConfig.GetMessageConfig.GetEnabled }}\n- A **user-queued message** is ready to be dequeued\n{{- end }}\n\nThis means you do **NOT** need to poll in a loop while waiting for messages or updates. After launching a task that runs in the background, you may continue other work or simply stop by calling no more tools. The system will notify you when there is something to process."
|
|
16941
|
+
}
|
|
16942
|
+
}
|
|
16943
|
+
},
|
|
16944
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16945
|
+
quotaInfo: {
|
|
16946
|
+
remainingFraction: 0.9598632,
|
|
16947
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16948
|
+
},
|
|
16949
|
+
recommended: true,
|
|
16950
|
+
supportedMimeTypes: {
|
|
16951
|
+
"application/json": true,
|
|
16952
|
+
"application/pdf": true,
|
|
16953
|
+
"application/rtf": true,
|
|
16954
|
+
"application/x-ipynb+json": true,
|
|
16955
|
+
"application/x-javascript": true,
|
|
16956
|
+
"application/x-python-code": true,
|
|
16957
|
+
"application/x-typescript": true,
|
|
16958
|
+
"audio/aac": true,
|
|
16959
|
+
"audio/flac": true,
|
|
16960
|
+
"audio/l16": true,
|
|
16961
|
+
"audio/m4a": true,
|
|
16962
|
+
"audio/mp3": true,
|
|
16963
|
+
"audio/mp4": true,
|
|
16964
|
+
"audio/mpeg": true,
|
|
16965
|
+
"audio/ogg": true,
|
|
16966
|
+
"audio/opus": true,
|
|
16967
|
+
"audio/vnd.wave": true,
|
|
16968
|
+
"audio/wav": true,
|
|
16969
|
+
"audio/wave": true,
|
|
16970
|
+
"audio/webm": true,
|
|
16971
|
+
"audio/webm;codecs=opus": true,
|
|
16972
|
+
"audio/x-wav": true,
|
|
16973
|
+
"image/heic": true,
|
|
16974
|
+
"image/heif": true,
|
|
16975
|
+
"image/jpeg": true,
|
|
16976
|
+
"image/png": true,
|
|
16977
|
+
"image/webp": true,
|
|
16978
|
+
"text/css": true,
|
|
16979
|
+
"text/csv": true,
|
|
16980
|
+
"text/html": true,
|
|
16981
|
+
"text/javascript": true,
|
|
16982
|
+
"text/markdown": true,
|
|
16983
|
+
"text/plain": true,
|
|
16984
|
+
"text/rtf": true,
|
|
16985
|
+
"text/x-python": true,
|
|
16986
|
+
"text/x-python-script": true,
|
|
16987
|
+
"text/x-typescript": true,
|
|
16988
|
+
"text/xml": true,
|
|
16989
|
+
"video/audio/s16le": true,
|
|
16990
|
+
"video/audio/wav": true,
|
|
16991
|
+
"video/jpeg2000": true,
|
|
16992
|
+
"video/mp4": true,
|
|
16993
|
+
"video/text/timestamp": true,
|
|
16994
|
+
"video/videoframe/jpeg2000": true,
|
|
16995
|
+
"video/webm": true
|
|
16996
|
+
},
|
|
16997
|
+
supportsImages: true,
|
|
16998
|
+
supportsThinking: true,
|
|
16999
|
+
supportsVideo: true,
|
|
17000
|
+
tagDescription: "Limited time",
|
|
17001
|
+
tagTitle: "Fast",
|
|
17002
|
+
thinkingBudget: 1e3
|
|
17003
|
+
},
|
|
17004
|
+
"gemini-3.6-flash-medium": {
|
|
17005
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17006
|
+
displayName: "Gemini 3.6 Flash (Medium)",
|
|
17007
|
+
maxOutputTokens: 65536,
|
|
17008
|
+
maxTokens: 1048576,
|
|
17009
|
+
minThinkingBudget: 32,
|
|
17010
|
+
model: "MODEL_PLACEHOLDER_M72",
|
|
17011
|
+
modelExperiments: {
|
|
17012
|
+
experiments: {
|
|
17013
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
17014
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
17015
|
+
},
|
|
17016
|
+
"cascade-include-ephemeral-message": {
|
|
17017
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
17018
|
+
},
|
|
17019
|
+
template__system_prompts__communication_style: {
|
|
17020
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- You can render LaTeX math (KaTeX): inline with `\\(...\\)` or `$...$`, display with `\\[...\\]` or `$$...$$` placed on its own line.\n- Use math only for genuine mathematical content. Use backticks for code, identifiers, paths, flags, and shell variables.\n- `$` opens inline math, so write a literal dollar as `\\$` or wrap it in backticks. Two unescaped `$` in the same paragraph turn everything between them into math \u2014 this bites prices (`\\$100`) and shell syntax written in prose (`$HOME`, awk `$1`).\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [utils.py](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n- After launching a background task such as 'run_command', YOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: \nA) either proceed to other relevant work (if any) or, \nB) simply update the user with a short message (e.g. 'task-20 has been launched in the background. I will wait for it to complete before proceeding.') and end the turn.\nDO NOTHING ELSE.\n"
|
|
17021
|
+
},
|
|
17022
|
+
template__system_prompts__guidelines: {
|
|
17023
|
+
stringValue: "Follow these behavioral and workflow guidelines at all times:\n# Documentation\n- Maintain documentation integrity. Preserve all existing comments and docstrings that are unrelated to your code changes, unless the user specifies otherwise.\n\n# Obey Explicit Directives\nIf the user specifies precise quantitative filtering rules, layout boundaries, or architectural preferences, enforce them exactly as requested without alteration.\n\n# Never Guess Code Logic, Schemas, or File Paths\nNEVER infer implementation details, variable names, or file locations without inspecting the authoritative source using code search and file viewing tools.\n\n# Inspect Logs & Stack Traces Before Diagnosing Errors\nNEVER form a diagnostic hypothesis for a runtime failure, or test breakage, without reading the full, un-truncated error log. When an error occurs, your VERY FIRST ACTION must be to fetch and read the exact logs. Base your diagnosis strictly on empirical log evidence.\n\n# No Superficial Symptom Patches\nNEVER resolve errors by masking symptoms, swallowing exceptions, returning dummy fallbacks, commenting out broken assertions, or deleting failing unit tests. When a test or function fails, identify why the underlying contract was broken. If an API returns missing or null data, trace the upstream data provider instead of wrapping the call in a silent try/except or returning an empty 0-byte ArrayBuffer.\n\n# Never Declare Success Without Running Verification Commands\nNEVER claim a task is resolved, a bug is fixed, or a feature is working until you have gathered concrete, empirical runtime verification demonstrating clean success. Editing a file does not equal completing the task. You MUST run the build or test command afterwards.\n\n# Never Ignore Explicit Command Failures or Error Exit Codes\nIf a command fails, you MUST explicitly acknowledge the failure to the user or continue debugging. Never gloss over a build timeout or permission denied error by focusing only on the part of the code that compiled.\n\n# Check Feature Flags & Enforce Strict Control Flow Scoping\nWhenever modifying conditional branches, adding experimental features, or processing loops, ensure that new logic is strictly scoped and evaluated against all possible execution paths.\n\n# Preserve Existing API Contracts & Avoid Unintended Side Effects\nIf you modify a function signature, use code search to find and update every invocation site so the parameter is actually passed.\n\n# Silent Log Inspection & Professional Synthesis\nWhen background tasks (run_command async, manage_task, schedule) complete or emit log notifications, inspect the log files silently. Summarize and synthesize the exact findings in clean, professional natural language.\n\n# No Snippet Tunnel Vision\nNever infer the definition of data structures (proto, struct, class, or enum schemas) from partial file views (first 15 lines or L40-L65 snippets) or design doc text.\nIf view_file output indicates truncation or if an imported schema is referenced, you MUST adjust StartLine/EndLine or ContentOffset to inspect the complete, exact definition of the target symbols before writing code that consumes them.\n\n# Check Command Registries\nWhenever modifying core C/C++/Java command implementations (CLIENT LIST, CLIENT KILL), explicitly search for and update corresponding command definitions across all registry files (commands.def, JSON schemas, .bzl build manifests).\n\n# Audit Before Re-inventing\nSearch the codebase and recent commit history for pre-existing utility classes or decoupled architecture before writing custom helper classes from scratch.\n\n# No Blocking Calls on Main Looper Threads\nNever invoke blocking thread synchronizations (webLatch.await(500, ...), Future.get()) on main Android UI loops or single-threaded event dispatchers. \n\n# Thread Pool Shutdown Safety\nWhen modifying worker thread loops or shared queues, ensure emergency stop/shutdown signals and loop termination criteria remain intact so thread join operations never deadlock.\n\n# Exact Argument Structure\nPass arguments exactly as expected by the API (calculateRoute({ origin, destination, travelMode }) vs calculateRoute(origin, destination, travelMode)).\n\n# Local State Mutation Only\nDo not mutate private third-party DOM properties. Do not push incomplete draft objects directly into global array states; keep transient state within local component state.\n\n# Traceback Justification Required\nEvery code or configuration edit during debugging MUST be justified by an explicit error traceback, log line, or verified root cause. If the root cause is unknown, investigate further before mutating code.\n\n# Analyze Before Retrying\nNever repeat the exact same broken test or shell command line with duplicate/conflicting arguments without analyzing and resolving why the previous command failed.\n\n# Persevere on Log Extraction\nIf a log retrieval command fails, NEVER abandon log extraction to diagnose blindly. Immediately switch to alternative tools to inspect the actual failure traceback.\n\n# Verify Signatures & Prop Names\nCheck exact variable names, component prop keys, and method signatures before passing them. Prevent NullPointerException, AttributeError, KeyError, and ReferenceError crashes by explicitly verifying object initialization and non-null states before property dereferencing (layer._path, stat.owner()).\n\n# Dynamic Layout Math\nAvoid hardcoding static pixel offsets (+ 12) or arbitrary multipliers (pill_font_size * 2.0) when computing dynamic UI layout heights; calculate exact container bounds from wrapped elements.\n"
|
|
17024
|
+
},
|
|
17025
|
+
template__system_prompts__messaging: {
|
|
17026
|
+
stringValue: "You are connected to a messaging system where you may receive messages from: {{- $subagent := .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled -}}\n{{- $message := .CascadeConfig.GetMessageConfig.GetEnabled -}}\n{{- if and $subagent $message }} agents, background tasks, user-queued messages\n{{- else if $subagent }} agents, background tasks\n{{- else if $message }} background tasks, user-queued messages\n{{- else }} background tasks\n{{- end }}.\n\n## Receiving Messages\n\nYou receive messages automatically at the start of each invocation. All messages are delivered in full directly into your context \u2014 no manual retrieval is needed.\n\n## Reactive Wakeup (No Polling Needed)\n\nThe system automatically resumes your execution when:\n{{- if .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled }}\n- A message arrives from a subagent or peer agent\n{{- end }}\n- A **background task** completes or sends you a notification\n{{- if .CascadeConfig.GetMessageConfig.GetEnabled }}\n- A **user-queued message** is ready to be dequeued\n{{- end }}\n\nThis means you do **NOT** need to poll in a loop while waiting for messages or updates. After launching a task that runs in the background, you may continue other work or simply stop by calling no more tools. The system will notify you when there is something to process."
|
|
17027
|
+
}
|
|
17028
|
+
}
|
|
17029
|
+
},
|
|
17030
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17031
|
+
quotaInfo: {
|
|
17032
|
+
remainingFraction: 0.9598632,
|
|
17033
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
17034
|
+
},
|
|
17035
|
+
recommended: true,
|
|
17036
|
+
supportedMimeTypes: {
|
|
17037
|
+
"application/json": true,
|
|
17038
|
+
"application/pdf": true,
|
|
17039
|
+
"application/rtf": true,
|
|
17040
|
+
"application/x-ipynb+json": true,
|
|
17041
|
+
"application/x-javascript": true,
|
|
17042
|
+
"application/x-python-code": true,
|
|
17043
|
+
"application/x-typescript": true,
|
|
17044
|
+
"audio/aac": true,
|
|
17045
|
+
"audio/flac": true,
|
|
17046
|
+
"audio/l16": true,
|
|
17047
|
+
"audio/m4a": true,
|
|
17048
|
+
"audio/mp3": true,
|
|
17049
|
+
"audio/mp4": true,
|
|
17050
|
+
"audio/mpeg": true,
|
|
17051
|
+
"audio/ogg": true,
|
|
17052
|
+
"audio/opus": true,
|
|
17053
|
+
"audio/vnd.wave": true,
|
|
17054
|
+
"audio/wav": true,
|
|
17055
|
+
"audio/wave": true,
|
|
17056
|
+
"audio/webm": true,
|
|
17057
|
+
"audio/webm;codecs=opus": true,
|
|
17058
|
+
"audio/x-wav": true,
|
|
17059
|
+
"image/heic": true,
|
|
17060
|
+
"image/heif": true,
|
|
17061
|
+
"image/jpeg": true,
|
|
17062
|
+
"image/png": true,
|
|
17063
|
+
"image/webp": true,
|
|
17064
|
+
"text/css": true,
|
|
17065
|
+
"text/csv": true,
|
|
17066
|
+
"text/html": true,
|
|
17067
|
+
"text/javascript": true,
|
|
17068
|
+
"text/markdown": true,
|
|
17069
|
+
"text/plain": true,
|
|
17070
|
+
"text/rtf": true,
|
|
17071
|
+
"text/x-python": true,
|
|
17072
|
+
"text/x-python-script": true,
|
|
17073
|
+
"text/x-typescript": true,
|
|
17074
|
+
"text/xml": true,
|
|
17075
|
+
"video/audio/s16le": true,
|
|
17076
|
+
"video/audio/wav": true,
|
|
17077
|
+
"video/jpeg2000": true,
|
|
17078
|
+
"video/mp4": true,
|
|
17079
|
+
"video/text/timestamp": true,
|
|
17080
|
+
"video/videoframe/jpeg2000": true,
|
|
17081
|
+
"video/webm": true
|
|
17082
|
+
},
|
|
17083
|
+
supportsImages: true,
|
|
17084
|
+
supportsThinking: true,
|
|
17085
|
+
supportsVideo: true,
|
|
17086
|
+
tagDescription: "Limited time",
|
|
17087
|
+
tagTitle: "Fast",
|
|
17088
|
+
thinkingBudget: 4e3
|
|
17089
|
+
},
|
|
17090
|
+
"gemini-3.6-flash-tiered": {
|
|
17091
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17092
|
+
maxOutputTokens: 65536,
|
|
17093
|
+
maxTokens: 1048576,
|
|
17094
|
+
minThinkingBudget: 32,
|
|
17095
|
+
model: "MODEL_PLACEHOLDER_M196",
|
|
17096
|
+
modelExperiments: {
|
|
17097
|
+
experiments: {
|
|
17098
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
17099
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
17100
|
+
},
|
|
17101
|
+
"cascade-include-ephemeral-message": {
|
|
17102
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
17103
|
+
},
|
|
17104
|
+
template__system_prompts__communication_style: {
|
|
17105
|
+
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- You can render LaTeX math (KaTeX): inline with `\\(...\\)` or `$...$`, display with `\\[...\\]` or `$$...$$` placed on its own line.\n- Use math only for genuine mathematical content. Use backticks for code, identifiers, paths, flags, and shell variables.\n- `$` opens inline math, so write a literal dollar as `\\$` or wrap it in backticks. Two unescaped `$` in the same paragraph turn everything between them into math \u2014 this bites prices (`\\$100`) and shell syntax written in prose (`$HOME`, awk `$1`).\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [utils.py](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n- After launching a background task such as 'run_command', YOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: \nA) either proceed to other relevant work (if any) or, \nB) simply update the user with a short message (e.g. 'task-20 has been launched in the background. I will wait for it to complete before proceeding.') and end the turn.\nDO NOTHING ELSE.\n"
|
|
17106
|
+
},
|
|
17107
|
+
template__system_prompts__guidelines: {
|
|
17108
|
+
stringValue: "Follow these behavioral and workflow guidelines at all times:\n# Documentation\n- Maintain documentation integrity. Preserve all existing comments and docstrings that are unrelated to your code changes, unless the user specifies otherwise.\n\n# Obey Explicit Directives\nIf the user specifies precise quantitative filtering rules, layout boundaries, or architectural preferences, enforce them exactly as requested without alteration.\n\n# Never Guess Code Logic, Schemas, or File Paths\nNEVER infer implementation details, variable names, or file locations without inspecting the authoritative source using code search and file viewing tools.\n\n# Inspect Logs & Stack Traces Before Diagnosing Errors\nNEVER form a diagnostic hypothesis for a runtime failure, or test breakage, without reading the full, un-truncated error log. When an error occurs, your VERY FIRST ACTION must be to fetch and read the exact logs. Base your diagnosis strictly on empirical log evidence.\n\n# No Superficial Symptom Patches\nNEVER resolve errors by masking symptoms, swallowing exceptions, returning dummy fallbacks, commenting out broken assertions, or deleting failing unit tests. When a test or function fails, identify why the underlying contract was broken. If an API returns missing or null data, trace the upstream data provider instead of wrapping the call in a silent try/except or returning an empty 0-byte ArrayBuffer.\n\n# Never Declare Success Without Running Verification Commands\nNEVER claim a task is resolved, a bug is fixed, or a feature is working until you have gathered concrete, empirical runtime verification demonstrating clean success. Editing a file does not equal completing the task. You MUST run the build or test command afterwards.\n\n# Never Ignore Explicit Command Failures or Error Exit Codes\nIf a command fails, you MUST explicitly acknowledge the failure to the user or continue debugging. Never gloss over a build timeout or permission denied error by focusing only on the part of the code that compiled.\n\n# Check Feature Flags & Enforce Strict Control Flow Scoping\nWhenever modifying conditional branches, adding experimental features, or processing loops, ensure that new logic is strictly scoped and evaluated against all possible execution paths.\n\n# Preserve Existing API Contracts & Avoid Unintended Side Effects\nIf you modify a function signature, use code search to find and update every invocation site so the parameter is actually passed.\n\n# Silent Log Inspection & Professional Synthesis\nWhen background tasks (run_command async, manage_task, schedule) complete or emit log notifications, inspect the log files silently. Summarize and synthesize the exact findings in clean, professional natural language.\n\n# No Snippet Tunnel Vision\nNever infer the definition of data structures (proto, struct, class, or enum schemas) from partial file views (first 15 lines or L40-L65 snippets) or design doc text.\nIf view_file output indicates truncation or if an imported schema is referenced, you MUST adjust StartLine/EndLine or ContentOffset to inspect the complete, exact definition of the target symbols before writing code that consumes them.\n\n# Check Command Registries\nWhenever modifying core C/C++/Java command implementations (CLIENT LIST, CLIENT KILL), explicitly search for and update corresponding command definitions across all registry files (commands.def, JSON schemas, .bzl build manifests).\n\n# Audit Before Re-inventing\nSearch the codebase and recent commit history for pre-existing utility classes or decoupled architecture before writing custom helper classes from scratch.\n\n# No Blocking Calls on Main Looper Threads\nNever invoke blocking thread synchronizations (webLatch.await(500, ...), Future.get()) on main Android UI loops or single-threaded event dispatchers. \n\n# Thread Pool Shutdown Safety\nWhen modifying worker thread loops or shared queues, ensure emergency stop/shutdown signals and loop termination criteria remain intact so thread join operations never deadlock.\n\n# Exact Argument Structure\nPass arguments exactly as expected by the API (calculateRoute({ origin, destination, travelMode }) vs calculateRoute(origin, destination, travelMode)).\n\n# Local State Mutation Only\nDo not mutate private third-party DOM properties. Do not push incomplete draft objects directly into global array states; keep transient state within local component state.\n\n# Traceback Justification Required\nEvery code or configuration edit during debugging MUST be justified by an explicit error traceback, log line, or verified root cause. If the root cause is unknown, investigate further before mutating code.\n\n# Analyze Before Retrying\nNever repeat the exact same broken test or shell command line with duplicate/conflicting arguments without analyzing and resolving why the previous command failed.\n\n# Persevere on Log Extraction\nIf a log retrieval command fails, NEVER abandon log extraction to diagnose blindly. Immediately switch to alternative tools to inspect the actual failure traceback.\n\n# Verify Signatures & Prop Names\nCheck exact variable names, component prop keys, and method signatures before passing them. Prevent NullPointerException, AttributeError, KeyError, and ReferenceError crashes by explicitly verifying object initialization and non-null states before property dereferencing (layer._path, stat.owner()).\n\n# Dynamic Layout Math\nAvoid hardcoding static pixel offsets (+ 12) or arbitrary multipliers (pill_font_size * 2.0) when computing dynamic UI layout heights; calculate exact container bounds from wrapped elements.\n"
|
|
17109
|
+
},
|
|
17110
|
+
template__system_prompts__messaging: {
|
|
17111
|
+
stringValue: "You are connected to a messaging system where you may receive messages from: {{- $subagent := .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled -}}\n{{- $message := .CascadeConfig.GetMessageConfig.GetEnabled -}}\n{{- if and $subagent $message }} agents, background tasks, user-queued messages\n{{- else if $subagent }} agents, background tasks\n{{- else if $message }} background tasks, user-queued messages\n{{- else }} background tasks\n{{- end }}.\n\n## Receiving Messages\n\nYou receive messages automatically at the start of each invocation. All messages are delivered in full directly into your context \u2014 no manual retrieval is needed.\n\n## Reactive Wakeup (No Polling Needed)\n\nThe system automatically resumes your execution when:\n{{- if .CascadeConfig.GetPlannerConfig.GetToolConfig.GetInvokeSubagent.GetEnabled }}\n- A message arrives from a subagent or peer agent\n{{- end }}\n- A **background task** completes or sends you a notification\n{{- if .CascadeConfig.GetMessageConfig.GetEnabled }}\n- A **user-queued message** is ready to be dequeued\n{{- end }}\n\nThis means you do **NOT** need to poll in a loop while waiting for messages or updates. After launching a task that runs in the background, you may continue other work or simply stop by calling no more tools. The system will notify you when there is something to process."
|
|
17112
|
+
}
|
|
17113
|
+
}
|
|
17114
|
+
},
|
|
17115
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17116
|
+
quotaInfo: {
|
|
17117
|
+
remainingFraction: 0.9598632,
|
|
17118
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
17119
|
+
},
|
|
17120
|
+
recommended: true,
|
|
17121
|
+
supportedMimeTypes: {
|
|
17122
|
+
"application/json": true,
|
|
17123
|
+
"application/pdf": true,
|
|
17124
|
+
"application/rtf": true,
|
|
17125
|
+
"application/x-ipynb+json": true,
|
|
17126
|
+
"application/x-javascript": true,
|
|
17127
|
+
"application/x-python-code": true,
|
|
17128
|
+
"application/x-typescript": true,
|
|
17129
|
+
"audio/aac": true,
|
|
17130
|
+
"audio/flac": true,
|
|
17131
|
+
"audio/l16": true,
|
|
17132
|
+
"audio/m4a": true,
|
|
17133
|
+
"audio/mp3": true,
|
|
17134
|
+
"audio/mp4": true,
|
|
17135
|
+
"audio/mpeg": true,
|
|
17136
|
+
"audio/ogg": true,
|
|
17137
|
+
"audio/opus": true,
|
|
17138
|
+
"audio/vnd.wave": true,
|
|
17139
|
+
"audio/wav": true,
|
|
17140
|
+
"audio/wave": true,
|
|
17141
|
+
"audio/webm": true,
|
|
17142
|
+
"audio/webm;codecs=opus": true,
|
|
17143
|
+
"audio/x-wav": true,
|
|
17144
|
+
"image/heic": true,
|
|
17145
|
+
"image/heif": true,
|
|
17146
|
+
"image/jpeg": true,
|
|
17147
|
+
"image/png": true,
|
|
17148
|
+
"image/webp": true,
|
|
17149
|
+
"text/css": true,
|
|
17150
|
+
"text/csv": true,
|
|
17151
|
+
"text/html": true,
|
|
17152
|
+
"text/javascript": true,
|
|
17153
|
+
"text/markdown": true,
|
|
17154
|
+
"text/plain": true,
|
|
17155
|
+
"text/rtf": true,
|
|
17156
|
+
"text/x-python": true,
|
|
17157
|
+
"text/x-python-script": true,
|
|
17158
|
+
"text/x-typescript": true,
|
|
17159
|
+
"text/xml": true,
|
|
17160
|
+
"video/audio/s16le": true,
|
|
17161
|
+
"video/audio/wav": true,
|
|
17162
|
+
"video/jpeg2000": true,
|
|
17163
|
+
"video/mp4": true,
|
|
17164
|
+
"video/text/timestamp": true,
|
|
17165
|
+
"video/videoframe/jpeg2000": true,
|
|
17166
|
+
"video/webm": true
|
|
17167
|
+
},
|
|
17168
|
+
supportsImages: true,
|
|
17169
|
+
supportsThinking: true,
|
|
17170
|
+
supportsVideo: true,
|
|
17171
|
+
thinkingBudget: -1
|
|
17172
|
+
},
|
|
17173
|
+
"gemini-3.7-flash-high": {
|
|
17174
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17175
|
+
displayName: "Gemini 3.7 Flash (High)",
|
|
17176
|
+
maxOutputTokens: 65536,
|
|
17177
|
+
maxTokens: 1048576,
|
|
17178
|
+
minThinkingBudget: 32,
|
|
17179
|
+
model: "MODEL_PLACEHOLDER_M298",
|
|
17180
|
+
modelExperiments: {
|
|
17181
|
+
experiments: {
|
|
17182
|
+
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
17183
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
17184
|
+
},
|
|
17185
|
+
"cascade-include-ephemeral-message": {
|
|
17186
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
17187
|
+
},
|
|
17188
|
+
"task-details-suffix": {
|
|
17189
|
+
stringValue: "\nYOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: A) either proceed to other relevant work (if any) or, B) simply update the user with a short message (that you have launched the command and will wait for it to finish) and end the turn.\n DO NOTHING ELSE."
|
|
17190
|
+
}
|
|
17191
|
+
}
|
|
17192
|
+
},
|
|
17193
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17194
|
+
quotaInfo: {
|
|
17195
|
+
remainingFraction: 0.9598632,
|
|
17196
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
17197
|
+
},
|
|
17198
|
+
recommended: true,
|
|
17199
|
+
supportedMimeTypes: {
|
|
17200
|
+
"application/json": true,
|
|
17201
|
+
"application/pdf": true,
|
|
17202
|
+
"application/rtf": true,
|
|
17203
|
+
"application/x-ipynb+json": true,
|
|
17204
|
+
"application/x-javascript": true,
|
|
17205
|
+
"application/x-python-code": true,
|
|
17206
|
+
"application/x-typescript": true,
|
|
17207
|
+
"audio/aac": true,
|
|
17208
|
+
"audio/flac": true,
|
|
17209
|
+
"audio/l16": true,
|
|
17210
|
+
"audio/m4a": true,
|
|
17211
|
+
"audio/mp3": true,
|
|
17212
|
+
"audio/mp4": true,
|
|
17213
|
+
"audio/mpeg": true,
|
|
17214
|
+
"audio/ogg": true,
|
|
17215
|
+
"audio/opus": true,
|
|
17216
|
+
"audio/vnd.wave": true,
|
|
17217
|
+
"audio/wav": true,
|
|
17218
|
+
"audio/wave": true,
|
|
17219
|
+
"audio/webm": true,
|
|
17220
|
+
"audio/webm;codecs=opus": true,
|
|
17221
|
+
"audio/x-wav": true,
|
|
17222
|
+
"image/heic": true,
|
|
17223
|
+
"image/heif": true,
|
|
17224
|
+
"image/jpeg": true,
|
|
17225
|
+
"image/png": true,
|
|
17226
|
+
"image/webp": true,
|
|
17227
|
+
"text/css": true,
|
|
17228
|
+
"text/csv": true,
|
|
17229
|
+
"text/html": true,
|
|
17230
|
+
"text/javascript": true,
|
|
17231
|
+
"text/markdown": true,
|
|
17232
|
+
"text/plain": true,
|
|
17233
|
+
"text/rtf": true,
|
|
17234
|
+
"text/x-python": true,
|
|
17235
|
+
"text/x-python-script": true,
|
|
17236
|
+
"text/x-typescript": true,
|
|
17237
|
+
"text/xml": true,
|
|
17238
|
+
"video/audio/s16le": true,
|
|
17239
|
+
"video/audio/wav": true,
|
|
17240
|
+
"video/jpeg2000": true,
|
|
17241
|
+
"video/mp4": true,
|
|
17242
|
+
"video/text/timestamp": true,
|
|
17243
|
+
"video/videoframe/jpeg2000": true,
|
|
17244
|
+
"video/webm": true
|
|
17245
|
+
},
|
|
17246
|
+
supportsImages: true,
|
|
17247
|
+
supportsThinking: true,
|
|
17248
|
+
supportsVideo: true,
|
|
17249
|
+
tagDescription: "Limited time",
|
|
17250
|
+
tagTitle: "Fast",
|
|
17251
|
+
thinkingBudget: -1
|
|
17252
|
+
},
|
|
17253
|
+
"gemini-3.7-flash-low": {
|
|
16358
17254
|
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16359
|
-
|
|
17255
|
+
displayName: "Gemini 3.7 Flash (Low)",
|
|
17256
|
+
maxOutputTokens: 65536,
|
|
17257
|
+
maxTokens: 1048576,
|
|
17258
|
+
minThinkingBudget: 32,
|
|
17259
|
+
model: "MODEL_PLACEHOLDER_M300",
|
|
16360
17260
|
modelExperiments: {
|
|
16361
17261
|
experiments: {
|
|
16362
17262
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16363
|
-
stringValue: '{\n "strategy": "
|
|
17263
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
17264
|
+
},
|
|
17265
|
+
"cascade-include-ephemeral-message": {
|
|
17266
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
17267
|
+
},
|
|
17268
|
+
"task-details-suffix": {
|
|
17269
|
+
stringValue: "\nYOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: A) either proceed to other relevant work (if any) or, B) simply update the user with a short message (that you have launched the command and will wait for it to finish) and end the turn.\n DO NOTHING ELSE."
|
|
16364
17270
|
}
|
|
16365
17271
|
}
|
|
16366
|
-
}
|
|
16367
|
-
},
|
|
16368
|
-
"gemini-3-flash": {
|
|
16369
|
-
displayName: "Gemini 3 Flash",
|
|
16370
|
-
supportsImages: true,
|
|
16371
|
-
supportsThinking: true,
|
|
16372
|
-
thinkingBudget: -1,
|
|
16373
|
-
minThinkingBudget: 32,
|
|
16374
|
-
recommended: true,
|
|
16375
|
-
maxTokens: 1048576,
|
|
16376
|
-
maxOutputTokens: 65536,
|
|
16377
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16378
|
-
quotaInfo: {
|
|
16379
|
-
remainingFraction: 1,
|
|
16380
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16381
17272
|
},
|
|
16382
|
-
model: "MODEL_PLACEHOLDER_M18",
|
|
16383
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16384
17273
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16385
|
-
|
|
17274
|
+
quotaInfo: {
|
|
17275
|
+
remainingFraction: 0.9598632,
|
|
17276
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
17277
|
+
},
|
|
17278
|
+
recommended: true,
|
|
16386
17279
|
supportedMimeTypes: {
|
|
16387
|
-
"
|
|
16388
|
-
"
|
|
17280
|
+
"application/json": true,
|
|
17281
|
+
"application/pdf": true,
|
|
17282
|
+
"application/rtf": true,
|
|
17283
|
+
"application/x-ipynb+json": true,
|
|
17284
|
+
"application/x-javascript": true,
|
|
17285
|
+
"application/x-python-code": true,
|
|
16389
17286
|
"application/x-typescript": true,
|
|
16390
|
-
"
|
|
17287
|
+
"audio/aac": true,
|
|
17288
|
+
"audio/flac": true,
|
|
17289
|
+
"audio/l16": true,
|
|
17290
|
+
"audio/m4a": true,
|
|
17291
|
+
"audio/mp3": true,
|
|
17292
|
+
"audio/mp4": true,
|
|
17293
|
+
"audio/mpeg": true,
|
|
17294
|
+
"audio/ogg": true,
|
|
17295
|
+
"audio/opus": true,
|
|
17296
|
+
"audio/vnd.wave": true,
|
|
17297
|
+
"audio/wav": true,
|
|
17298
|
+
"audio/wave": true,
|
|
17299
|
+
"audio/webm": true,
|
|
16391
17300
|
"audio/webm;codecs=opus": true,
|
|
16392
|
-
"
|
|
16393
|
-
"
|
|
16394
|
-
"
|
|
16395
|
-
"
|
|
16396
|
-
"
|
|
16397
|
-
"
|
|
16398
|
-
"video/jpeg2000": true,
|
|
17301
|
+
"audio/x-wav": true,
|
|
17302
|
+
"image/heic": true,
|
|
17303
|
+
"image/heif": true,
|
|
17304
|
+
"image/jpeg": true,
|
|
17305
|
+
"image/png": true,
|
|
17306
|
+
"image/webp": true,
|
|
16399
17307
|
"text/css": true,
|
|
16400
|
-
"
|
|
16401
|
-
"
|
|
16402
|
-
"text/
|
|
17308
|
+
"text/csv": true,
|
|
17309
|
+
"text/html": true,
|
|
17310
|
+
"text/javascript": true,
|
|
16403
17311
|
"text/markdown": true,
|
|
16404
|
-
"
|
|
17312
|
+
"text/plain": true,
|
|
17313
|
+
"text/rtf": true,
|
|
16405
17314
|
"text/x-python": true,
|
|
16406
|
-
"
|
|
16407
|
-
"application/x-ipynb+json": true,
|
|
16408
|
-
"image/heif": true,
|
|
16409
|
-
"application/json": true,
|
|
17315
|
+
"text/x-python-script": true,
|
|
16410
17316
|
"text/x-typescript": true,
|
|
16411
|
-
"text/plain": true,
|
|
16412
|
-
"image/png": true,
|
|
16413
|
-
"application/rtf": true,
|
|
16414
17317
|
"text/xml": true,
|
|
16415
|
-
"
|
|
16416
|
-
"video/
|
|
16417
|
-
"
|
|
17318
|
+
"video/audio/s16le": true,
|
|
17319
|
+
"video/audio/wav": true,
|
|
17320
|
+
"video/jpeg2000": true,
|
|
17321
|
+
"video/mp4": true,
|
|
17322
|
+
"video/text/timestamp": true,
|
|
17323
|
+
"video/videoframe/jpeg2000": true,
|
|
17324
|
+
"video/webm": true
|
|
16418
17325
|
},
|
|
17326
|
+
supportsImages: true,
|
|
17327
|
+
supportsThinking: true,
|
|
17328
|
+
supportsVideo: true,
|
|
17329
|
+
tagDescription: "Limited time",
|
|
17330
|
+
tagTitle: "Fast",
|
|
17331
|
+
thinkingBudget: 1e3
|
|
17332
|
+
},
|
|
17333
|
+
"gemini-3.7-flash-medium": {
|
|
17334
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17335
|
+
displayName: "Gemini 3.7 Flash (Medium)",
|
|
17336
|
+
maxOutputTokens: 65536,
|
|
17337
|
+
maxTokens: 1048576,
|
|
17338
|
+
minThinkingBudget: 32,
|
|
17339
|
+
model: "MODEL_PLACEHOLDER_M299",
|
|
16419
17340
|
modelExperiments: {
|
|
16420
17341
|
experiments: {
|
|
16421
17342
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16422
|
-
stringValue: '{\n "strategy": "
|
|
17343
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16423
17344
|
},
|
|
16424
|
-
|
|
16425
|
-
stringValue: '
|
|
17345
|
+
"cascade-include-ephemeral-message": {
|
|
17346
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
17347
|
+
},
|
|
17348
|
+
"task-details-suffix": {
|
|
17349
|
+
stringValue: "\nYOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: A) either proceed to other relevant work (if any) or, B) simply update the user with a short message (that you have launched the command and will wait for it to finish) and end the turn.\n DO NOTHING ELSE."
|
|
16426
17350
|
}
|
|
16427
17351
|
}
|
|
16428
|
-
}
|
|
16429
|
-
|
|
16430
|
-
"claude-sonnet-4-6": {
|
|
16431
|
-
displayName: "Claude Sonnet 4.6 (Thinking)",
|
|
16432
|
-
supportsImages: true,
|
|
16433
|
-
supportsThinking: true,
|
|
16434
|
-
thinkingBudget: 1024,
|
|
16435
|
-
recommended: true,
|
|
16436
|
-
maxTokens: 25e4,
|
|
16437
|
-
maxOutputTokens: 64e3,
|
|
16438
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
17352
|
+
},
|
|
17353
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16439
17354
|
quotaInfo: {
|
|
16440
|
-
remainingFraction: 0.
|
|
16441
|
-
resetTime: "2026-
|
|
17355
|
+
remainingFraction: 0.9598632,
|
|
17356
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16442
17357
|
},
|
|
16443
|
-
|
|
16444
|
-
apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
|
|
16445
|
-
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
17358
|
+
recommended: true,
|
|
16446
17359
|
supportedMimeTypes: {
|
|
17360
|
+
"application/json": true,
|
|
17361
|
+
"application/pdf": true,
|
|
17362
|
+
"application/rtf": true,
|
|
17363
|
+
"application/x-ipynb+json": true,
|
|
17364
|
+
"application/x-javascript": true,
|
|
17365
|
+
"application/x-python-code": true,
|
|
17366
|
+
"application/x-typescript": true,
|
|
17367
|
+
"audio/aac": true,
|
|
17368
|
+
"audio/flac": true,
|
|
17369
|
+
"audio/l16": true,
|
|
17370
|
+
"audio/m4a": true,
|
|
17371
|
+
"audio/mp3": true,
|
|
17372
|
+
"audio/mp4": true,
|
|
17373
|
+
"audio/mpeg": true,
|
|
17374
|
+
"audio/ogg": true,
|
|
17375
|
+
"audio/opus": true,
|
|
17376
|
+
"audio/vnd.wave": true,
|
|
17377
|
+
"audio/wav": true,
|
|
17378
|
+
"audio/wave": true,
|
|
17379
|
+
"audio/webm": true,
|
|
17380
|
+
"audio/webm;codecs=opus": true,
|
|
17381
|
+
"audio/x-wav": true,
|
|
17382
|
+
"image/heic": true,
|
|
17383
|
+
"image/heif": true,
|
|
17384
|
+
"image/jpeg": true,
|
|
16447
17385
|
"image/png": true,
|
|
16448
17386
|
"image/webp": true,
|
|
17387
|
+
"text/css": true,
|
|
17388
|
+
"text/csv": true,
|
|
17389
|
+
"text/html": true,
|
|
17390
|
+
"text/javascript": true,
|
|
17391
|
+
"text/markdown": true,
|
|
17392
|
+
"text/plain": true,
|
|
17393
|
+
"text/rtf": true,
|
|
17394
|
+
"text/x-python": true,
|
|
17395
|
+
"text/x-python-script": true,
|
|
17396
|
+
"text/x-typescript": true,
|
|
17397
|
+
"text/xml": true,
|
|
17398
|
+
"video/audio/s16le": true,
|
|
17399
|
+
"video/audio/wav": true,
|
|
16449
17400
|
"video/jpeg2000": true,
|
|
17401
|
+
"video/mp4": true,
|
|
17402
|
+
"video/text/timestamp": true,
|
|
16450
17403
|
"video/videoframe/jpeg2000": true,
|
|
16451
|
-
"
|
|
16452
|
-
"image/heif": true,
|
|
16453
|
-
"image/jpeg": true
|
|
17404
|
+
"video/webm": true
|
|
16454
17405
|
},
|
|
17406
|
+
supportsImages: true,
|
|
17407
|
+
supportsThinking: true,
|
|
17408
|
+
supportsVideo: true,
|
|
17409
|
+
tagDescription: "Limited time",
|
|
17410
|
+
tagTitle: "Fast",
|
|
17411
|
+
thinkingBudget: 4e3
|
|
17412
|
+
},
|
|
17413
|
+
"gemini-3.7-flash-tiered": {
|
|
17414
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17415
|
+
maxOutputTokens: 65536,
|
|
17416
|
+
maxTokens: 1048576,
|
|
17417
|
+
minThinkingBudget: 32,
|
|
17418
|
+
model: "MODEL_PLACEHOLDER_M301",
|
|
16455
17419
|
modelExperiments: {
|
|
16456
17420
|
experiments: {
|
|
16457
|
-
template__system_prompts__planning_more_artifacts: {
|
|
16458
|
-
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16459
|
-
},
|
|
16460
17421
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16461
|
-
stringValue: '{\n "strategy": "
|
|
17422
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "140000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
17423
|
+
},
|
|
17424
|
+
"cascade-include-ephemeral-message": {
|
|
17425
|
+
stringValue: '{\n "enabled": false,\n "disabledHeuristics": ["planning_mode", "bash_command_reminder", "running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
16462
17426
|
},
|
|
16463
|
-
|
|
16464
|
-
stringValue: "
|
|
17427
|
+
"task-details-suffix": {
|
|
17428
|
+
stringValue: "\nYOU MUST TAKE ONE OF THE FOLLOWING TWO ACTIONS: A) either proceed to other relevant work (if any) or, B) simply update the user with a short message (that you have launched the command and will wait for it to finish) and end the turn.\n DO NOTHING ELSE."
|
|
16465
17429
|
}
|
|
16466
17430
|
}
|
|
16467
17431
|
},
|
|
16468
|
-
|
|
16469
|
-
},
|
|
16470
|
-
"gemini-3.1-pro-low": {
|
|
16471
|
-
displayName: "Gemini 3.1 Pro (Low)",
|
|
16472
|
-
supportsImages: true,
|
|
16473
|
-
supportsThinking: true,
|
|
16474
|
-
thinkingBudget: 1001,
|
|
16475
|
-
minThinkingBudget: 128,
|
|
16476
|
-
recommended: true,
|
|
16477
|
-
maxTokens: 1048576,
|
|
16478
|
-
maxOutputTokens: 65535,
|
|
16479
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
17432
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16480
17433
|
quotaInfo: {
|
|
16481
|
-
remainingFraction:
|
|
16482
|
-
resetTime: "2026-
|
|
17434
|
+
remainingFraction: 0.9598632,
|
|
17435
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
16483
17436
|
},
|
|
16484
|
-
|
|
16485
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16486
|
-
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16487
|
-
supportsVideo: true,
|
|
17437
|
+
recommended: true,
|
|
16488
17438
|
supportedMimeTypes: {
|
|
16489
|
-
"text/x-typescript": true,
|
|
16490
|
-
"audio/webm;codecs=opus": true,
|
|
16491
|
-
"image/webp": true,
|
|
16492
17439
|
"application/json": true,
|
|
17440
|
+
"application/pdf": true,
|
|
16493
17441
|
"application/rtf": true,
|
|
16494
|
-
"
|
|
16495
|
-
"
|
|
16496
|
-
"text/csv": true,
|
|
16497
|
-
"video/text/timestamp": true,
|
|
16498
|
-
"text/css": true,
|
|
16499
|
-
"image/heif": true,
|
|
16500
|
-
"application/x-typescript": true,
|
|
16501
|
-
"text/x-python-script": true,
|
|
17442
|
+
"application/x-ipynb+json": true,
|
|
17443
|
+
"application/x-javascript": true,
|
|
16502
17444
|
"application/x-python-code": true,
|
|
16503
|
-
"
|
|
16504
|
-
"
|
|
16505
|
-
"
|
|
17445
|
+
"application/x-typescript": true,
|
|
17446
|
+
"audio/aac": true,
|
|
17447
|
+
"audio/flac": true,
|
|
17448
|
+
"audio/l16": true,
|
|
17449
|
+
"audio/m4a": true,
|
|
17450
|
+
"audio/mp3": true,
|
|
17451
|
+
"audio/mp4": true,
|
|
17452
|
+
"audio/mpeg": true,
|
|
17453
|
+
"audio/ogg": true,
|
|
17454
|
+
"audio/opus": true,
|
|
17455
|
+
"audio/vnd.wave": true,
|
|
17456
|
+
"audio/wav": true,
|
|
17457
|
+
"audio/wave": true,
|
|
17458
|
+
"audio/webm": true,
|
|
17459
|
+
"audio/webm;codecs=opus": true,
|
|
17460
|
+
"audio/x-wav": true,
|
|
17461
|
+
"image/heic": true,
|
|
17462
|
+
"image/heif": true,
|
|
16506
17463
|
"image/jpeg": true,
|
|
16507
|
-
"
|
|
16508
|
-
"
|
|
16509
|
-
"text/
|
|
17464
|
+
"image/png": true,
|
|
17465
|
+
"image/webp": true,
|
|
17466
|
+
"text/css": true,
|
|
17467
|
+
"text/csv": true,
|
|
16510
17468
|
"text/html": true,
|
|
16511
|
-
"
|
|
16512
|
-
"image/heic": true,
|
|
16513
|
-
"application/pdf": true,
|
|
16514
|
-
"video/audio/s16le": true,
|
|
17469
|
+
"text/javascript": true,
|
|
16515
17470
|
"text/markdown": true,
|
|
17471
|
+
"text/plain": true,
|
|
17472
|
+
"text/rtf": true,
|
|
17473
|
+
"text/x-python": true,
|
|
17474
|
+
"text/x-python-script": true,
|
|
17475
|
+
"text/x-typescript": true,
|
|
17476
|
+
"text/xml": true,
|
|
17477
|
+
"video/audio/s16le": true,
|
|
17478
|
+
"video/audio/wav": true,
|
|
17479
|
+
"video/jpeg2000": true,
|
|
17480
|
+
"video/mp4": true,
|
|
17481
|
+
"video/text/timestamp": true,
|
|
16516
17482
|
"video/videoframe/jpeg2000": true,
|
|
16517
|
-
"
|
|
16518
|
-
"application/x-ipynb+json": true,
|
|
16519
|
-
"text/rtf": true
|
|
17483
|
+
"video/webm": true
|
|
16520
17484
|
},
|
|
17485
|
+
supportsImages: true,
|
|
17486
|
+
supportsThinking: true,
|
|
17487
|
+
supportsVideo: true,
|
|
17488
|
+
thinkingBudget: -1
|
|
17489
|
+
},
|
|
17490
|
+
"gemini-pro-agent": {
|
|
17491
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17492
|
+
displayName: "Gemini 3.1 Pro (High)",
|
|
17493
|
+
maxOutputTokens: 65535,
|
|
17494
|
+
maxTokens: 1048576,
|
|
17495
|
+
minThinkingBudget: 128,
|
|
17496
|
+
model: "MODEL_PLACEHOLDER_M16",
|
|
16521
17497
|
modelExperiments: {
|
|
16522
17498
|
experiments: {
|
|
16523
17499
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16524
|
-
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
|
|
17500
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16525
17501
|
},
|
|
16526
17502
|
"cascade-include-ephemeral-message": {
|
|
16527
17503
|
stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
|
|
@@ -16529,182 +17505,145 @@ var models_default = {
|
|
|
16529
17505
|
template__system_prompts__communication_style: {
|
|
16530
17506
|
stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
|
|
16531
17507
|
},
|
|
16532
|
-
|
|
16533
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
16534
|
-
},
|
|
16535
|
-
template__system_prompts__planning_more_artifacts: {
|
|
17508
|
+
template__system_prompts__planning_mode_artifacts: {
|
|
16536
17509
|
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16537
17510
|
}
|
|
16538
17511
|
}
|
|
16539
|
-
}
|
|
16540
|
-
},
|
|
16541
|
-
"gemini-3.5-flash-low": {
|
|
16542
|
-
displayName: "Gemini 3.5 Flash (Medium)",
|
|
16543
|
-
supportsImages: true,
|
|
16544
|
-
supportsThinking: true,
|
|
16545
|
-
thinkingBudget: 4e3,
|
|
16546
|
-
minThinkingBudget: 32,
|
|
16547
|
-
recommended: true,
|
|
16548
|
-
maxTokens: 1048576,
|
|
16549
|
-
maxOutputTokens: 65536,
|
|
16550
|
-
tokenizerType: "LLAMA_WITH_SPECIAL",
|
|
16551
|
-
quotaInfo: {
|
|
16552
|
-
remainingFraction: 1,
|
|
16553
|
-
resetTime: "2026-05-29T18:30:05Z"
|
|
16554
17512
|
},
|
|
16555
|
-
model: "MODEL_PLACEHOLDER_M20",
|
|
16556
|
-
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
16557
17513
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16558
|
-
|
|
16559
|
-
|
|
16560
|
-
|
|
17514
|
+
quotaInfo: {
|
|
17515
|
+
remainingFraction: 0.9598632,
|
|
17516
|
+
resetTime: "2026-08-25T09:13:21Z"
|
|
17517
|
+
},
|
|
17518
|
+
recommended: true,
|
|
16561
17519
|
supportedMimeTypes: {
|
|
16562
|
-
"
|
|
16563
|
-
"
|
|
16564
|
-
"
|
|
17520
|
+
"application/json": true,
|
|
17521
|
+
"application/pdf": true,
|
|
17522
|
+
"application/rtf": true,
|
|
16565
17523
|
"application/x-ipynb+json": true,
|
|
16566
|
-
"text/markdown": true,
|
|
16567
|
-
"video/text/timestamp": true,
|
|
16568
17524
|
"application/x-javascript": true,
|
|
16569
|
-
"
|
|
16570
|
-
"
|
|
16571
|
-
"
|
|
17525
|
+
"application/x-python-code": true,
|
|
17526
|
+
"application/x-typescript": true,
|
|
17527
|
+
"audio/aac": true,
|
|
17528
|
+
"audio/flac": true,
|
|
17529
|
+
"audio/l16": true,
|
|
17530
|
+
"audio/m4a": true,
|
|
17531
|
+
"audio/mp3": true,
|
|
17532
|
+
"audio/mp4": true,
|
|
17533
|
+
"audio/mpeg": true,
|
|
17534
|
+
"audio/ogg": true,
|
|
17535
|
+
"audio/opus": true,
|
|
17536
|
+
"audio/vnd.wave": true,
|
|
17537
|
+
"audio/wav": true,
|
|
17538
|
+
"audio/wave": true,
|
|
17539
|
+
"audio/webm": true,
|
|
17540
|
+
"audio/webm;codecs=opus": true,
|
|
17541
|
+
"audio/x-wav": true,
|
|
17542
|
+
"image/heic": true,
|
|
16572
17543
|
"image/heif": true,
|
|
16573
|
-
"
|
|
16574
|
-
"
|
|
16575
|
-
"application/pdf": true,
|
|
16576
|
-
"text/css": true,
|
|
16577
|
-
"application/json": true,
|
|
17544
|
+
"image/jpeg": true,
|
|
17545
|
+
"image/png": true,
|
|
16578
17546
|
"image/webp": true,
|
|
17547
|
+
"text/css": true,
|
|
16579
17548
|
"text/csv": true,
|
|
17549
|
+
"text/html": true,
|
|
16580
17550
|
"text/javascript": true,
|
|
17551
|
+
"text/markdown": true,
|
|
16581
17552
|
"text/plain": true,
|
|
16582
|
-
"video/audio/wav": true,
|
|
16583
|
-
"image/png": true,
|
|
16584
|
-
"application/x-python-code": true,
|
|
16585
|
-
"video/audio/s16le": true,
|
|
16586
|
-
"audio/webm;codecs=opus": true,
|
|
16587
|
-
"video/webm": true,
|
|
16588
|
-
"image/jpeg": true,
|
|
16589
17553
|
"text/rtf": true,
|
|
16590
|
-
"text/
|
|
16591
|
-
"
|
|
16592
|
-
"text/x-typescript": true
|
|
17554
|
+
"text/x-python": true,
|
|
17555
|
+
"text/x-python-script": true,
|
|
17556
|
+
"text/x-typescript": true,
|
|
17557
|
+
"text/xml": true,
|
|
17558
|
+
"video/audio/s16le": true,
|
|
17559
|
+
"video/audio/wav": true,
|
|
17560
|
+
"video/jpeg2000": true,
|
|
17561
|
+
"video/mp4": true,
|
|
17562
|
+
"video/text/timestamp": true,
|
|
17563
|
+
"video/videoframe/jpeg2000": true,
|
|
17564
|
+
"video/webm": true
|
|
16593
17565
|
},
|
|
17566
|
+
supportsImages: true,
|
|
17567
|
+
supportsThinking: true,
|
|
17568
|
+
supportsVideo: true,
|
|
17569
|
+
thinkingBudget: 10001
|
|
17570
|
+
},
|
|
17571
|
+
"gpt-oss-120b-medium": {
|
|
17572
|
+
apiProvider: "API_PROVIDER_OPENAI_VERTEX",
|
|
17573
|
+
displayName: "GPT-OSS 120B (Medium)",
|
|
17574
|
+
maxOutputTokens: 32768,
|
|
17575
|
+
maxTokens: 131072,
|
|
17576
|
+
model: "MODEL_OPENAI_GPT_OSS_120B_MEDIUM",
|
|
16594
17577
|
modelExperiments: {
|
|
16595
17578
|
experiments: {
|
|
16596
|
-
template__system_prompts__identity: {
|
|
16597
|
-
stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
|
|
16598
|
-
},
|
|
16599
|
-
template__system_prompts__planning_more_artifacts: {
|
|
16600
|
-
stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
|
|
16601
|
-
},
|
|
16602
17579
|
CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
|
|
16603
|
-
stringValue: '{\n "strategy": "
|
|
17580
|
+
stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "80000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "8192",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n },\n "session_summary_prompt_override": ""\n}'
|
|
16604
17581
|
}
|
|
16605
17582
|
}
|
|
16606
|
-
}
|
|
17583
|
+
},
|
|
17584
|
+
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
17585
|
+
quotaInfo: {
|
|
17586
|
+
remainingFraction: 1,
|
|
17587
|
+
resetTime: "2026-08-25T09:18:20Z"
|
|
17588
|
+
},
|
|
17589
|
+
recommended: true,
|
|
17590
|
+
supportsThinking: true,
|
|
17591
|
+
thinkingBudget: 8192,
|
|
17592
|
+
vertexModelId: "openai/gpt-oss-120b-maas"
|
|
17593
|
+
},
|
|
17594
|
+
tab_flash_lite_preview: {
|
|
17595
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17596
|
+
maxOutputTokens: 4096,
|
|
17597
|
+
maxTokens: 16384,
|
|
17598
|
+
model: "MODEL_PLACEHOLDER_M19",
|
|
17599
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17600
|
+
quotaInfo: {
|
|
17601
|
+
remainingFraction: 1
|
|
17602
|
+
},
|
|
17603
|
+
requiresLeadInGeneration: true,
|
|
17604
|
+
supportsCumulativeContext: true,
|
|
17605
|
+
supportsEstimateTokenCounter: true,
|
|
17606
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML"
|
|
17607
|
+
},
|
|
17608
|
+
tab_jump_flash_lite_preview: {
|
|
17609
|
+
addCursorToFindReplaceTarget: true,
|
|
17610
|
+
apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
|
|
17611
|
+
maxOutputTokens: 4096,
|
|
17612
|
+
maxTokens: 16384,
|
|
17613
|
+
model: "MODEL_PLACEHOLDER_M28",
|
|
17614
|
+
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17615
|
+
quotaInfo: {
|
|
17616
|
+
remainingFraction: 1
|
|
17617
|
+
},
|
|
17618
|
+
requiresLeadInGeneration: true,
|
|
17619
|
+
requiresNoXmlToolExamples: true,
|
|
17620
|
+
supportsCumulativeContext: true,
|
|
17621
|
+
supportsEstimateTokenCounter: true,
|
|
17622
|
+
tabJumpPrintLineRange: true,
|
|
17623
|
+
toolFormatterType: "TOOL_FORMATTER_TYPE_XML"
|
|
16607
17624
|
}
|
|
16608
17625
|
},
|
|
16609
|
-
|
|
16610
|
-
|
|
16611
|
-
{
|
|
16612
|
-
displayName: "Recommended",
|
|
16613
|
-
groups: [
|
|
16614
|
-
{
|
|
16615
|
-
modelIds: [
|
|
16616
|
-
"gemini-3.5-flash",
|
|
16617
|
-
"gemini-3.1-pro",
|
|
16618
|
-
"claude-sonnet-4-6",
|
|
16619
|
-
"claude-opus-4-6-thinking",
|
|
16620
|
-
"gpt-oss-120b-medium"
|
|
16621
|
-
]
|
|
16622
|
-
}
|
|
16623
|
-
]
|
|
16624
|
-
}
|
|
16625
|
-
],
|
|
16626
|
-
commandModelIds: [
|
|
16627
|
-
"gemini-3-flash"
|
|
17626
|
+
mqueryModelIds: [
|
|
17627
|
+
"gemini-3.1-flash-lite"
|
|
16628
17628
|
],
|
|
16629
17629
|
tabModelIds: [
|
|
16630
17630
|
"chat_20706",
|
|
16631
17631
|
"chat_23310"
|
|
16632
17632
|
],
|
|
16633
|
-
imageGenerationModelIds: [
|
|
16634
|
-
"gemini-3.1-flash-image"
|
|
16635
|
-
],
|
|
16636
|
-
mqueryModelIds: [
|
|
16637
|
-
"gemini-3.1-flash-lite"
|
|
16638
|
-
],
|
|
16639
|
-
webSearchModelIds: [
|
|
16640
|
-
"gemini-3.1-flash-lite"
|
|
16641
|
-
],
|
|
16642
|
-
deprecatedModelIds: {
|
|
16643
|
-
"gemini-3.1-pro-high": {
|
|
16644
|
-
newModelId: "gemini-pro-agent",
|
|
16645
|
-
oldModelEnum: "MODEL_PLACEHOLDER_M37",
|
|
16646
|
-
newModelEnum: "MODEL_PLACEHOLDER_M16"
|
|
16647
|
-
}
|
|
16648
|
-
},
|
|
16649
|
-
commitMessageModelIds: [
|
|
16650
|
-
"gemini-3.1-flash-lite"
|
|
16651
|
-
],
|
|
16652
|
-
audioTranscriptionModelIds: [
|
|
16653
|
-
"models/proactive-observer"
|
|
16654
|
-
],
|
|
16655
|
-
experimentIds: [
|
|
16656
|
-
106101246,
|
|
16657
|
-
106168863,
|
|
16658
|
-
105979552,
|
|
16659
|
-
105979574,
|
|
16660
|
-
106015333,
|
|
16661
|
-
105979579,
|
|
16662
|
-
105867471,
|
|
16663
|
-
106123599,
|
|
16664
|
-
106076629,
|
|
16665
|
-
106100625,
|
|
16666
|
-
105930909,
|
|
16667
|
-
106143956,
|
|
16668
|
-
105879567,
|
|
16669
|
-
105856899,
|
|
16670
|
-
106064030,
|
|
16671
|
-
105757908,
|
|
16672
|
-
106240760,
|
|
16673
|
-
106106760,
|
|
16674
|
-
106021688,
|
|
16675
|
-
106014288,
|
|
16676
|
-
105887299,
|
|
16677
|
-
106278607,
|
|
16678
|
-
106212376,
|
|
16679
|
-
106281951,
|
|
16680
|
-
106264532,
|
|
16681
|
-
106044947,
|
|
16682
|
-
106032303,
|
|
16683
|
-
106228452,
|
|
16684
|
-
106121606,
|
|
16685
|
-
105979531,
|
|
16686
|
-
105979553,
|
|
16687
|
-
106015328,
|
|
16688
|
-
105867469,
|
|
16689
|
-
106123597,
|
|
16690
|
-
106100654,
|
|
16691
|
-
106064028,
|
|
16692
|
-
106240748,
|
|
16693
|
-
106038164,
|
|
16694
|
-
106032301,
|
|
16695
|
-
106121604
|
|
16696
|
-
],
|
|
16697
17633
|
tieredModelIds: {
|
|
17634
|
+
flash: [
|
|
17635
|
+
"gemini-3.7-flash-tiered"
|
|
17636
|
+
],
|
|
16698
17637
|
flashLite: [
|
|
16699
17638
|
"gemini-3.1-flash-lite"
|
|
16700
17639
|
],
|
|
16701
|
-
flash: [
|
|
16702
|
-
"gemini-3-flash-agent"
|
|
16703
|
-
],
|
|
16704
17640
|
pro: [
|
|
16705
17641
|
"gemini-3.1-pro-low"
|
|
16706
17642
|
]
|
|
16707
|
-
}
|
|
17643
|
+
},
|
|
17644
|
+
webSearchModelIds: [
|
|
17645
|
+
"gemini-3.1-flash-lite"
|
|
17646
|
+
]
|
|
16708
17647
|
};
|
|
16709
17648
|
|
|
16710
17649
|
// src/sdk/request-helpers/types.ts
|
|
@@ -16967,7 +17906,12 @@ import { randomUUID as randomUUID2 } from "crypto";
|
|
|
16967
17906
|
|
|
16968
17907
|
// src/sdk/request/shared.ts
|
|
16969
17908
|
var REQUEST_MODEL_FALLBACKS = {
|
|
16970
|
-
|
|
17909
|
+
// gemini-3.1-pro-high still appears in `agy models` output but its backend
|
|
17910
|
+
// enum (MODEL_PLACEHOLDER_M37) was deprecated server-side in favor of
|
|
17911
|
+
// gemini-pro-agent (MODEL_PLACEHOLDER_M16). See models.json
|
|
17912
|
+
// deprecatedModelIds entry. Rewrite the model id before getModelEnum
|
|
17913
|
+
// resolves the deprecated enum, so both body.model and labels.model_enum
|
|
17914
|
+
// use the live canonical id and enum.
|
|
16971
17915
|
"gemini-3.1-pro-high": "gemini-pro-agent"
|
|
16972
17916
|
};
|
|
16973
17917
|
var GENERATIVE_LANGUAGE_HOST = new URL(AGY_GENERATIVE_LANGUAGE_ENDPOINT).host;
|
|
@@ -17119,7 +18063,7 @@ function normalizeRequestPayloadIdentifiers(payload) {
|
|
|
17119
18063
|
}
|
|
17120
18064
|
|
|
17121
18065
|
// src/sdk/request/openai.ts
|
|
17122
|
-
function transformOpenAIToolCalls(requestPayload) {
|
|
18066
|
+
function transformOpenAIToolCalls(requestPayload, toolMapper) {
|
|
17123
18067
|
const messages = requestPayload.messages;
|
|
17124
18068
|
if (!messages || !Array.isArray(messages)) {
|
|
17125
18069
|
return;
|
|
@@ -17145,10 +18089,11 @@ function transformOpenAIToolCalls(requestPayload) {
|
|
|
17145
18089
|
if (!fn || typeof fn !== "object") {
|
|
17146
18090
|
continue;
|
|
17147
18091
|
}
|
|
17148
|
-
const
|
|
18092
|
+
const rawName = fn.name ?? "";
|
|
18093
|
+
const name = toolMapper ? toolMapper.toGemini(rawName) : rawName;
|
|
17149
18094
|
const args = parseJsonObject(fn.arguments);
|
|
17150
18095
|
const functionCallPart = {
|
|
17151
|
-
name
|
|
18096
|
+
name,
|
|
17152
18097
|
args
|
|
17153
18098
|
};
|
|
17154
18099
|
if (typeof toolCall.id === "string" && toolCall.id.length > 0) {
|
|
@@ -17208,6 +18153,165 @@ function parseJsonObject(value) {
|
|
|
17208
18153
|
}
|
|
17209
18154
|
}
|
|
17210
18155
|
|
|
18156
|
+
// src/sdk/request/tool-mapper.ts
|
|
18157
|
+
function sanitizeToolName(name) {
|
|
18158
|
+
if (!name || typeof name !== "string") {
|
|
18159
|
+
return "unnamed_tool";
|
|
18160
|
+
}
|
|
18161
|
+
let sanitized = name.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
18162
|
+
if (!/^[a-zA-Z_]/.test(sanitized)) {
|
|
18163
|
+
sanitized = `_${sanitized}`;
|
|
18164
|
+
}
|
|
18165
|
+
return sanitized;
|
|
18166
|
+
}
|
|
18167
|
+
var ToolMapper = class {
|
|
18168
|
+
originalToSanitized = /* @__PURE__ */ new Map();
|
|
18169
|
+
sanitizedToOriginal = /* @__PURE__ */ new Map();
|
|
18170
|
+
/**
|
|
18171
|
+
* Register a tool name and get its Gemini-compliant sanitized name.
|
|
18172
|
+
* Handles naming collisions by appending a numeric suffix if needed.
|
|
18173
|
+
*/
|
|
18174
|
+
register(originalName) {
|
|
18175
|
+
if (!originalName || typeof originalName !== "string") {
|
|
18176
|
+
return originalName;
|
|
18177
|
+
}
|
|
18178
|
+
const existing = this.originalToSanitized.get(originalName);
|
|
18179
|
+
if (existing) {
|
|
18180
|
+
return existing;
|
|
18181
|
+
}
|
|
18182
|
+
const baseSanitized = sanitizeToolName(originalName);
|
|
18183
|
+
let sanitized = baseSanitized;
|
|
18184
|
+
let counter = 1;
|
|
18185
|
+
while (this.sanitizedToOriginal.has(sanitized) && this.sanitizedToOriginal.get(sanitized) !== originalName) {
|
|
18186
|
+
sanitized = `${baseSanitized}_${counter++}`;
|
|
18187
|
+
}
|
|
18188
|
+
this.originalToSanitized.set(originalName, sanitized);
|
|
18189
|
+
this.sanitizedToOriginal.set(sanitized, originalName);
|
|
18190
|
+
return sanitized;
|
|
18191
|
+
}
|
|
18192
|
+
/**
|
|
18193
|
+
* Map an original tool name to sanitized Gemini name.
|
|
18194
|
+
* If not already registered, registers it on the fly.
|
|
18195
|
+
*/
|
|
18196
|
+
toGemini(originalName) {
|
|
18197
|
+
if (!originalName || typeof originalName !== "string") {
|
|
18198
|
+
return originalName;
|
|
18199
|
+
}
|
|
18200
|
+
const sanitized = this.originalToSanitized.get(originalName);
|
|
18201
|
+
if (sanitized) {
|
|
18202
|
+
return sanitized;
|
|
18203
|
+
}
|
|
18204
|
+
return this.register(originalName);
|
|
18205
|
+
}
|
|
18206
|
+
/**
|
|
18207
|
+
* Restore a sanitized Gemini tool name back to the original client tool name.
|
|
18208
|
+
*/
|
|
18209
|
+
fromGemini(sanitizedName) {
|
|
18210
|
+
if (!sanitizedName || typeof sanitizedName !== "string") {
|
|
18211
|
+
return sanitizedName;
|
|
18212
|
+
}
|
|
18213
|
+
return this.sanitizedToOriginal.get(sanitizedName) ?? sanitizedName;
|
|
18214
|
+
}
|
|
18215
|
+
/**
|
|
18216
|
+
* Register tools from Gemini `tools[].functionDeclarations` array.
|
|
18217
|
+
*/
|
|
18218
|
+
registerFromFunctionDeclarations(tools) {
|
|
18219
|
+
if (!Array.isArray(tools)) return;
|
|
18220
|
+
for (const tool2 of tools) {
|
|
18221
|
+
if (tool2 && Array.isArray(tool2.functionDeclarations)) {
|
|
18222
|
+
for (const fn of tool2.functionDeclarations) {
|
|
18223
|
+
if (fn && typeof fn.name === "string") {
|
|
18224
|
+
this.register(fn.name);
|
|
18225
|
+
}
|
|
18226
|
+
}
|
|
18227
|
+
}
|
|
18228
|
+
}
|
|
18229
|
+
}
|
|
18230
|
+
/**
|
|
18231
|
+
* Register tools from OpenAI format `tools[].function.name`.
|
|
18232
|
+
*/
|
|
18233
|
+
registerFromOpenAITools(tools) {
|
|
18234
|
+
if (!Array.isArray(tools)) return;
|
|
18235
|
+
for (const tool2 of tools) {
|
|
18236
|
+
if (tool2 && typeof tool2 === "object") {
|
|
18237
|
+
const fn = tool2.function;
|
|
18238
|
+
if (fn && typeof fn.name === "string") {
|
|
18239
|
+
this.register(fn.name);
|
|
18240
|
+
}
|
|
18241
|
+
}
|
|
18242
|
+
}
|
|
18243
|
+
}
|
|
18244
|
+
/**
|
|
18245
|
+
* Scan contents/messages to register any previously used tool names.
|
|
18246
|
+
*/
|
|
18247
|
+
registerFromContents(contents) {
|
|
18248
|
+
if (!Array.isArray(contents)) return;
|
|
18249
|
+
for (const content of contents) {
|
|
18250
|
+
if (!content || typeof content !== "object") continue;
|
|
18251
|
+
const parts = content.parts;
|
|
18252
|
+
if (Array.isArray(parts)) {
|
|
18253
|
+
for (const part of parts) {
|
|
18254
|
+
if (!part || typeof part !== "object") continue;
|
|
18255
|
+
const p = part;
|
|
18256
|
+
if (p.functionCall && typeof p.functionCall.name === "string") {
|
|
18257
|
+
this.register(p.functionCall.name);
|
|
18258
|
+
}
|
|
18259
|
+
if (p.functionResponse && typeof p.functionResponse.name === "string") {
|
|
18260
|
+
this.register(p.functionResponse.name);
|
|
18261
|
+
}
|
|
18262
|
+
}
|
|
18263
|
+
}
|
|
18264
|
+
}
|
|
18265
|
+
}
|
|
18266
|
+
};
|
|
18267
|
+
var sessionMappers = /* @__PURE__ */ new Map();
|
|
18268
|
+
var MAX_SESSION_AGE_MS = 24 * 60 * 60 * 1e3;
|
|
18269
|
+
function getToolMapper(sessionId) {
|
|
18270
|
+
if (!sessionId) {
|
|
18271
|
+
return new ToolMapper();
|
|
18272
|
+
}
|
|
18273
|
+
const now = Date.now();
|
|
18274
|
+
const existing = sessionMappers.get(sessionId);
|
|
18275
|
+
if (existing && now - existing.updatedAt < MAX_SESSION_AGE_MS) {
|
|
18276
|
+
existing.updatedAt = now;
|
|
18277
|
+
return existing.mapper;
|
|
18278
|
+
}
|
|
18279
|
+
if (sessionMappers.size > 1e3) {
|
|
18280
|
+
for (const [key, value] of sessionMappers.entries()) {
|
|
18281
|
+
if (now - value.updatedAt >= MAX_SESSION_AGE_MS) {
|
|
18282
|
+
sessionMappers.delete(key);
|
|
18283
|
+
}
|
|
18284
|
+
}
|
|
18285
|
+
}
|
|
18286
|
+
const mapper = new ToolMapper();
|
|
18287
|
+
sessionMappers.set(sessionId, { mapper, updatedAt: now });
|
|
18288
|
+
return mapper;
|
|
18289
|
+
}
|
|
18290
|
+
function restoreToolNamesInResponse(body, toolMapper) {
|
|
18291
|
+
if (!body || typeof body !== "object") return;
|
|
18292
|
+
const b = body;
|
|
18293
|
+
const target = b.response && typeof b.response === "object" ? b.response : b;
|
|
18294
|
+
const candidates = target.candidates;
|
|
18295
|
+
if (Array.isArray(candidates)) {
|
|
18296
|
+
for (const cand of candidates) {
|
|
18297
|
+
if (!cand || typeof cand !== "object") continue;
|
|
18298
|
+
const content = cand.content;
|
|
18299
|
+
if (!content || typeof content !== "object") continue;
|
|
18300
|
+
const parts = content.parts;
|
|
18301
|
+
if (Array.isArray(parts)) {
|
|
18302
|
+
for (const part of parts) {
|
|
18303
|
+
if (!part || typeof part !== "object") continue;
|
|
18304
|
+
const p = part;
|
|
18305
|
+
if (p.functionCall && typeof p.functionCall.name === "string") {
|
|
18306
|
+
const fnCall = p.functionCall;
|
|
18307
|
+
fnCall.name = toolMapper.fromGemini(fnCall.name);
|
|
18308
|
+
}
|
|
18309
|
+
}
|
|
18310
|
+
}
|
|
18311
|
+
}
|
|
18312
|
+
}
|
|
18313
|
+
}
|
|
18314
|
+
|
|
17211
18315
|
// src/sdk/request/prepare.ts
|
|
17212
18316
|
var STREAM_ACTION = "streamGenerateContent";
|
|
17213
18317
|
function prepareAgyRequest(input, init, accessToken, projectId, thinkingConfigDefaults) {
|
|
@@ -17267,11 +18371,14 @@ function prepareAgyRequest(input, init, accessToken, projectId, thinkingConfigDe
|
|
|
17267
18371
|
};
|
|
17268
18372
|
}
|
|
17269
18373
|
function getModelEnum(modelName) {
|
|
18374
|
+
const deprecated = models_default.deprecatedModelIds;
|
|
18375
|
+
if (deprecated && deprecated[modelName] && deprecated[modelName].newModelEnum) {
|
|
18376
|
+
return deprecated[modelName].newModelEnum;
|
|
18377
|
+
}
|
|
17270
18378
|
const models = models_default.models;
|
|
17271
18379
|
if (models && models[modelName] && models[modelName].model) {
|
|
17272
18380
|
return models[modelName].model;
|
|
17273
18381
|
}
|
|
17274
|
-
const deprecated = models_default.deprecatedModelIds;
|
|
17275
18382
|
if (deprecated && deprecated[modelName] && deprecated[modelName].oldModelEnum) {
|
|
17276
18383
|
return deprecated[modelName].oldModelEnum;
|
|
17277
18384
|
}
|
|
@@ -17293,8 +18400,11 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
|
|
|
17293
18400
|
wrappedBody2.userAgent = wrappedBody2.userAgent || "antigravity";
|
|
17294
18401
|
}
|
|
17295
18402
|
const { userPromptId: userPromptId2, sessionId: sessionId2, requestId: requestId2 } = normalizeWrappedIdentifiers(wrappedBody2);
|
|
18403
|
+
const toolMapper2 = getToolMapper(sessionId2);
|
|
17296
18404
|
const requestPayloadInside = wrappedBody2.request;
|
|
17297
18405
|
if (requestPayloadInside) {
|
|
18406
|
+
toolMapper2.registerFromFunctionDeclarations(requestPayloadInside.tools);
|
|
18407
|
+
toolMapper2.registerFromContents(requestPayloadInside.contents);
|
|
17298
18408
|
normalizeThinking(
|
|
17299
18409
|
requestPayloadInside,
|
|
17300
18410
|
resolveDefaultThinkingConfig(thinkingConfigDefaults, requestedModel, effectiveModel),
|
|
@@ -17312,10 +18422,14 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
|
|
|
17312
18422
|
};
|
|
17313
18423
|
}
|
|
17314
18424
|
if (requestPayloadInside && Array.isArray(requestPayloadInside.tools)) {
|
|
17315
|
-
normalizeToolSchemaTypes(requestPayloadInside.tools);
|
|
18425
|
+
normalizeToolSchemaTypes(requestPayloadInside.tools, toolMapper2);
|
|
18426
|
+
}
|
|
18427
|
+
if (requestPayloadInside) {
|
|
18428
|
+
normalizeToolConfig(requestPayloadInside, toolMapper2);
|
|
17316
18429
|
}
|
|
17317
18430
|
if (requestPayloadInside && Array.isArray(requestPayloadInside.contents)) {
|
|
17318
18431
|
let contents2 = requestPayloadInside.contents;
|
|
18432
|
+
normalizeToolNamesInContents(contents2, toolMapper2);
|
|
17319
18433
|
injectMissingToolCallIds(contents2);
|
|
17320
18434
|
fixOrphanedFunctionResponses(contents2);
|
|
17321
18435
|
const tracker = getTurnStateTracker();
|
|
@@ -17335,10 +18449,16 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
|
|
|
17335
18449
|
return { body: JSON.stringify(wrappedBody2), userPromptId: userPromptId2, sessionId: sessionId2 };
|
|
17336
18450
|
}
|
|
17337
18451
|
const requestPayload = { ...parsedBody };
|
|
18452
|
+
const { userPromptId, sessionId, requestId } = normalizeRequestPayloadIdentifiers(requestPayload);
|
|
18453
|
+
const toolMapper = getToolMapper(sessionId);
|
|
18454
|
+
toolMapper.registerFromOpenAITools(requestPayload.tools);
|
|
18455
|
+
toolMapper.registerFromFunctionDeclarations(requestPayload.tools);
|
|
18456
|
+
toolMapper.registerFromContents(requestPayload.contents);
|
|
17338
18457
|
if (Array.isArray(requestPayload.tools)) {
|
|
17339
|
-
normalizeToolSchemaTypes(requestPayload.tools);
|
|
18458
|
+
normalizeToolSchemaTypes(requestPayload.tools, toolMapper);
|
|
17340
18459
|
}
|
|
17341
|
-
|
|
18460
|
+
normalizeToolConfig(requestPayload, toolMapper);
|
|
18461
|
+
transformOpenAIToolCalls(requestPayload, toolMapper);
|
|
17342
18462
|
addThoughtSignaturesToFunctionCalls(requestPayload);
|
|
17343
18463
|
normalizeThinking(
|
|
17344
18464
|
requestPayload,
|
|
@@ -17347,9 +18467,9 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
|
|
|
17347
18467
|
);
|
|
17348
18468
|
normalizeSystemInstruction(requestPayload);
|
|
17349
18469
|
normalizeCachedContent(requestPayload);
|
|
17350
|
-
const { userPromptId, sessionId, requestId } = normalizeRequestPayloadIdentifiers(requestPayload);
|
|
17351
18470
|
let contents = requestPayload.contents;
|
|
17352
18471
|
if (Array.isArray(contents)) {
|
|
18472
|
+
normalizeToolNamesInContents(contents, toolMapper);
|
|
17353
18473
|
injectMissingToolCallIds(contents);
|
|
17354
18474
|
fixOrphanedFunctionResponses(contents);
|
|
17355
18475
|
const tracker = getTurnStateTracker();
|
|
@@ -17420,10 +18540,10 @@ function normalizeThinking(requestPayload, modelThinkingConfig, providerThinking
|
|
|
17420
18540
|
requestPayload.thinkingConfig,
|
|
17421
18541
|
rawGenerationConfig?.thinkingConfig
|
|
17422
18542
|
);
|
|
17423
|
-
const normalizedThinkingConfig = normalizeThinkingConfig(mergedThinkingConfig);
|
|
17424
18543
|
if (Object.prototype.hasOwnProperty.call(requestPayload, "thinkingConfig")) {
|
|
17425
18544
|
delete requestPayload.thinkingConfig;
|
|
17426
18545
|
}
|
|
18546
|
+
const normalizedThinkingConfig = normalizeThinkingConfig(mergedThinkingConfig);
|
|
17427
18547
|
if (!normalizedThinkingConfig) {
|
|
17428
18548
|
if (rawGenerationConfig) {
|
|
17429
18549
|
requestPayload.generationConfig = rawGenerationConfig;
|
|
@@ -17441,7 +18561,7 @@ function getImplicitThinkingConfigForModel(modelId) {
|
|
|
17441
18561
|
return void 0;
|
|
17442
18562
|
}
|
|
17443
18563
|
return {
|
|
17444
|
-
thinkingBudget: normalizedModelId.
|
|
18564
|
+
thinkingBudget: normalizedModelId.endsWith("-low") ? 1e3 : 10001,
|
|
17445
18565
|
includeThoughts: true
|
|
17446
18566
|
};
|
|
17447
18567
|
}
|
|
@@ -17463,7 +18583,7 @@ function mergeThinkingConfigs(...configs) {
|
|
|
17463
18583
|
function isRecord2(value) {
|
|
17464
18584
|
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
17465
18585
|
}
|
|
17466
|
-
function normalizeToolSchemaTypes(tools) {
|
|
18586
|
+
function normalizeToolSchemaTypes(tools, toolMapper) {
|
|
17467
18587
|
if (!Array.isArray(tools)) return;
|
|
17468
18588
|
const validSchemaKeys = /* @__PURE__ */ new Set([
|
|
17469
18589
|
"type",
|
|
@@ -17514,7 +18634,7 @@ function normalizeToolSchemaTypes(tools) {
|
|
|
17514
18634
|
if (tool2 && Array.isArray(tool2.functionDeclarations)) {
|
|
17515
18635
|
for (const fn of tool2.functionDeclarations) {
|
|
17516
18636
|
if (fn && typeof fn.name === "string") {
|
|
17517
|
-
fn.name = fn.name.
|
|
18637
|
+
fn.name = toolMapper ? toolMapper.toGemini(fn.name) : sanitizeToolName(fn.name);
|
|
17518
18638
|
}
|
|
17519
18639
|
if (fn) {
|
|
17520
18640
|
if (!fn.parameters) {
|
|
@@ -17526,6 +18646,37 @@ function normalizeToolSchemaTypes(tools) {
|
|
|
17526
18646
|
}
|
|
17527
18647
|
}
|
|
17528
18648
|
}
|
|
18649
|
+
function normalizeToolConfig(requestPayload, toolMapper) {
|
|
18650
|
+
const toolConfig = requestPayload.toolConfig ?? requestPayload.tool_config;
|
|
18651
|
+
if (!toolConfig || typeof toolConfig !== "object") return;
|
|
18652
|
+
const fnCallingConfig = toolConfig.functionCallingConfig ?? toolConfig.function_calling_config;
|
|
18653
|
+
if (!fnCallingConfig || typeof fnCallingConfig !== "object") return;
|
|
18654
|
+
const allowedNames = fnCallingConfig.allowedFunctionNames ?? fnCallingConfig.allowed_function_names;
|
|
18655
|
+
if (Array.isArray(allowedNames)) {
|
|
18656
|
+
const mapped = allowedNames.map((name) => typeof name === "string" ? toolMapper.toGemini(name) : name);
|
|
18657
|
+
if (fnCallingConfig.allowedFunctionNames) {
|
|
18658
|
+
fnCallingConfig.allowedFunctionNames = mapped;
|
|
18659
|
+
}
|
|
18660
|
+
if (fnCallingConfig.allowed_function_names) {
|
|
18661
|
+
fnCallingConfig.allowed_function_names = mapped;
|
|
18662
|
+
}
|
|
18663
|
+
}
|
|
18664
|
+
}
|
|
18665
|
+
function normalizeToolNamesInContents(contents, toolMapper) {
|
|
18666
|
+
if (!Array.isArray(contents)) return;
|
|
18667
|
+
for (const msg of contents) {
|
|
18668
|
+
if (!msg || typeof msg !== "object" || !Array.isArray(msg.parts)) continue;
|
|
18669
|
+
for (const part of msg.parts) {
|
|
18670
|
+
if (!part || typeof part !== "object") continue;
|
|
18671
|
+
if (part.functionCall && typeof part.functionCall.name === "string") {
|
|
18672
|
+
part.functionCall.name = toolMapper.toGemini(part.functionCall.name);
|
|
18673
|
+
}
|
|
18674
|
+
if (part.functionResponse && typeof part.functionResponse.name === "string") {
|
|
18675
|
+
part.functionResponse.name = toolMapper.toGemini(part.functionResponse.name);
|
|
18676
|
+
}
|
|
18677
|
+
}
|
|
18678
|
+
}
|
|
18679
|
+
}
|
|
17529
18680
|
function normalizeSystemInstruction(requestPayload) {
|
|
17530
18681
|
if ("system_instruction" in requestPayload) {
|
|
17531
18682
|
requestPayload.systemInstruction = requestPayload.system_instruction;
|
|
@@ -17604,20 +18755,26 @@ function injectMissingToolCallIds(contents) {
|
|
|
17604
18755
|
}
|
|
17605
18756
|
}
|
|
17606
18757
|
function applyLatestSignature(contents, latestSig) {
|
|
17607
|
-
const
|
|
18758
|
+
const allFunctionParts = [];
|
|
17608
18759
|
for (const content of contents) {
|
|
17609
18760
|
if (content && typeof content === "object" && Array.isArray(content.parts)) {
|
|
17610
18761
|
for (const part of content.parts) {
|
|
17611
18762
|
if (part && typeof part === "object" && part.functionCall) {
|
|
17612
|
-
|
|
18763
|
+
if (part.functionCall.thoughtSignature) {
|
|
18764
|
+
if (!part.thoughtSignature || part.thoughtSignature === "skip_thought_signature_validator") {
|
|
18765
|
+
part.thoughtSignature = part.functionCall.thoughtSignature;
|
|
18766
|
+
}
|
|
18767
|
+
delete part.functionCall.thoughtSignature;
|
|
18768
|
+
}
|
|
18769
|
+
allFunctionParts.push(part);
|
|
17613
18770
|
}
|
|
17614
18771
|
}
|
|
17615
18772
|
}
|
|
17616
18773
|
}
|
|
17617
|
-
if (
|
|
17618
|
-
const
|
|
17619
|
-
if (!
|
|
17620
|
-
|
|
18774
|
+
if (allFunctionParts.length > 0 && latestSig) {
|
|
18775
|
+
const lastPart = allFunctionParts[allFunctionParts.length - 1];
|
|
18776
|
+
if (!lastPart.thoughtSignature || lastPart.thoughtSignature === "skip_thought_signature_validator") {
|
|
18777
|
+
lastPart.thoughtSignature = latestSig;
|
|
17621
18778
|
}
|
|
17622
18779
|
}
|
|
17623
18780
|
}
|
|
@@ -17702,6 +18859,10 @@ async function transformAgyResponse(response, streaming, _ignoredDebugContext, r
|
|
|
17702
18859
|
const previewPatched = parsed ? rewriteGeminiPreviewAccessError(enhanced?.body ?? parsed, response.status, requestedModel) : null;
|
|
17703
18860
|
const effectiveBodyRaw = previewPatched ?? enhanced?.body ?? parsed ?? void 0;
|
|
17704
18861
|
const effectiveBody = effectiveBodyRaw && typeof effectiveBodyRaw === "object" ? injectResponseIdFromTrace(effectiveBodyRaw) : effectiveBodyRaw;
|
|
18862
|
+
if (effectiveBody) {
|
|
18863
|
+
const toolMapper = getToolMapper(sessionId);
|
|
18864
|
+
restoreToolNamesInResponse(effectiveBody, toolMapper);
|
|
18865
|
+
}
|
|
17705
18866
|
attachUsageHeaders(headers, effectiveBody);
|
|
17706
18867
|
if (!parsed) {
|
|
17707
18868
|
return new Response(text, init);
|
|
@@ -17756,6 +18917,8 @@ function transformStreamingPayloadStream(stream, sessionId, chatLogger) {
|
|
|
17756
18917
|
},
|
|
17757
18918
|
transformThinkingParts: (response) => {
|
|
17758
18919
|
if (response && typeof response === "object") {
|
|
18920
|
+
const toolMapper = getToolMapper(sessionId);
|
|
18921
|
+
restoreToolNamesInResponse(response, toolMapper);
|
|
17759
18922
|
return injectResponseIdFromTrace(response);
|
|
17760
18923
|
}
|
|
17761
18924
|
return response;
|
|
@@ -17776,20 +18939,20 @@ function transformStreamingPayloadStream(stream, sessionId, chatLogger) {
|
|
|
17776
18939
|
}
|
|
17777
18940
|
|
|
17778
18941
|
// src/sdk/chat-logger.ts
|
|
17779
|
-
import { createWriteStream, existsSync as
|
|
17780
|
-
import { join as
|
|
18942
|
+
import { createWriteStream, existsSync as existsSync5, mkdirSync as mkdirSync4 } from "fs";
|
|
18943
|
+
import { join as join5 } from "path";
|
|
17781
18944
|
import { cwd } from "process";
|
|
17782
18945
|
function createChatLogger() {
|
|
17783
18946
|
if (process.env.AGY_LOG !== "1") {
|
|
17784
18947
|
return null;
|
|
17785
18948
|
}
|
|
17786
18949
|
try {
|
|
17787
|
-
const logDir =
|
|
17788
|
-
if (!
|
|
18950
|
+
const logDir = join5(cwd(), "agy_chat_log");
|
|
18951
|
+
if (!existsSync5(logDir)) {
|
|
17789
18952
|
mkdirSync4(logDir, { recursive: true });
|
|
17790
18953
|
}
|
|
17791
18954
|
const timestamp = Date.now();
|
|
17792
|
-
const logFile =
|
|
18955
|
+
const logFile = join5(logDir, `${timestamp}.log`);
|
|
17793
18956
|
const stream = createWriteStream(logFile, { flags: "w", encoding: "utf8" });
|
|
17794
18957
|
return new ChatLoggerImpl(stream);
|
|
17795
18958
|
} catch (error45) {
|
|
@@ -17908,6 +19071,24 @@ var latestAgyAuthResolver;
|
|
|
17908
19071
|
var latestAgyConfiguredProjectId;
|
|
17909
19072
|
var latestAgyUserAgentModel;
|
|
17910
19073
|
var STATIC_MODELS_SIMPLE = {
|
|
19074
|
+
"gemini-3.7-flash": {
|
|
19075
|
+
name: "Gemini 3.7 Flash",
|
|
19076
|
+
description: "Gemini 3.7 Flash base model. Select tier at runtime.",
|
|
19077
|
+
maxTokens: 1048576,
|
|
19078
|
+
maxOutputTokens: 65536,
|
|
19079
|
+
toolCall: true,
|
|
19080
|
+
reasoning: true,
|
|
19081
|
+
attachment: true
|
|
19082
|
+
},
|
|
19083
|
+
"gemini-3.6-flash": {
|
|
19084
|
+
name: "Gemini 3.6 Flash",
|
|
19085
|
+
description: "Gemini 3.6 Flash base model. Select tier at runtime.",
|
|
19086
|
+
maxTokens: 1048576,
|
|
19087
|
+
maxOutputTokens: 65536,
|
|
19088
|
+
toolCall: true,
|
|
19089
|
+
reasoning: true,
|
|
19090
|
+
attachment: true
|
|
19091
|
+
},
|
|
17911
19092
|
"gemini-3.5-flash": {
|
|
17912
19093
|
name: "Gemini 3.5 Flash",
|
|
17913
19094
|
description: "Gemini 3.5 Flash base model. Select tier at runtime.",
|
|
@@ -17955,7 +19136,19 @@ var STATIC_MODELS_SIMPLE = {
|
|
|
17955
19136
|
}
|
|
17956
19137
|
};
|
|
17957
19138
|
var TIER_MAPPING = {
|
|
19139
|
+
"gemini-3.7-flash": {
|
|
19140
|
+
low: "gemini-3.7-flash-low",
|
|
19141
|
+
medium: "gemini-3.7-flash-medium",
|
|
19142
|
+
high: "gemini-3.7-flash-high"
|
|
19143
|
+
},
|
|
19144
|
+
"gemini-3.6-flash": {
|
|
19145
|
+
minimal: "gemini-3.6-flash-low",
|
|
19146
|
+
low: "gemini-3.6-flash-low",
|
|
19147
|
+
medium: "gemini-3.6-flash-medium",
|
|
19148
|
+
high: "gemini-3.6-flash-high"
|
|
19149
|
+
},
|
|
17958
19150
|
"gemini-3.5-flash": {
|
|
19151
|
+
minimal: "gemini-3.5-flash-extra-low",
|
|
17959
19152
|
low: "gemini-3.5-flash-extra-low",
|
|
17960
19153
|
medium: "gemini-3.5-flash-low",
|
|
17961
19154
|
high: "gemini-3-flash-agent"
|
|
@@ -17970,7 +19163,20 @@ var buildModelFromSimple = (modelId, simple) => {
|
|
|
17970
19163
|
const isGpt = modelId.startsWith("gpt-");
|
|
17971
19164
|
let variants = void 0;
|
|
17972
19165
|
if (TIER_MAPPING[modelId]) {
|
|
19166
|
+
const hasMinimal = TIER_MAPPING[modelId].minimal !== void 0;
|
|
17973
19167
|
variants = {
|
|
19168
|
+
...hasMinimal ? {
|
|
19169
|
+
"minimal": {
|
|
19170
|
+
id: "minimal",
|
|
19171
|
+
name: "minimal",
|
|
19172
|
+
displayName: "minimal",
|
|
19173
|
+
title: "minimal",
|
|
19174
|
+
label: "minimal",
|
|
19175
|
+
options: { name: "minimal" },
|
|
19176
|
+
headers: { "x-agy-tier": "minimal" },
|
|
19177
|
+
thinkingConfig: { thinkingBudget: 1e3, includeThoughts: true }
|
|
19178
|
+
}
|
|
19179
|
+
} : {},
|
|
17974
19180
|
"low": { id: "low", name: "low", displayName: "low", title: "low", label: "low", options: { name: "low" }, headers: { "x-agy-tier": "low" } },
|
|
17975
19181
|
...TIER_MAPPING[modelId].medium !== void 0 ? { "medium": { id: "medium", name: "medium", displayName: "medium", title: "medium", label: "medium", options: { name: "medium" }, headers: { "x-agy-tier": "medium" } } } : {},
|
|
17976
19182
|
"high": { id: "high", name: "high", displayName: "high", title: "high", label: "high", options: { name: "high" }, headers: { "x-agy-tier": "high" } }
|
|
@@ -17988,6 +19194,19 @@ var buildModelFromSimple = (modelId, simple) => {
|
|
|
17988
19194
|
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
17989
19195
|
status: "active",
|
|
17990
19196
|
release_date: "2026-05-26",
|
|
19197
|
+
// Root-level properties for OpenCode v2 cache compatibility
|
|
19198
|
+
reasoning: simple.reasoning,
|
|
19199
|
+
attachment: simple.attachment,
|
|
19200
|
+
tool_call: simple.toolCall,
|
|
19201
|
+
temperature: true,
|
|
19202
|
+
modalities: {
|
|
19203
|
+
input: [
|
|
19204
|
+
"text",
|
|
19205
|
+
...simple.attachment ? ["image", "pdf"] : [],
|
|
19206
|
+
...!isClaude && !isGpt ? ["audio", "video"] : []
|
|
19207
|
+
],
|
|
19208
|
+
output: ["text"]
|
|
19209
|
+
},
|
|
17991
19210
|
capabilities: {
|
|
17992
19211
|
temperature: true,
|
|
17993
19212
|
reasoning: simple.reasoning,
|
|
@@ -18111,19 +19330,44 @@ function resolveModelTier(baseModelId, init) {
|
|
|
18111
19330
|
}
|
|
18112
19331
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
18113
19332
|
let latestConfig;
|
|
19333
|
+
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
18114
19334
|
const getModelsList = (provider) => {
|
|
18115
|
-
|
|
18116
|
-
|
|
18117
|
-
|
|
19335
|
+
const userModels = provider.models || {};
|
|
19336
|
+
const clonedStaticModels = JSON.parse(JSON.stringify(STATIC_MODELS));
|
|
19337
|
+
const strictModels = {};
|
|
19338
|
+
for (const [modelId, modelDetails] of Object.entries(clonedStaticModels)) {
|
|
19339
|
+
const existing = userModels[modelId] || {};
|
|
19340
|
+
strictModels[modelId] = {
|
|
18118
19341
|
...modelDetails,
|
|
18119
|
-
...
|
|
19342
|
+
...existing,
|
|
19343
|
+
reasoning: existing.reasoning ?? modelDetails.reasoning,
|
|
19344
|
+
attachment: existing.attachment ?? modelDetails.attachment,
|
|
19345
|
+
tool_call: existing.tool_call ?? modelDetails.tool_call,
|
|
19346
|
+
temperature: existing.temperature ?? modelDetails.temperature,
|
|
19347
|
+
modalities: {
|
|
19348
|
+
...modelDetails.modalities || {},
|
|
19349
|
+
...existing.modalities || {}
|
|
19350
|
+
},
|
|
19351
|
+
capabilities: {
|
|
19352
|
+
...modelDetails.capabilities || {},
|
|
19353
|
+
...existing.capabilities || {},
|
|
19354
|
+
input: {
|
|
19355
|
+
...modelDetails.capabilities?.input || {},
|
|
19356
|
+
...existing.capabilities?.input || {}
|
|
19357
|
+
},
|
|
19358
|
+
output: {
|
|
19359
|
+
...modelDetails.capabilities?.output || {},
|
|
19360
|
+
...existing.capabilities?.output || {}
|
|
19361
|
+
}
|
|
19362
|
+
}
|
|
18120
19363
|
};
|
|
18121
19364
|
}
|
|
19365
|
+
provider.models = strictModels;
|
|
18122
19366
|
if (latestConfig && latestConfig.provider && latestConfig.provider[AGY_PROVIDER_ID]) {
|
|
18123
|
-
latestConfig.provider[AGY_PROVIDER_ID].models =
|
|
19367
|
+
latestConfig.provider[AGY_PROVIDER_ID].models = provider.models;
|
|
18124
19368
|
}
|
|
18125
19369
|
normalizeProviderModelCosts(provider);
|
|
18126
|
-
return
|
|
19370
|
+
return provider.models;
|
|
18127
19371
|
};
|
|
18128
19372
|
try {
|
|
18129
19373
|
initDiskSignatureCache({
|
|
@@ -18175,7 +19419,7 @@ var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
|
18175
19419
|
models: {},
|
|
18176
19420
|
...config2.provider[AGY_PROVIDER_ID]
|
|
18177
19421
|
};
|
|
18178
|
-
config2.provider[AGY_PROVIDER_ID].models =
|
|
19422
|
+
config2.provider[AGY_PROVIDER_ID].models = getModelsList(config2.provider[AGY_PROVIDER_ID]);
|
|
18179
19423
|
},
|
|
18180
19424
|
tool: {
|
|
18181
19425
|
[AGY_QUOTA_TOOL_NAME]: createAgyQuotaTool({
|
|
@@ -18347,7 +19591,13 @@ var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
|
18347
19591
|
}
|
|
18348
19592
|
};
|
|
18349
19593
|
}
|
|
18350
|
-
|
|
19594
|
+
const models = getModelsList(provider);
|
|
19595
|
+
for (const [modelId, model] of Object.entries(models)) {
|
|
19596
|
+
if (STATIC_MODELS[modelId] && STATIC_MODELS[modelId].cost) {
|
|
19597
|
+
model.cost = STATIC_MODELS[modelId].cost;
|
|
19598
|
+
}
|
|
19599
|
+
}
|
|
19600
|
+
return models;
|
|
18351
19601
|
}
|
|
18352
19602
|
}
|
|
18353
19603
|
};
|
|
@@ -18378,7 +19628,7 @@ function resolveThinkingConfigDefaults(provider) {
|
|
|
18378
19628
|
const providerOptions = provider && typeof provider === "object" ? provider.options ?? void 0 : void 0;
|
|
18379
19629
|
const providerThinkingConfig = providerOptions?.thinkingConfig;
|
|
18380
19630
|
const modelThinkingConfigByModel = {};
|
|
18381
|
-
for (const [modelId, model] of Object.entries(provider
|
|
19631
|
+
for (const [modelId, model] of Object.entries(provider?.models ?? {})) {
|
|
18382
19632
|
if (!model || typeof model !== "object") {
|
|
18383
19633
|
continue;
|
|
18384
19634
|
}
|